好的,我尝试为两台彼此“靠近”的“非常大的管道”(10Gbe)的计算机回答这个问题。
您在这里遇到的问题是:由于管道太大,因此大多数压缩都会使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上的两个盒子,稍旧版本的netcat(CentOs 6.7),10GB文件:
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较少,在另一个实例中,netcat的使用较少,因此YMMV。
使用netcat,如果它没有“ -N -q 0”选项,则可以传输被截断的文件,请注意...其他选项,例如“ -w 10”,也可能导致被截断的文件。
在几乎所有这些情况下,正在发生的事情是CPU利用率最高,而不是网络利用率最高。 scp
最大速度约为230 MB / s,将一个内核固定在100%的利用率下。
不幸的是,Iperf3创建损坏的文件。某些版本的netcat似乎无法传输整个文件,这很奇怪。特别是它的旧版本。
“ gzip作为通往netcat的管道”或“ 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
使用较慢的连接,压缩绝对可以帮助您。如果管道很大,那么非常快的压缩可能会帮助您轻松压缩数据,而没有尝试过。
“同步硬盘驱动器”的标准答案是使文件同步,从而避免可能的传输。
另一个选择:使用“ parallel scp”(以某种方式或其他方式),那么它将使用更多的内核...