なぜネットワーク伝送にそのような違いがあるのか​​理解していますか?

なぜネットワーク伝送にそのような違いがあるのか​​理解していますか?

要約:

ネットワーク転送の特別な違いは理解できません。

  • あるコンピュータから別のコンピュータへ、またはその逆の同期になぜそんなに大きな違いがありますか?

返品:

  • 最大ネットワーク転送速度が約110M /秒で、同様の操作のローカルディスク速度が約200M /秒の場合(したがってボトルネックはありません)、2つのシステム間のrsyncが理論的な100Mより速いのはなぜですか? /秘書?

詳細:

まず、サーバー

# uname -a                                                                                                                                                              
FreeBSD das 10.1-RELEASE-p8 FreeBSD 10.1-RELEASE-p8 #25 d0fb866(releng/10.1): Thu Nov     13 07:57:26 EST 2014     root@bellicose:/usr/obj/root/pcbsd-build-10-STABLE/git/freebsd/    sys/GENERIC  amd64

お客様は次のとおりです。

# uname -a
Darwin compute.internal 13.4.0 Darwin Kernel Version 13.4.0: Sun Aug 17 19:50:11 PDT 2014; root:xnu-2422.115.4~1/RELEASE_X86_64 x86_64

どちらのマシンにも16GBのRAMがあります。

サーバーでローカル rsync を実行すると、少なくともこの場合、予想されるディスク速度に関するアイデアを得ることができます。

FreeBSDサーバーでバイナリファイルtest.bin、732Mを使用すると、ローカルrsyncは約200M /秒で表示されます。

# rsync --stats -h test.bin copy.bin

[....]

sent 732.54M bytes  received 35 bytes  209.30M bytes/sec
total size is 732.36M  speedup is 1.00

これは約200M /秒です。

Mac miniクライアントは約70M /秒を記録します。

# rsync --progress --stats -h   test.bin copy.bin
test.bin
        732.36M 100%   70.06MB/s    0:00:09 (xfr#1, to-chk=0/1)

[....]

sent 732.54M bytes  received 35 bytes  69.77M bytes/sec
total size is 732.36M  speedup is 1.00

次に、次のコマンドを使用してネットワーク速度テストを実行しますiperf

サーバー(FreeBSDサーバー)から:

# iperf -f M -s
------------------------------------------------------------
Server listening on TCP port 5001
TCP window size: 0.06 MByte (default)
------------------------------------------------------------
[  4] local 192.168.1.5 port 5001 connected with 192.168.1.226 port 50757
[ ID] Interval       Transfer     Bandwidth
[  4]  0.0-30.0 sec  3356 MBytes   112 MBytes/sec

クライアント(OS X mac mini)から:

# iperf -f M -M 9000 -c 192.168.1.5 -t 30 -w 80K
WARNING: attempt to set TCP maxmimum segment size to 9000 failed.
Setting the MSS may not be implemented on this OS.
------------------------------------------------------------
Client connecting to 192.168.1.5, TCP port 5001
TCP window size: 0.08 MByte (WARNING: requested 0.08 MByte)
------------------------------------------------------------
[  4] local 192.168.1.226 port 50757 connected with 192.168.1.5 port 5001
[ ID] Interval       Transfer     Bandwidth
[  4]  0.0-30.0 sec  3356 MBytes   112 MBytes/sec

したがって、ネットワーク接続(2つのネットワークカード間の直線Cat 7ケーブル)は約110M /秒であると仮定できます。

今、混乱した状況は次のとおりです。

FreeBSDサーバーからMac Miniに再同期すると、約50M /秒の転送速度が得られます。

# rsync --progress --stats -h test.bin -e "ssh -l gsl" '192.168.1.226:/tmp/'
Password:
test.bin
        732.36M 100%   57.10MB/s    0:00:12 (xfr#1, to-chk=0/1)

[....]

sent 732.45M bytes  received 46 bytes  50.51M bytes/sec
total size is 732.36M  speedup is 1.00

ただし、反対方向の rsync は、20M/sec というはるかに低い伝送速度を提供します。

# rsync --progress --stats -h   test.bin -e "ssh -l gsl" '192.168.1.6:/tmp/'
test.bin
        732.36M 100%   19.55MB/s    0:00:35 (xfr#1, to-chk=0/1)

[....]

sent 732.54M bytes  received 35 bytes  20.07M bytes/sec
total size is 732.36M  speedup is 1.00

私の2つの質問:

  • あるコンピュータから別のコンピュータへ、またはその逆の同期になぜそんなに大きな違いがありますか?

返品:

  • 最大ネットワーク転送速度が約110M /秒で、同様の操作のローカルディスク速度が約200M /秒の場合(したがってボトルネックはありません)、2つのシステム間のrsyncが理論的な100Mより速いのはなぜですか? /秘書?

誰かがこれを理解するのを助け、転送速度を上げる方法についてのアドバイスを提供できますか?


netcat更新:@dhagの答えに基づいて圧縮を使用せずにファイルをコピーしようとしました。

「サーバー」(プッシュ)側:

time cat test.bin | nc -l 2020
nc -l 2020  0.25s user 6.29s system 77% cpu 8.462 total

受信側(FreeBSD):

time nc 192.168.1.226 2020 > test.bin
nc 192.168.1.226 2020 > test.bin  0.09s user 4.00s system 62% cpu 6.560 total

私の記憶が正確であれば、これは732M / 6.29s = 117M / secを意味し、これはiperf統計を超える数値です。たぶんキャッシュの問題ですか?


アップデート2:暗号化なしでrsyncを使用する(daemonおよびrsync://プロトコルを使用している場合にのみ利用可能)

# rsync  --progress --stats -h  test.bin rsync://[email protected]/share        ⏎
test.bin
     732.36M 100%  112.23MB/s    0:00:06 (xfer#1, to-check=0/1)

[....]

sent 732.45M bytes  received 38 bytes  112.69M bytes/sec
total size is 732.36M  speedup is 1.00

これも@dhagのアイデアを確認します。

ベストアンサー1

2つのホストの異なるコンピューティング、メモリ、キャッシュ、またはディスクの特性により、違いが説明されていると推測できます。

  • CPUがボトルネックを引き起こしていると仮定すると、遅いシステムがより遅く転送するのが合理的です(これは暗号化が復号化よりも計算集約的であると仮定します)。これは、計算が簡単なパスワードに切り替えてテストできます(-c arcfourSSHコマンドラインに追加してみてください。この場合は渡します--rsh="ssh -c arcfour"rsync

  • ファイルをディスクからディスクに直接読み書きすると仮定すると、ディスクがボトルネックを引き起こす可能性があります。最新のコンピュータでは100MBpsの読み取り速度を完全に達成できますが、古いコンピュータやラップトップクラスのドライブではそうではありません。コンピュータではそうではありません。 (例えばMac Miniだと思います)で実行されます。

  • オペレーティングシステムがファイルシステムキャッシュを使用していると仮定すると、状況はさらに複雑になる可能性があります。

    • ソースファイルがRAMのファイルシステムキャッシュに含まれている場合、読み取り速度は100MBpsよりはるかに高速になる可能性があります。

    • ターゲットシステムが書き込みキャッシュを適用してファイルのかなりの部分をRAMに入れることができる場合(RAMがテストファイルよりはるかに大きいため、必ずそうする必要があります)、書き込みが完了する前に完了すると主張できます。実際に到達したディスクを実行します(おそらく200MBpsを測定したことを意味します)。

ディスクとキャッシュ未知のエントリは、読み込み前にファイルシステムキャッシュをフラッシュしてテストできます(これを行う方法はOSによって異なります)。その後、ファイル転送速度は、少なくともディスクが示す速度と同じくらい遅くなります。代わりに、ファイルcat file.bin >/dev/nullを送信する前にファイルを完全に読み取る(おそらく。

topCPUの問題があるかどうかをさらに調査するには、転送中に実行することをお勧めします。rsyncORsshプロセスがコアの100%を占めると、ボトルネックが発生します。

おすすめ記事