Sambaサーバーから大きなファイルを読み取るたびに、約40MB /秒の転送速度が得られます。まったく同じファイルをもう一度読むと、速度は突然70MB /秒に跳ね上がります。
初めて70MB /秒を取得できないのはなぜですか?ディスクは最大95MB /秒で簡単に実行できます。 Sambaは、パフォーマンスなどを得るためにファイル全体をRAMにキャッシュする必要がありますか?
サーバーにファイルを書き込むとき、毎回95MB /秒以上を取得します。かなりの違いがあります。
いくつかのソケットオプション(TCP_NODELAY IPTOS_LOWDELAY SO_SNDBUF = 65535 SO_RCVBUF = 65535)を設定しようとしましたが、あまり役に立たないようです。
では、Sambaで読み取りパフォーマンスを向上させる方法に関するヒントはありますか?
注:ディスクはソフトウェアRAID1で構成された2x1TBSamsung Spinpoint F1 7200RPMです。
更新:クライアントは、サーバーと同じくらい、この問題に関係しているようです。私は信頼できる古いTotalCommanderを使用していましたが、最近は古すぎるようです。代わりにWindowsエクスプローラーを使用してファイルをコピーすると、キャッシュされていないファイルでもかなり高速に読み取られます。ご協力いただきありがとうございます。
今までのところ、すべての答えはRAID構成よりもディスクに関連しています。このガイドの質問19と4が役立つかもしれません: Software RAID HOWTO 。
もう一つはネットワーク側です。 NICで [〜#〜] toe [〜#〜] が有効になっていますか?
そして最後に、ボトルネックがクライアント側にないことを確認しましたか? FTPクライアントがRAMにCIFSサービスよりも多くのデータを保持している可能性があります。これが、FTPが高速である理由の1つである可能性があります。
まず、これらのTCPソケットオプションは2.4カーネル用であり、Sambaメーリングリストでは、開発者は2.6カーネルでは意味がないと繰り返し言っています。
それを超えて、ここであなたの番号に何かが正しくありません。 RAID1(ミラー)構成の2台のSATAドライブが95MB/sの書き込み速度を提供する方法はありません。また、読み取り速度もこれほど高速になるとは思えません。ドライブの非常に外側のトラックを除いて。 RAIDボリュームをどのようにベンチマークしていますか? ddはファイルシステムのベンチマークではないことに注意してください。
NICがコンシューマーグレードの場合、ギガビット速度もCPUサイクルを大幅に消費する可能性があります。したがって、システムのCPUが遅い場合は、CPUをボトルネックとして除外しないでください。
また、ここでのサーバーとクライアントのディスクとCPUはどちらも、達成しようとしている速度を維持できる必要があるため、サーバーをボトルネックの原因として見ないでください。クライアント側にある可能性が高いです。
1.先読みを増やしてみてください
# /sbin/blockdev --getra /dev/sdb
256
# /sbin/blockdev --setra 16384 /dev/sdb
2. IOスケジューラーを変更して、ワークロードで最高のパフォーマンスを発揮するスケジューラーを見つけてください
# cat /sys/block/hda/queue/scheduler
noop [anticipatory] deadline cfq
echo deadline > /sys/block/hda/queue/scheduler
Linuxディスクキャッシングは、関連する可能性のあるH/Wディスクキャッシングは言うまでもなく、2回目の読み取りが高速である理由です。
読み取りパフォーマンスを向上させるには:ディスクストライピングを使用し、RAMを増やし、ディスクへの次のレベルのハードウェアインターフェイスに移動し(SATAをSASまたはFC4)に置き換え)、より高速なディスクを使用します(10Kではなく15KRPM) )、RAIDキャッシュにRAMを追加します。
70MB/sを改善するにはコストがかかりますが、最初の読み取り速度をいくらか改善できるはずです。