UDP带宽测试参考

2024-01-29 10:10:33 浏览数 (2)

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

0 人点赞