2009年9月25日金曜日

メモリを64GB積んでみる

このエントリーをはてなブックマークに追加
Sunから贈られたSun Fire T2000にはメモリが16GB積まれていました。2006年秋から話が始まって、USの決裁が下りて実物が届けられたのは2007年5月です。8コアモデルにメモリ16GBですから、当時としてはがんばった構成だったと思います。16あるメモリスロットに、1GBメモリがぎっちり刺さっていました。

16GBのメモリに対して、普通の負荷のときのユーザプロセスによる使用量はわずか1.7GBで、残りのほとんどはカーネルメモリキャッシュでした。そのうちZFSのARCが7.7GBで、2.6GBは使われていなかったので、16GBで足りないと思ったことはありませんでした。

SunのWebサイトではT2000のメモリの仕様がDDR-533とされていました。そんなメモリはもう手に入りません。仮に足りないとしても増設は無理だと思っていたのですが、調べたらDDR2-533の間違いであることがわかりました。それなら手に入ります。ECC registeredとはいえ、この2年間のDRAM価格の急落で最大の4GB×16枚も手の届くところに来ています。増設の機運が高まってきました。

メモリを増設しても有効に使われないと意味がありません。増設すれば少なくともZFSのARCには使われるだろうと思ったのですが、いかんせんARCが不足している実感がありません。メモリに空きはありますし、arc_summaryによるとヒット率も80%あります。

ARCがさらにメモリを必要としているかを知るために、ソースコードを見ながらARCの挙動を軽く追ってみました。buf_hash_removeを呼び出す経路をたどれば、どれくらいメモリが足りずにキャッシュを捨てているかがわかるようです。あとはdtraceにまかせて
dtrace -n fbt:zfs:buf_hash_remove:entry'{stack(10);}'
こんな感じでスタックトレースを吐かせたところ、ものすごい勢いでキャッシュを捨てていることがわかったので、増設することになりました。

ftp.jaist.ac.jpが4GBのDDR2-667を16枚積んで64GBになったのは先月の出来事です。DDR2-533の4GBは手に入らなかったので、トランセンドのDDR2-667 (TS512MQR72V6T)を購入しました。16枚で24万円くらいでした。もっと安いのもありましたが、枚数が多いと死ぬ確率が高くなるので信頼性を重視しました。こんな感じで刺さってます。
メモリが64GBになったらARCは43GB使われるようになり、ヒット率は94%に上がりました。ヒットのうちメタデータとデータの比率は56%対44%です。16GBのころの比率は見ていないのですが、データのヒット率が低かった可能性があります。メモリを増設したらデータのヒット率が上がったのか、ZFSのディスクI/Oが激減しました。

16GBのころは、ZFSのfile level prefetchを有効にするとprefetchにほとんどヒットせず、無駄なディスクI/Oが発生するだけだったので無効にしてありました。64GBで有効にしたところ、それなりに機能することはわかりましたが、CPUの負荷に見合うほどの効果ではないので、やはり無効にしてあります。

L2ARCが使えればSSDとメモリが相補的に機能するようになるのですが、今のところはSSDのキャッシュにもメモリが使われていてもったいないです。もっとも、これだけメモリがあれば、SSDはいらないかもしれません。T2000のメモリ帯域幅は2バンク4チャンネルで25.6GB/sです。Core i7と比べたって見劣りしません。これが43GBもキャッシュに使われていますからね。

0 件のコメント:

コメントを投稿