注意到1.3.2 中三次测量结果:
- 1:从内存中读取数据,580MB/s
- 2:
从磁盘中读取数据,115.720MB/s(磁盘性测量结果) - 3:从内存中读取数据,1074.876MB/s
可以看到,1 与 3 的测试结果差异很大。原因是 1 在测试时使用 dd 命令也有一定的资源消耗,下面我们测试 dd
atom发送端:使用 dd + nc 测试
atom接收端:使用 nc + pv 测试
可以看到此次测试结果约为 455MB/s , 弱于1.3.2第 3 次测试的1074.876MB/s。
原因分析:该atom机器为双核,在本次测试中可视为启动了四个进程,他们之间会有一定的争用。而在1.3.2第 3 次测试中使用了 time + nc 两个进程,他们刚好充分的利用了CPU,因此测试结果较优。
如果此时我们使用 top 命令可以看到他们占用CPU的情况。
扩展:命令学习
pv命令是Pipe Viewer 的简称。
由Andrew Wood 开发。意思是通过管道显示数据处理进度的信息。
这些信息包括已经耗费的时间,完成的百分比(通过进度条显示),当前的速度,全部传输的数据,以及估计剩余的时间。
参数:
-W 在传输第一个字节之前不显示任何内容
top 命令 Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况
1.3.4 Netcat测试结果分析
在 atom 上使用 dd 命令工具测试的结果实际上并不只是 tcp 上的开销,在发送端,包含有从内核 /dev/zero
拷贝到用户态 dd , 由 dd 拷贝到内核管道中,通过管道拷贝到 nc 中, 通过 nc 将数据发送给 tcp ;在接收端, 从tcp 接收数据到 nc 中, 在由 nc 拷贝到 dev/null
。
因此,我们看到 580MB/s 并不是真的测出的 tcp 的传输速率。
而在 atom 上,直接从文件读的方式,测得的结果相比上一次少了 dev/zero -> dd -> pipe 这一步,它不从pipe读而直接从file读。
由此,我们发现影响网络传输速率的不只由网络环境决定,也与程自身所占资源利用率有关(比如CPU占用率等)。