Sambaサーバーのチューニング! 1

パフォーマンスに影響するパラメーター「socket options」

パフォーマンスに影響するパラメーター「socket options」

 socket optionsパラメーターは、Sambaが送受信するソケットに関するパラメーターです。昔の推奨値は「TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192」でしたが、現在のSambaにこのまま適用しても問題はないのでしょうか。

 また、Windowsクライアントとの通信に依存したmssのサイズに合わせたチューニングを行うという情報もWeb上には存在しますので、こちらの値も検討します。

 今回は以下の4パターンで計測しました。

 ケース(1)は、以前の推奨値8192とした場合です。以下のようなパラメータ値になります。

socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192

 ケース(2)は、mssに依存した値(今回の環境CentOS+Windows XPではmss=1460でしたので、その6倍の8760としてあります)とした場合です。以下のようなパラメータ値になります。

socket options = TCP_NODELAY SO_RCVBUF=8760 SO_SNDBUF=8760

 ケース(3)は、socket optionsを空白に設定とした場合です。以下のようなパラメータ値になります。

socket options =

 ケース(4)は、smb.confにsocket optionsパラメーター自体を設定しない場合です。

socket optinosの正解は?

 計測の結果、ケース(4)のsocket optionsパラメーターを設定しない場合が一番高いスループットが出ました。このテストの場合、ローカルで実行するsmbtortureより、ネットワークを経由HDBENCHの結果が、実際の状態に近いものと思われ、指定値の大きさとTCP_NODELAYの有無できれいにケース(4)(3)(2)(1)の順番となっていました。

 ケース(4)の場合TCP_NODELAYだけを指定した状態となりますが、SO_RCVBUFとSO_SNDBUFは0に設定されているわけではなく、デフォルト値が適用されています。このデフォルト値はlog levelを100にして、log.smbdを参照すると以下の値でsmbdが起動していました。

SO_RCVBUF=87380
SO_SNDBUF=16384

 今回のケース(1)と(2)では手動で設定した値が、上記デフォルト値より小さな値を設定していたため、ネットワーク経由でのパフォーマンス劣化が発生していたものと推測されます。また、ケース(1)の8192は(2)の8760と数値としては、ほとんど違いが無いのですが、smbtortureでは内部スループットが大幅に劣化している点も興味深いです。

 ケース(3)の場合、SO_RCVBUFやSO_SNDBUFはデフォルトの値となりますが、TCP_NODELAYが無効となるため、smbtortureとHDBENCHともにスループットが下がりました。

 テストの結果から今回の環境では、smb.confは特に問題が無いかぎりは、socket optionsパラメーターは設定せず、デフォルトの状態(TCP_NODELAYのみ)にしておくのが良いようです。

 ケース(1)と(2)では、値に8192を指定した(1)の方が大幅に劣化していたため、Wiresharkで詳細に調査してみました。すると、SO_SNDBUF=8440以下ではパケットに「TCP Window Full」が大量発生し、linux kernel内部では10倍以上の頻度でmwait_idleやprepare_to_waitが呼ばれていました。

 この現象はCentOS 5.2に依存しており、ほかのOSでは発生しないものと思われますが、このパラメーターを利用する場合は実環境でテストを行ってください。

 次回はファイルサーバーとして利用する場合に重要なファイル属性、ユーザー属性関連のパラメーターについて解説します。

この記事をシェアしてください

人気記事トップ10

人気記事ランキングをもっと見る