TCP带宽测试试验

测试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次进出(客户端+服务端)。
TCP带宽测试试验_第1张图片

你可能感兴趣的:(网络编程实践)