
要約:
ネットワーク転送の特別な違いは理解できません。
- あるコンピュータから別のコンピュータへ、またはその逆の同期になぜそんなに大きな違いがありますか?
返品:
- 最大ネットワーク転送速度が約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 arcfour
SSHコマンドラインに追加してみてください。この場合は渡します--rsh="ssh -c arcfour"
)rsync
。ファイルをディスクからディスクに直接読み書きすると仮定すると、ディスクがボトルネックを引き起こす可能性があります。最新のコンピュータでは100MBpsの読み取り速度を完全に達成できますが、古いコンピュータやラップトップクラスのドライブではそうではありません。コンピュータではそうではありません。 (例えばMac Miniだと思います)で実行されます。
オペレーティングシステムがファイルシステムキャッシュを使用していると仮定すると、状況はさらに複雑になる可能性があります。
ソースファイルがRAMのファイルシステムキャッシュに含まれている場合、読み取り速度は100MBpsよりはるかに高速になる可能性があります。
ターゲットシステムが書き込みキャッシュを適用してファイルのかなりの部分をRAMに入れることができる場合(RAMがテストファイルよりはるかに大きいため、必ずそうする必要があります)、書き込みが完了する前に完了すると主張できます。実際に到達したディスクを実行します(おそらく200MBpsを測定したことを意味します)。
ディスクとキャッシュ未知のエントリは、読み込み前にファイルシステムキャッシュをフラッシュしてテストできます(これを行う方法はOSによって異なります)。その後、ファイル転送速度は、少なくともディスクが示す速度と同じくらい遅くなります。代わりに、ファイルcat file.bin >/dev/null
を送信する前にファイルを完全に読み取る(おそらく。
top
CPUの問題があるかどうかをさらに調査するには、転送中に実行することをお勧めします。rsync
ORssh
プロセスがコアの100%を占めると、ボトルネックが発生します。