测试1(dl1->node1(dl1发数据到node1):
[david@dl1 ~]$ dd if=/dev/zero bs=1MB count=1000 | nc node1 5001
#从/dev/zero中读1MB的数据向node1发送
1000+0 records in
1000+0 records out
1000000000 bytes (1.0 GB) copied, 8.53014 s, 117 MB/s
[david@node1 ~]$ nc -l 5001 > /dev/null
结论:带宽为117MB/s, 千兆网带宽差不多就是这个带宽。
测试2(本机测试):
[david@dl1 ~]$ dd if=/dev/zero bs=1MB count=10000 | nc localhost 5001
10000+0 records in
10000+0 records out
10000000000 bytes (10 GB) copied, 8.46051 s, 1.2 GB/s
[david@dl1 ~]$ nc -l 5001 > /dev/null
结论:本机上为1.2GB/s,实际上带宽会超过此,后面会解释。
测试3(从磁盘上读,测试2是从/dev/zero上读):
通过nc发送到本机(caffe_ 为5.7G)
[root@dl1 ~]# time nc localhost 5001 < caffe-openmpi-1.tar
real 0m29.186s
user 0m2.771s
sys 0m8.132s
[root@dl1 ~]# nc -l 5001 > /dev/null
用了30s,可以算出带宽,这个不是网络性能,是磁盘性能190MB/s,因为可以再试下,如下测试4.
测试4(再运行下测试3):
[root@dl1 ~]# time nc localhost 5001 < caffempi-openmpi-1.tar
real 0m5.138s
user 0m1.413s
sys 0m3.730s
这是由于数据已经缓存在内存当中了,所以快多了。
总结:
1. dd 1.2GB/S
2. 磁盘读 190MB/S
3. 数据已经缓存到内存里了,带宽1.14GB/S
总结一句就是,测试方法很重要,都是从内存中读,dd本身也占了资源。
测试5(使用pv查看带宽):
接收端:
[david@dl1 ~]$ nc -l 5001 | pv -W > /dev/null
9.31GiB 0:00:08 [1.07GiB/s] [ <=>
可以观察到带宽基本上为1.07GiB/s,
(原本解释:
启了4个进程,两个核的话,4个进程去争用2个核心的化,可以把top打开看,占用CPU的情况。)
当然我这个机器性能比较强悍,就不会出现括号里的现象了。
测试6(把数据发送到一台更慢的机器上):
waiting...
也是更够达到118MB/S,说明TCP协议栈的开销不大,即便是比较慢的机器,也能占完千兆带宽。
所以第二个测试的580M不只有TCP,如果只有TCP的话,应该是580M*3;
因为还有很多进程,数据需要从内核->用户态,用户态->内核,转移,
可以看出,有6次进出(客户端+服务端)。