OK「非常に大きなパイプ」(10Gbe)があり、互いに「近い」2台のコンピューターでこの質問に答えようとしました。
ここで遭遇する問題は、パイプが非常に大きいため、ほとんどの圧縮がCPUでボトルネックになることです。
10GBファイルを転送するパフォーマンス(6 Gbネットワーク接続[linode]、非圧縮データ):
$ time bbcp 10G root@$dest_ip:/dev/null
0m16.5s
iperf:
server: $ iperf3 -s -F /dev/null
client:
$ time iperf3 -c $dest_ip -F 10G -t 20 # -t needs to be greater than time to transfer complete file
0m13.44s
(30% cpu)
netcat (1.187 openbsd):
server: $ nc -l 1234 > /dev/null
client: $ time nc $dest_ip 1234 -q 0 < 10G
0m13.311s
(58% cpu)
scp:
$ time /usr/local/bin/scp 10G root@$dest_ip:/dev/null
1m31.616s
scp with hpn ssh patch (scp -- hpn patch on client only, so not a good test possibly):
1m32.707s
socat:
server:
$ socat -u TCP-LISTEN:9876,reuseaddr OPEN:/dev/null,creat,trunc
client:
$ time socat -u FILE:10G TCP:$dest_ip:9876
0m15.989s
10 Gbeの2つのボックス、少し古いバージョンのnetcat(CentOs 6.7)、10 GBファイル:
nc: 0m18.706s (100% cpu, v1.84, no -q option
iperf3: 0m10.013s (100% cpu, but can go up to at least 20Gbe with 100% cpu so not sure it matters)
socat: 0m10.293s (88% cpu, possibly maxed out)
そのため、あるインスタンスではnetcatのCPU使用量が少なく、他のsocatではYMMVが使用されていました。
netcatでは、「-N -q 0」オプションがない場合、切り捨てられたファイルを転送できます。注意してください...「-w 10」などの他のオプションも切り捨てられたファイルになる可能性があります。
これらのケースのほとんどすべてで起こっているのは、ネットワークではなくCPUが最大限に使用されていることです。 scp
最大約230 MB / sで、100%の使用率で1つのコアをペギングします。
残念ながら、Iperf3は破損したファイルを作成します。netcatの一部のバージョンは、ファイル全体を転送しないようです。非常に奇妙です。特に古いバージョン。
「netcatへのパイプとしてのgzip」または「mbuffer」のさまざまな呪文も、gzipまたはmbufferを使用してCPUを最大限に使用するように思われたため、このような大きなパイプでは高速転送ができませんでした。lz4が役立つかもしれません。さらに、私が試みたgzipパイプの一部は、非常に大きな(4 GBを超える)ファイルの転送が破損するため、注意してください:)
特に待ち時間が長い場合(?)に機能する可能性がある別のことは、tcp設定を調整することです。推奨値を記載したガイドは次のとおりです。
http://pcbunn.cithep.caltech.edu/bbcp/using_bbcp.htmおよびhttps://fasterdata.es.net/host-tuning/linux/(別の回答から)おそらくIRQ設定:https : //fasterdata.es .net / host-tuning / 100g-tuning /
linodeからの提案、/ etc / sysctl.confに追加:
net.core.rmem_max = 268435456
net.core.wmem_max = 268435456
net.ipv4.tcp_rmem = 4096 87380 134217728
net.ipv4.tcp_wmem = 4096 65536 134217728
net.core.netdev_max_backlog = 250000
net.ipv4.tcp_no_metrics_save = 1
net.core.default_qdisc = fq
さらに、彼らはあなたに実行してほしい:
/sbin/ifconfig eth0 txqueuelen 10000
微調整後、変更によっても害が生じないことを確認するために再確認する価値があります。
また、ウィンドウサイズを調整する価値があるかもしれません:https : //iperf.fr/iperf-doc.php#tuningtcp
遅い接続では、圧縮が確実に役立ちます。大きなパイプがある場合、非常に高速な圧縮が容易に圧縮可能なデータに役立つ可能性があります。試してはいません。
「ハードドライブの同期」の標準的な答えは、ファイルをrsyncすることです。これにより、可能な限り転送が回避されます。
別のオプション: "パラレルscp"(なんとかして)を使用すると、より多くのコアが使用されます...