web-dev-qa-db-ja.com

2つのホスト間で巨大なファイルを転送する際のボトルネックを見つける方法

2つのホスト間で巨大なファイル(50 GB以上)を転送する必要が頻繁にあり、転送速度がネットワークの予想スループットに到達することはありません。ボトルネックになる可能性のあるいくつかのポイントがありますが、それらの理論上の上限のそれぞれは、実際の転送速度を超えてwayです。典型的な設定は次のとおりです。

ラップトップ-> 802.11n-> AP-> CAT 6ケーブル-> 10/100 Mbitsルーター->デスクトップ

これに関連して、ボトルネックは明らかにルーターであり、転送速度が100メガビット/秒に制限されます。それでも、転送速度(scpを使用)が9.5 MB /秒を超えることはめったにありません。これは、76 Mビット/秒、つまり理論上の最大制限の76%にすぎません。

アクセスポイントで実際に24%のオーバーヘッドが発生する可能性がありますか、それとも速度を制限する何か他のものがありますか?ディスクI/O(SATAは1.5 Gbpsと評価されています)、またはディスクとNICの間のマザーボード上の何か(それをどのように測定できますか?))の可能性があります。

ボトルネックがどこにあるのかを確実に知る方法はありますか? 100 Mbpsルーターから76 Mbpsを超えて取得できない場合、ネットワークをギガビットにアップグレードするとスループットが向上しますか、それともボトルネックが他の場所にあるために76 Mbpsを取得できますか?

(*)または少なくとも、ボスがネットワークの一部をアップグレードするために投資することに同意するのに十分説得力のある方法で

8
Fred

あなたの問題は、一度に多くのことをテストしていることです:

  • ディスク読み取り速度
  • SSH暗号化
  • 無線
  • SSH復号化
  • ディスク書き込み速度

SSHについて説明したので、これはUNIXシステムであると想定します...

簡単な方法で、ディスクの読み取り速度に関する問題を排除できます。

dd if=yourfile of=/dev/null #or
pv yourfile > /dev/null

受信側で簡単なディスク書き込みテストを行うことができます

dd if=/dev/zero of=testfile bs=1M count=2000 # or
dd if=/dev/zero bs=1M count=2000 | pv > testfile

ddは実際には「ベンチマーク」ではありませんが、scpはシーケンシャルIOを使用するため、十分に近いです

次のようなことでSSHをテストすることもできます

dd if=/dev/zero bs=1M count=100 | ssh server dd of=/dev/null # or
dd if=/dev/zero bs=1M count=100 | pv | ssh server dd of=/dev/null

最後に、SSHがボトルネックであることを除外するには、ncを使用してネットワークパフォーマンスをテストします。

server$ nc -l 1234 > /dev/null
client$ dd if=/dev/zero bs=1M count=100 | pv | nc server 1234 # or
client$ dd if=/dev/zero bs=1M count=100 | nc server 1234

本当にネットワークを適切にテストしたい場合は、iperfのようなものをインストールして使用しますが、ncは良いスタートです。

それはほとんどのものを除外するので、私はncテストから始めます。また、ワイヤレスを使用していない間は必ずテストを実行する必要があります。 802.11nは100メガビットのポートを簡単に最大化できますが、適切に設定されている場合のみです。

(Ubuntu> = 12.04のデフォルトはnetcat-openbsdです。nc -l -p 1234 > /dev/nullは、netcat-traditionalを使用している場合に必要な機能です。

12
Justin

このように考えてください。

遅い(ラップトップディスクは遅い)SATAディスクが1つのファイルシステムまたは別のファイルシステムを実行しており、SATAディスクはSMBなどのIPベースのファイル共有プロトコルになります。次に、これはwifi形式に変換され、APに到達します。次に、APが有線イーサネットを経由して(再設定が必要です)、かなり低速なスイッチに到達します。ルーターから、おそらくかなり低速のデスクトップに、ファイルが壊れます。選択したシステムフォーマット、そして最後にディスクに。これはすべてのパケットで発生しますが、すべてではないにしても、ほとんどの場合、次のパケットを送信する前に確認応答パケットを送り返す必要があります。

あなたがあなたと同じくらいのスピードを目にしていることに驚いています!

ここに手がかりがあります。ファイルを転送する必要がある場合は、ラップトップを100Mbpsスイッチ/ルーターに配線してください-真剣に、それははるかに速くなります。また、両端でより高速なディスクを検討し、効率的なファイル転送メカニズムも使用していることを確認してください。

お役に立てれば。

2
Chopper3

Chopper3がほのめかしているように、そのサイズのファイルにはrsync-over-sshを使用してみてください。問題が発生する可能性が十分にあるためです。 50GBの転送で45GBを取得し、それを失敗させる以上の方法はありません。オーバーヘッドを減らすこともできますが、これほど大きなファイルサイズで個人的にテストしたことはありません。

何千もの小さなファイルを転送すると、rsyncによってオーバーヘッドが大幅に減少します-私が実行した75Kファイル/ 1500 dir/5.6K平均ファイルサイズテストは、FTPとSFTPで12分、SCPで10分かかりましたが、rsync-over-sshで1分50秒しかかかりませんでしたセットアップ/ティアダウンのオーバーヘッドが減少したため。 SSHなしのRsyncは、1分33秒でわずか20秒高速でした。

1
user15590

このコマンドを使用して、ディスクの読み取り速度を測定できます。

hdparm -tT /dev/sdX

(Xをドライブ文字に置き換えます)

1.5/3/6gbpsは技術的にはSATAの転送速度ですが、ほとんどのディスクは50〜60 Mbpsの連続読み取りしかできません。

1
Nick