swapはzfsとは別パーティションに作らなければならないとおもっていたのですがそうではないみたい。今まではddでファイルを作ってFreeBSDのrc.confで
swapfile="/usr/local/swapfile"
としてswapスペースを用意しておいたのですが、こいつがいけなかったみたいです。makeworldするとほとんど確実に応答不能になる上に以下のようなエラーが発生します。
swap_pager: indefinite wait buffer: bufobj: 0, blkno: 40903, size: 40964 swap_pager: indefinite wait buffer: bufobj: 0, blkno: 53760, size: 81920
あらためてwiki見てみると、swapプールを作ることができるのですね。
# zfs create -V 2G zroot/swap # zfs set org.freebsd:swap=on zroot/swap # zfs set checksum=off zroot/swap
compressionがoff以外の場合はoffにしておきます。でもって、再びmakeworldしてみます。
エラーは発生しなくなりましたが、swapのin/out時にすごい重いのは変わりませんね。
プロパティを見てみますと…。なんかあやしいの発見。
# zfs get all zroot/swap | grep cache zroot/swap primarycache all default zroot/swap secondarycache all default
なんでswapなのにallでキャッシングしてるのですか?
メモリが足りない->swap->swapのためのキャッシュを確保->やっぱりメモリ足りない->さらにswap
のループが発生するのではないのでしょうか?
とりあえずnoneに設定してみましょうか。
# zfs set primarycache=none zroot/swap # zfs set secondarycache=none zroot/swap
ふむ。swap時の速度も上がり、その後の応答不能は軽減された気がします。正確には分かりませんが、効果あるかもです。
思えば、rc.confのswapfileで指定したときもchecksumとキャッシュが効いていておかしかったのかもしれませんね。
コメントを残す