かんたんsambaパフォーマンスちゅーにんぐ 2010年版

古い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頻度が高いサーバで書き込み間隔を長く取ると、一度に大量のディスクアクセスが発生します

この場合は書き込み間隔を短くすると、一定したパフォーマンスを得られます。



修正ログ

dirty_expire_centisecs、dirty_writeback_centisecsの単位を間違えていたのを修正しました。hzさん、ご指摘ありがとうございます!