sambaのパフォーマンスについて


最新のものはこちら
かんたんsambaパフォーマンスちゅーにんぐ 2010年版
http://d.hatena.ne.jp/ruby-U/20101213/1292229371


sambaには多彩なオプションがある。
デフォルトで(それなりに)問題なく動作するようになっているが、あれこれ設定すると様々な機能を追加することができる。
ここで注意するべきは、便利さとパフォーマンスはトレードオフだということ。
最小限の設定値を調節することに止めて、必要ではない機能は極力無効のままにしておくべきである。

socket options

最もパフォーマンスに影響する。

TCP_NODELAY

サーバが遅延を少なくするために適宜パケットを送信するようにする。これはtelnet接続で応答時間の向上をもたらしたり、あまり直観的でないが、小さな要求パケットが送られたり(Microsoft TCP/IP で発生するように)送達確認(ACK)が遅延したりする場合にもそれなりの速度を維持したりするために用いられる。これは 30-50 パーセントのスピードアップの効果がある。なお、Samba 2.0.4 においては、 socket options = TCP_NODELAYがこのオプションのデフォルト値である。

IPTOS_LOWDELAY

これはスループットを低下させても遅延を少なくするためのオプションであり、オプションを設定したサーバではなく、ルータや他のシステムの動作に影響する。IPTOSのオプションは新規のオプションであり、全てのOSやルータでサポートされているわけではない。サポートされている場合は、 TCP_NODELAY を設定する際に IPTOS_LOWDELAY も設定する。

SO_SNDBUF および SO_RCVBUF

送信および受信バッファはOSの規定値よりも大きい値に設定することが可能な場合がある。これにより(それが性能限界点を越えない範囲では)多少の速度向上が見込まれる。

上記オプションを調節して最適なパフォーマンスを導く。
小さなオフィスではTCP_NODELAY、IPTOS_LOWDELAYともに有効でいい。


また、パケットについては以下の記述を参考に。

TCP/IP はデータを小さいパケットに分割してマシン間を転送することで動作する。パケットを分割する際にはチェックサムが含まれるため、受信者がパケットのデータをチェックして転送中に発生しうるエラーを検出することが可能になっている。通常パケットを受信して整合性の検査を行うと、送達確認のパケットが送信者に対して返却され、"全パケットが完全に到着したので、送信を続行してほしい"という情報を伝達する。

ただし、通信を円滑に行うため TCP には、送信者が各パケット毎に送達確認を待たずに送信することができるパケット数(ウインドウ)という概念が存在する。(これにより、複数の送達確認をまとめて同時に送信者に送ることが可能になる。)言い方を変えると、この受信ウインドウとは送信者が受信者の送達確認を待たずに送信可能なバイト数である。MTU と同様、これはコネクションのタイプに応じて自動的に設定される。ウインドウを小さくしすぎると、送達確認のメッセージを不必要に待機することになる。様々なOSでソケット毎に適切なサイズのバッファが割り当てられ、プログラムがメモリを喰い尽くさないようになっている。

バッファサイズはバイト単位で割り当てられ、例えば SO_SNDBUF=8192 のように socket options 行で指定する。 socket options 設定オプションは以下のように設定する:

socket options = SO_SNDBUF=8192
通常は、このソケットオプションをデフォルト値よりも大きく設定する。デフォルト値は SunOS 4.1.3 や SVR4では、4098(monyo訳注4096の誤りでは??), AIXSolarisBSD では 8192-16384 である。とりあえず 16384 にしてみることを推奨する。Steven の書籍中で記述されているテストでは、Sambaとは直接関係ないものの40パーセントの性能向上を達成している。サイズを大きくしすぎると性能はかえって低下するので、この値の設定にはある程度の経験が必要である。

http://ppona.com/gpl/iodata/usl-5p/USLSRC100/daemon/samba/040924/samba-2.2.11-ja-1.0/docs/ja/htmldocs/using_samba/appb_02.html

フィルタリング系のオプション

hide files、hide dot files、hide unreadableなど、全てのファイルやディレクトリに対してチェックが発生するようなオプションはパフォーマンスの低下に直結する。
「ファイルを開くのに時間がかかる」「(動作全般が)遅い」という声があるなら、これが原因であることが多い。
ディレクトリ内のファイル数に比例してパフォーマンスが低下するので、
「だんだん遅くなってきた」「(管理者が)サボってるからだ」と管理者バッシングにも繋がりかねない。

クライアントごとに設定値を変える

SO_SNDBUF、SO_RCVBUFの最適値がクライアントごとに異なる場合、特定のクライアントでのみフィルタリングを有効にする場合などは、マシンごとにconfを用意しておき、globalセクションの末尾にてincludeする。

#smb.conf
[global]

...

include = smb.%h.conf #ホスト名
include = smb.%m.conf #マシン名
#smb.foomachine.conf
[global]

...

socket options = ...

クライアント側を疑う

web clientサービス

「共有フォルダを開くのが遅い」「右クリックしたらエクスプローラが数秒フリーズする」と言われたらweb clientサービスを疑う。
共有フォルダより先にWebDAVをチェックするため遅延が発生する。