ネットワーク経由のパイプラインのパフォーマンスを最適化する方法 (RSH および SSH)

ネットワーク経由のパイプラインのパフォーマンスを最適化する方法 (RSH および SSH)

次のような、リモート シェル (RSH) を備えたレガシー システムのパイプライン ネットワークを介したデータ転送について考えてみましょう。

rsh host -l user tar -cf - /home/dir \| compress | uncompress | tar -xvf -

そしてこれは「現代的な」システムです:

ssh user@host tar -cf - /home/dir \| gzip | ungzip | tar -xvf -

パフォーマンスの問題:

RSH を使用して AIX 4.3 から AIX 5.3 への転送を実行したところ、パフォーマンスが非常に悪くなりました。アイドル スイッチを介してアイドル カード (10/100) を接続した場合でも、5.4 GB を転送すると約 350Kbps のパフォーマンスしか得られませんでした。

AIX 5.3 と Linux 間でこの転送を実行する場合、SSH と gzip を使用すると、パフォーマンスは大幅に向上しますが、ネットワーク容量には到達しません (1 ギガビット LAN では平均約 400Mbps でした)。

パイプ バッファーやネットワーク ブロック/バッファーなどをカスタマイズするなど、ネットワーク パイプラインのパフォーマンスを最適化する方法はありますか?

答え1

少なくとも ssh 部分では、帯域幅の制限ではなく CPU の制限が発生していると思います。

サーバーの暗号化/復号化が制限要因であるため、アイドル状態の 2 台のサーバー間で scp (ssh cp) を使用すると、約 45 ~ 50 MB/秒の速度が得られます。gzip / ungzip を追加すると、使用可能なコアの数に応じて速度がさらに低下する可能性があります。

圧縮も暗号化もされていない転送のほうが数値は良くなります。圧縮コマンドなしで試してみて、どうなるか見てみましょう。

答え2

圧縮やディスク I/O を排除するために、基本的な速度テストはすでに実行しましたか?

これは非常に簡単に実行できます。影響を受けるホストの 1 つから別のホストに ftp 経由で接続し、
put "|dd if=/dev/zero bs=1M count=1000″ /dev/null
一方のホストで /dev/zero から 1GB を読み取り、もう一方のホストで /dev/null に書き込むことで、純粋なネットワーク帯域幅をテストします。詳細については、たとえば次のサイトで説明されています。
AIXChange ブログ: ネットワーク パフォーマンスを測定する 2 つの方法

scp 経由の転送の場合、-o Cipher=arcfour ...scp のオプションとして、要求の少ないストリーム暗号 (RC4) を使用して暗号化を軽減することができます。

参照関連する質問圧縮を有効にするにはを使用することをお勧めします-Cが、私の理解では、あなたのケースでは CPU パフォーマンスが制限要因であり、ネットワーク帯域幅ではないため、圧縮すると状況が悪化する可能性があります。

関連情報