容器间UDP通信性能优化效果测试
1. 测试简介
目前,docker容器技术在越来越多的领域使用,其承载的业务也越来越多,尤其是网络相关的业务。容器通常对外提供网络服务端口,因此容器间的网络通信也越来越多。在通常的容器网络方案中,两个容器间的网络通信底层通常使用VETH、MACVLAN、SRIOV等方式,使用这些方式,同一主机间两个容器每一个通信报文,都需要到内核的UDP层、IP层、MAC层、网桥或外部交换层走一圈,效率较低。针对这个问题,我司对内核协议栈进行了优化改造,为同一主机上的容器间的UDP报文提供FASTPATH路径,极大提升容器间UDP通信性能。为了验证容器间UDP通信优化后的效果,进行了本文中的测试。
2. 硬件平台
SOC:全志T3,ARM A7 4核
3. 容器间UDP通信延时测试
udp通信延时使用lmbench中的lat_udp工具来测试,具体测试方法如下:
01
关闭优化功能的情况下:(1)启动两个容器A与B,使用veth的网络方式。其中容器A ip地址为172.17.0.2,容器B ip地址为172.17.0.3;
(2)容器A中执行lat_udp -s,表示启动服务端程序;
(3)容器B中执行:lat_udp -m 256 -W 2000000 -N 6 172.17.0.2,表示与容器A进行udp通信测试。
(4)等待10s左右,打印出通信演示,如图所示:
可见不开启优化功能的情况下udp通信演示在115us左右。
02
开启优化功能的情况下:
(1)启动两个容器A与B,使用veth的网络方式。其中容器A ip地址为172.17.0.2,容器B ip地址为172.17.0.3;
(2)容器A中执行lat_udp -s,表示启动服务端程序; (3)容器B中执行:lat_udp -m 256 -W 2000000 -N 6 172.17.0.2,表示与容器A进行udp通信测试。
(4)等待10s左右,打印出通信演示,如图所示:
可见,优化功能将容器间的UDP延时由115us降低到了65us,降低比例高达40%.
4. 容器间UDP通信带宽测试
使用netperf工具来测试容器间UDP通信带宽。测试方法如下:
(1)启动两个容器A与B,使用veth的网络方式。其中容器A ip地址为172.17.0.2,容器B ip地址为172.17.0.3;
(2)容器A中执行netserver -N,表示启动服务端程序;
(3)容器B中执行:netperf -H 172.17.0.2 -t UDP_STREAM -- -m 64,表示与容器A进行udp通信带宽测试,其中-m 64 表示发送的包大小。
(4)等待10s左右,打印出通信演示.
不同包大小的测试数据如下所示:可见,在带宽上,容器间的UDP通信带宽优化后的性能比优化前的提升在130%-200%,效果相当明显。