古いsambaの記事へまだそれなりのアクセスがあるので、ここ最近の僕的トレンドを反映したものを書いてみました。
なるべく新しいsambaにアップグレードしましょう
3.5.*を推奨。
今までのチューニングtipsは忘れましょう
- socket options
など、デフォルトのconfに含まれていない、パフォーマンスのためのオプションは、一旦削除してみることをオススメします。
わざわざ指定せずとも、最新のsambaでは十分にパフォーマンスが出ます。
指定していることで、むしろパフォーマンスが悪化しているケースもあります。
ファイルシステムのマウントオプションを最適化しましょう
http://www.kernel.org/doc/Documentation/filesystems/ext3.txt
http://sourceforge.jp/projects/linuxjf/wiki/ext4.txt
ext3/4なら
- noatime
最終アクセス時刻の記録がパフォーマンス低下につながるので、極力OFFにします。
- data=writeback
データの整合性を捨てるモードです。クラッシュ時に古いデータに化けることがあるかも、です。
- nobh
バッファヘッドのデータページへの関連づけを避けます。
- commit=time
データとメタデータの同期間隔を指定します。
ぐらいを設定するとよいでしょう。
たとえば以下のように
/dev/sda /samba ext4 defaults,noatime,data=writeback,nobh,commit=60 1 2
デバイスのIOスケジューラを最適化しましょう
パフォーマンスが安定しないなら、topなりなんなりでio waitを観察してみましょう。
パフォーマンスが低下する際にio waitが急激に高くなっている場合、
echo /sys/block/sda/queue/scheduler cfq
ならば
echo "deadline" > /sys/block/sda/queue/scheduler
としてみましょう。
writeは詰まりませんが、readは詰まることがあります。
これはキャッシュを用いた遅延がwriteでは容易で、readでは難しいことが原因です。
deadlineスケジューラはreadを優先します。
また、あるいはサーバに搭載されているメモリが足りていないのかもしれません。freeを観察してみましょう。
ページキャッシュの設定を最適化しましょう
- dirty_expire_centisecs
この期限をすぎたページキャッシュはpdflushによりライトバックされます。
- dirty_writeback_centisecs
pdflushの起動間隔。
たとえば、
echo 12000 > /proc/sys/vm/dirty_expire_centisecs echo 2000 > /proc/sys/vm/dirty_writeback_centisecs
だと、20秒ごとにpdflushが起動。120秒を過ぎたキャッシュはライトバックされます。単位は1/100秒。
WDのHDDでレイテンシが気になるならIntelliParkを疑いましょう
「wdidle3」でググる
言うまでもないですが、環境によって最適値は変わります。上記の数値は一つの例です。
また以下についても留意してください。
ディスク書き込み間隔について
- 書き込み間隔が長くなる→HDDへのアクセスが減る→パフォーマンスが向上する
- 書き込み間隔が長くなる→キャッシュとして保持する時間が長くなる→障害時のデータ損失の可能性が高くなる
両者はトレードオフです。
write頻度が高いサーバで書き込み間隔を長く取ると、一度に大量のディスクアクセスが発生します
この場合は書き込み間隔を短くすると、一定したパフォーマンスを得られます。