第二步:发包程序性能测试:
发包客户端程序运行的主机与服务端程序运行主机通过百兆交叉网线直连:
注意:本文里虽然主机在不同测试中其IP对应的网络段可能不同,但其IP最后一位数字均相同,因而会使用46、56等数字表示机器。
下图是该测试程序在无丢包状态下,稳定运行半小时的收发64字节以太网帧(UDP长度18字节)包速率,大概在80000包/秒:
这一步测试说明了udp发包程序可以保证80000包/秒。
单纯路由性能测试:
测试单纯路由性能的原因是与VPN性能做对比,因为原理上OpenVPN相对于单纯的Linux kernel包转发只是多了一个虚拟网卡,多了两次内核/应用层数据拷贝,网络拓扑如下:
在66、68两台主机上打开ip_forwading充当路由器,并在四台主机上适当配置路由策略,保证7网段与8网段经6网段互通。
这次测试相当于将上面发包程序测试中的直连网线换成通过路由器连接。
下图是该测试在无丢包状态下,稳定运行半小时的收发64字节以太网帧包速率:
该图显示,通过路由设备后64字节以太网帧的速度只能达到47000左右,比测试程序直连模式下低了40%左右,这种情况表明路由的某种资源已经成为瓶颈从而导致发包程序无法达到全速(80000/s),这是受何种资源所限呢?对路由主机进行分析后,我认为是CPU达到了满载,见下图:
该图是充当路由器的66主机上CPU的使用率,其中最后一条垂直红线之后部分对应本次测试,即CPU在90%以上这段连续红线。在整个测试中,充当router的主机CPU使用率总是不能达到100%,这个我有一些其他推测,但这里,我认为CPU是瓶颈。也就是说,这台主机做路由时最多只能每秒转发47000个包。
说明一下我推测的CPU不能100%运行的原因:我认为CPU不能达到100%可能是因为网卡和PCI总线之间、内存与内存之间的传输方式引起的,一般来说这种传输采用DMA方式,在传输的这段时间里CPU因为总线被占用,也没有其他工作,因此总是看起来不能到100%。X86的结构比较复杂,这个推测仅供讨论参考。