1 背景
在客户业务应用中,采用TCP协议的占据了绝大多数,这方面也有丰富的资料可以参考;但是在UDP协议方面,由于应用较少,相关的资料也很少.TCP的性能调优需要调整一系列参数,而决定UDP通信性能的因素于此截然不同.本文将通过实验给读者做验证.
2 测试说明
2.1 基本结论
这里先给出结论.经过多轮的测试和验证,并结合一些参考文献,目前明确与UDP发包效率相关度最大的几个因素分别为:
1)CPU主频高低(主频越高所能达到的带宽越高)
2)包的大小(9K的大包通信效率会更高)
3)是否绑核(绑核可以提高性能)
2.2 测试过程
问题起源是:客户选择了腾讯云CVM,规格型号为:S5.8XLARGE64.按照官网说明, 内网带宽能力(出 入)应该可以达到12Gbps.但是用UDP测试发现,到达5.9Gbps就开始大量丢包,需要腾讯云平台侧协助排查原因.经过排查发现,决定UDP性能的关键在于CPU主频高低,采用腾讯云计算型产品C6机型做了测试.
具体测试环境如下:
腾讯云C6机型采用:Intel® Xeon® Ice Lake处理器,主频3.2GHz
选用测试机型:C6.2XLARGE16
CPU&MEM:8核 16G
内网带宽能力(Gbps)(出 入):9
操作系统: CentOS stream
首先安装测试工具iperf3,安装命令为: yum install iperf3
安装后运行测试命令如下:
server端运行:
iperf3 -s
client端运行:
iperf3 -c 10.8.0.89 -l 8972 -t 300 -u -b0 -A 4
其中:
-c 10.8.0.89 表示连接去“10.8.0.89”(server服务器地址)
-l 8972 9000(大帧)-28(ipv4 数据包头)=8972
-t 300 测试时间300S
-u udp 数据
-b0 不限带宽
-A 4 绑定到cpu 4上(实际测试时要看哪个核空闲)
这样测试下来可以达到12 Gbps,但是有丢包,因为已经超规格了.
将client端测试参数限定带宽为9G后就没有丢包了,测试参数如下:
iperf3 -c 10.8.0.89 -l 8972 -t 300 -u -b 9G -A 4
将上述规格升级到C6.4XLARGE32
该规格的内网带宽能力(Gbps)(出 入):18
client运行测试
iperf3 -c 10.8.0.89 -l 8972 -t 300 -u -b0 -A 4
此时可以测试到带宽15.5Gbps,但是有少量丢包;如果将带宽限制到10G,则丢包非常少,基本达到稳定状态.
测试命令参考如下:
iperf3 -c 10.8.0.89 -l 8972 -t 300 -u -b 10G -A 4
所以C6机型的CPU处理能力达到10 Gbps应该是没有问题的.
2.3 应用程序优化
应用程序如何提高UDP性能:首先当然是尽可能选择CPU主频高的机型;其次在可能的情况下,应用程序尽量发大包,但是包的大小不要超过8972;再次,应用程序可以用 taskset -c cpu_number ./your_programe 的方式绑核.
在UDP程序的client端和server端运行 mpstat -P ALL 3 查看CPU使用率,情况特别是client端CPU使用率.注意不要将CPU打满,最好控制在90%以下.
下图是C6.2XLARGE16机型的验证情况截图,可以看到带宽基本可以打满到9G,此时丢包率也很低,client端的CPU使用率大致在90%左右.
带宽使用情况如下图所示:
CPU使用情况如下图所示:
3 问题讨论
3.1 UDP参数为何基本不需要调整
用户可能比较疑惑:为了优化TCP通信性能,我们需要调整许多参数,UDP的参数调整为何这样少?这是因为这里选用了高版本的CentOS.首先,基于TCP官方测试的结果表明,高版本的操作系统在网络通信性能上确实比低版本的要更优(详细对比见参考文档).其次这里CentOS Stream版本本身已经做了优化,所以不需要做特别的参数调整.
3.2 C4和C6实测为何UDP性能相差很多?
腾讯云官网显示C4机型的CPU为:
Intel® Xeon® Cascade Lake 处理器,主频3.2GHz,睿频3.7GHz
C6机型的CPU为:
Intel® Xeon® Ice Lake处理器,主频3.2GHz,睿频3.5GHz
C4机型所用的CPU主频不低于C6机型, 睿频甚至还更高,为何UDP测试时性能反而还不如C6机型.这是因为虽然两者的主频都一致,但是在cache缓存以及内存带宽上都有差别,整体性能显然C6更好.两种CPU性能的详细的测试结果可以参考下面的文档.
4 参考资料
[1] UDP Tuning
https://fasterdata.es.net/host-tuning/linux/udp-tuning/
[2] iPerf
https://iperf.fr/
[3]《DEEP DIVE INTO INTEL’S “ICE LAKE” XEON SP ARCHITECTURE》
https://www.nextplatform.com/2021/04/19/deep-dive-into-intels-ice-lake-xeon-sp-architecture
[4] Recent Linux TCP Updates, and how to tune your 100G host
https://fasterdata.es.net/assets/Papers-and-Publications/100G-Tuning-TechEx2016.tierney.pdf
[5] UDP 相关缓冲区调整
https://cloud.tencent.com/document/product/213/57336#receiveBuffer