サーバいじくり雑記

2010年2月6日

zfs swap

Filed under: FreeBSD — bompopo @ 12:00 午前

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とキャッシュが効いていておかしかったのかもしれませんね。

コメントする »

まだコメントはありません。

RSS feed for comments on this post. TrackBack URI

コメントを残す