Chapter 45. Sambaパフォーマンスチューニング

Paul Cochrane

Dundee Limb Fitting Centre

Jelmer R. Vernooij

The Samba Team

John H. Terpstra

Samba Team

Table of Contents

比較
ソケットオプション
読み取りサイズ
Max Xmit
ログレベル
Read Raw
Write Raw
ログインが遅い
クライアントのチューニング
Linuxカーネルを変更した事によるSambaパフォーマンス問題
壊れたtdbファイル
Sambaのパフォーマンスがとても悪い

比較

SamvaサーバーはクライアントとTCP通信を使用しているため、パフォーマンスを上げるには 同じプロトコルを使用しているプログラムと比べてみるべきである。最も簡単に入手できる TCPを使用したファイル転送プログラムは、FTPもしくは他のTCPベースのSMBサーバーである。

もしNTやWindows Workgroups serverに対して実験してみたいなら、クライアントかサーバーの TCP以外は無効にする必要がある。 そうしないとNetBEUIのようなまったく違うプロトコルが使われ、比較は意味がない。

通常、SambaプラットフォームがFTPと同じぐらいの理論上の転送速度で動作することが解る だろう。速度はそのシステムの環境次第だが、NFSよりかは相当早い。

何人かは、SambaとNovell、NFS又はWindows NTとの間での比較を行った。そのうちの いくつかの場合は、Sambaの動作は一番よく、ほかの場合は一番悪かった。最も 大きな要素は、Samba対他のシステムではなく、種々のシステムで使用しているハードウェアと ドライバーであると推測している。同じようなハードウェアで、Sambahaは他のシステムと、 速度の点において競合できうる。

ソケットオプション

いくつかのオプションは、SambaのようなTCPベースのサーバーのパフォーマンスに 大きな影響を与える。

Sambaが使うソケットオプションは、-Oをコマンド行に指定するか、 smb.conf ファイルに記述できる。

smb.conf のマニュアルページのsocket optionsに、 どのように記述するか、推奨は何かがが書いてある。

ソケットオプションを正しく設定すれば大きくパフォーマンスを改善できるが、 間違って設定すると同じくらいパフォーマンスが悪くなる。正しい設定は、 使用するネットワークにとても依存する。

TCP_NODELAYは多くのネットワークにおいて、単独で大きな違いを引き起こす。 多くの人々がsocket options = TCP_NODELAYを 追加することで、Sambaのreadパフォーマンスを2倍にしたと報告している。 MicrosoftのTCP/IPスタックがTCP ACKを送るのが遅いためだというのが一番良い説明だろう。

socket options = SO_RCVBUF=8192 をsmb.confの中に書き込む ことで、Sambaのループバックアダプター(IP Address 127.0.0.1)のパフォーマンスが ひどく下がるという報告がある。socket optionsを設定する前に、 サーバー上で定量的に計測することを強く推奨する。

読み取りサイズ

read sizeオプションは、ディスクのR/WとネットワークのR/Wの 同時動作に影響する。 いくつかのSMBコマンド(currently SMBwrite, SMBwriteXとSMBreadbraw)で転送されている データ量がこの値より大きかったとき、サーバーはネットワークからそのパケットを受け取る前に データを書き込む。もしくは、SMBreadrawコマンドの場合、全てのデータをディスクから 読む前にネットワークに書き込む。

この並列動作は、ディスクアクセスとネットワークアクセスがほぼ同じ速度の場合に 最も効果があり、どちらか片方がとても早い場合にはあまり効果がない。

既定値は16384である。最適値を決めるために多少試験してみたが、最適値はシステム間で非常に 大きく違うようである。65536以上の値には意味が無く、不必要にメモリを割り当ててしまう。

Max Xmit

起動時にクライアントとサーバーとの間で、ほぼすべてのコマンドサイズを制限する、 maximum transmit値の調停を行う。 sambaが調停する最大値をsmb.confmax xmit オプションを使うことで設定できる。 これはSambaが受け取るSMBリクエストの最大値であり、クライアントが受け取る 最大値ではない。クライアントのmaximum受信サイズはクライアントからSambaに 送られ、Sambaはその値を信頼する。

既定値では65536バイトに設定されているが、より小さい値の方がよいという場合もありうる。 2048より小さい値にすると、重大な問題を引き起こす可能性がある。殆どの場合、 既定値が最適である。

ログレベル

debug levelとして設定できるログレベルを2より大きくすると、 大幅にパフォーマンスが低下する。 これはサーバーが各操作後ににログをフラッシュし、それがとても時間がかかるためである。

Read Raw

read raw操作は、最適化された、レイテンシの小さい、 ファイル読み取り操作の為に設計されている。サーバーはそれをサポートしなくてもよいが、 Sambaはread rawサポートをオプションとしていて、 規定値では有効になっている。

ある場合、クライアントはread rawをうまく扱えず、 従来の読み取り操作を使うよりも、それを使うことで実際にはパフォーマンスが落ちる こととなり、そのため、read raw = noを 試して、ネットワーク上で何が起きるかを観察しても良い。それはパフォーマンスを 下げるか上げるか、あるいは何も起きないかもしれない。テストすることで真実が わかる。

Write Raw

write raw操作は、最適化された、レイテンシの小さい、 ファイル読み取り操作の為に設計されている。サーバーはそれをサポートしなくてもよいが、 Sambaはread rawサポートをオプションとしていて、 規定値では有効になっている。

多くの場合、write rawをパラメーターを変更しようとした場合、 変更すると通常よりも速度が遅くなる。

ログインが遅い

ログインが遅い場合は、多くの場合パスワードチェックのためである。 最も小さい実用的なpassword levelは、これを改善する。

クライアントのチューニング

大抵の場合、スピードの問題はクライアントに原因がある。(Windows for Workgroupsのような) クライアントはたいていの場合、TCPパフォーマンスをより改善できる。 Sambaとその他のCIFSクライアント中の、 各種クライアントについての節をチェックすること。

Linuxカーネルを変更した事によるSambaパフォーマンス問題

あるユーザーがメーリングリストに次のように発言した。

私はGentooの上でSamba 2.2.8aを動かしています。 最近私はカーネルのバージョンをlinux-2.4.19-gentoo-r10から linux-2.4.20-wolk4.0sに変更しました。すると、Sambaの パフォーマンスに問題が生じました。多くの人々はおそらく 普通のソース(kernel)に移行しろ!」と言うでしょう。 もちろん私は試しましたが、上手くいきませんでした。 私は100MBのLANと2台のコンピューター(LinuxとWindows2000)を使っています。 LinuxサーバーでDivxファイルの入ったフォルダーを共有し、クライアント(Windows2000)で LAN経由で再生していました。2.4.19カーネルにする前は全てが上手く動いていましたが、 現在では動画は固まって止まってしまいます。サーバーからWindowsへファイルを移動させようと しましたが、それもとても遅いです。

それに対してこのような返答があった。

mii-toolを持ってきて、NIC上の全二重の設定をチェックするとよいでしょう。 私はこれはデータリンク層の問題で、アプリケーション層の問題ではないと思います。 また、ifconfigを動かし、そのフレーミングエラー、コリジョン、その他を調べ、 ethenetが問題ないのかを見ましょう。

壊れたtdbファイル

我々のSambaPDCサーバーは、3年間の間問題なく500以上のユーザー[Windows NT/XP]で3TBのデータを ホスティングしていました。現在ではすべての共有がとても遅いです。親プロセスのsmbdは 継続してプロセスを起動していて、(通常なら平均で250なのに)1600以上のSMDBプロセスが 起動しています。これによってSUN E3500が2回壊れています。 幾たびもの調査の後、rm /var/locks/*.tdbを実行することにしました。 その結果、再び良好に動作しました。

質問:*.tdbファイルを最良の状態に保持する何らかの方法はあるので しょうか?あるいは、どのようにしたら、素早く破壊状態を検出できるのでしょうか?

答え: はい、nmdbの停止と起動のたびにtdbbackupを 実行してください。

質問:さらに言及したいこととして、サービスのレイテンシは削除前より かなり遅くなったように見えます。最高速度を保持する良いアイデアはありませんか?

答え:はい、同じ質問が前にありました。

Sambaのパフォーマンスがとても悪い

MYOB Premier操作とそのデータファイルへのアクセスにおいて、とても不可解な徴候を 経験したと、あるサイトは報告した。そのファイルへのいくつかの操作で40秒から45秒の 時間がかかった。

Windowsクライアント上でプリンターモニタープログラムを走らせたところ、この問題が発生した。 ログから、1秒ごとに休止状態が発生していることが分かりました。

モニターソフトウエアを止めたところ、ネットワーク速度が普通(早い状態に)戻りました。 再びモニターソフトウエアを起動させたところ、再び遅くなりました。 プリンターはCanon LBP-810で and the relevant task wassomething like CAPON (not sure on spelling). モニターソフトウエアは、クライアントが印刷中、"印刷中"を表示している。

Windowsのクリーンインストールと、他のソフトを何度も段階的にインストールすることによって、 発見した。

この話の教訓:すべてをチェックしなさい(他のソフトウェアも含めて)!