ひとりごと

新しい記事:[2440]  古い記事:[2437] 表示単位 :

ついったー[おとなり日記] かがみさん Y.Kumagaiさん

2009/02/09 (月)

・ vm.kmem_size

うちのサーバーは FreeBSD 7-STABLE を使っているのですが、さっき csup してみたところ、UPDATING にこのように記載されていました。

20090207:
ZFS users on amd64 machines with 4GB or more of RAM should reevaluate their need for setting vm.kmem_size_max and vm.kmem_size manually. In fact, after recent changes to the kernel, the default value of vm.kmem_size is larger than the suggested manual setting in most ZFS/FreeBSD tuning guides.

翻訳すると「4GBオーバーなamd64でZFSを使ってる人はvm.kem_sizeを見直したほうがいいですよー。ぶっちゃけデフォルト値のほうが大きいかもですよー」という感じでしょうか。うちのサーバーはアホみたいにメモリ8GBも積んでるのでvm.kmem_sizeを1GBも確保しています。元々のデフォルトは数百MBだったかな? さて、新しい kernel ではデフォルト値がどれくらいになってるのでしょうか。

vm.kmem_size_scale: 3
vm.kmem_size_max: 1073741824
vm.kmem_size_min: 0
vm.kmem_size: 1073741824
vm.kmem_size_scale: 3
vm.kmem_size_max: 3865468109
vm.kmem_size_min: 0
vm.kmem_size: 2726834176
旧kernel(/boot/loader.confで値指定) 新kernel(デフォルト値)

おわ!! 2.5GBぐらいになってますな。いくらなんでも1GBよりも大きくならないだろうと思ってましたが、それの2.5倍になっちゃったとは(笑)。でもこれくらい大きく取れば何をしてもpanicしないだろうから安全で良いでしょうね。ちなみに、この値を大きくしたからといって即 空きメモリが小さくなる訳ではないようで、topで見ると相変わらず5GBほど空いてます。もしかしたらサーバーのメモリは4GBでも大丈夫なのかもしれません(T^T)。

[つっこみ]
02/09( 通りすがりさん )
私もあまり詳しくはないのですが、kmemはメモリ空間のうちアプリケーションに渡さない領域だから8GB中2.5GBならば残りの5.5GBがアプリケーションで利用できるはず。
そしてファイルサーバ専用機ならば5.5GBもいらないのは言うまでもないw
そもそもZFSがメモリ要求した時にカーネルがメモリないですって応答するとだだをこねる(ぉぃ)のが原因なので、ARC (Adaptive Replacement Cache)を制限しちゃうと性能はでないけどメモリを使わなくなる。
なので逆にARCを増やせばkmemも消費されるのでは?
あとZFSがメモリを消費するのは巨大なファイルを連続でアクセスする時のようです。
vfs.zfs.arc_max="512M"
↑/boot/loader.confにこういう設定です。
手元にテスト可能なamd64のZFSがないのでそちらはよくわかりませんが、kmem_sizeを限界まで大きくしてarc_maxも増やせば消費されるかも?
02/09( たかたに )
これまたいろいろありがとうございます。ふむふむ、 vfs.zfs.arc_max でキャッシュを制御できたりするのですね。てことでうちの値を見てみました。
# sysctl -a vfs.zfs.arc_max
vfs.zfs.arc_max: 2045125632
あわわわ、値をいじる前から2GB弱あります(笑)。数字を大きくすればメモリ使用量は上昇するかもしれないけれど、それでパフォーマンスが向上するとは考え難いですね(^_^)。
ちなみにうちのサーバは自分によるアクセス数がいちばん多いWWWサーバ(^^)なのでZFSを使わなければメモリは512MBで十分かもしれません(苦笑)。
[つっこみ]

新しい記事:[2440]  古い記事:[2437] 表示単位 :
※このページへのリンクは自由です。リンクの方法については[つっこみ]で表示されるページの最後をごらんください。
たかたに(takatani@mars.dti.ne.jp)