【写在前面】 飞腾开发者平台是基于飞腾自身强大的技术基础和开放能力,聚合行业内优秀资源而打造的。该平台覆盖了操作系统、算法、数据库、安全、平台工具、虚拟化、存储、网络、固件等多个前沿技术领域,包含了应用使能套件、软件仓库、软件支持、软件适配认证四大板块,旨在共享尖端技术,为开发者提供一个涵盖多领域的开发平台和工具套件。 点击这里开始你的技术升级之旅吧
本文分享至飞腾开发者平台《GMAC网络延时性能优化》
1 问题介绍及分析
1.1 问题介绍
问题简介:D2000 板载GMAC网卡,netperf测试网络时延,相较于i350 80μs左右的时延水平。差距接近在5倍左右。
即:两块GMAC网卡对接,时延在500μs以上。GMAC网卡与i350网卡对接,时延在350μs左右。
测试情况:
测试结果:
测试端1 | 测试端2 | 时延(μs) |
---|---|---|
FT-2000/4 GMAC | FT-2000/4 GMAC | 550 |
D2000 GMAC(netserver) | FT-2000+/64 i350(client) | 350 |
D2000 GMAC(client) | FT-2000+/64 i350(netserver) | 341 |
D2000 i350 | FT-2000+/64 i350 | 82 |
FT-2000+/64 i350 | FT-2000+/64 i350 | 77 |
性能对比如下图,D2000 gmac 与FT-2000+/64 i350,分别作为netperf的client与server端的时延为341μs和350μs,取两者的平均值:345μs
未优化前性能对比:
1.2 问题分析
网络时延:时延是指一个报文或分组从一个网络的一端传送到另一个端所需要的时间。它包括了发送时延,传播时延,处理时延,排队时延。Netperf源码
测试流程分析:
1)每一轮传输取开始的时间:
2)每一轮结束取结束的时间:
3)将结束时间和开始时间作为入参,调用HIST_add;
4)HIST_add函数,会将传输次数++,然后算出最大延迟和最小延迟病存储
5)整个测试结束,调用计算延迟的接口HIST_get_stats
6)HIST_get_stats会最终算出最大延迟,最小延迟,已经平均延迟
通过netperf源码获知:网络时延测试就是客户端向服务端发送报文。服务端收到报文,发出回复报文,客户端收到回复报文作为一次传输过程,计时(存储在数组中),作为本次传输的时间。累计在固定时间内,重复以上过程,记录传输过程(有来有回)的次数,以及每次传输对应的时间。从而在所有计时(数组),算出最大时延,最小时延,以及平均时延(所有时间相加/传输次数)。
针对以上时延测算过程:发送时延(如果是发送方是i350)和传播时延可以忽略不计。主要对接收方(GMAC)处理时延和排队时延的优化。因此针对这一优化目标,主要就以下几个方面进行优化:
2 优化策略
2.1 协议栈参数优化
以下参数所在文件目录:/proc/sys/net/ipv4/ 以及/proc/sys/net/core/
名称 | 默认值 | 调优值 |
---|---|---|
net.ipv4.tcp_mem | 178305 237740 356610 | 786432 1048576 1572864 |
net.ipv4.tcp_wmem | 4096 16384 4194304 | 8192 131072 16777216 |
net.ipv4.tcp_rmem | 4096 87380 6291456 | 32768 131072 16777216 |
net.ipv4.tcp_syn_retries | 6 | 1 |
net.core.somaxconn | 128 | 16384 |
经过测试,以上调优手段,对时延影响不大。
2.2 Tcp分段设置
原理:当一个系统需要通过网络发送一大段数据时,计算机需要将这段数据拆分为多个长度较短的数据,以便这些数据能够通过网络中所有的网络设备,这个过程被称作分段。TCP分段卸载将TCP的分片运算(如将要发送的1M字节的数据拆分为MTU大小的包)交给网卡处理,无需协议栈参与,从而降低CPU的计算量和中断频率。虽然此种修改方式能够提高带宽。但是这样势必会增加时延,所以建议关闭。该部分详细内容可以参考:http://t.zoukankan.com/huaweicloud-p-11861181.html
修改方式:使用ethtool工具关闭网卡和驱动对TSO(TCP Segmentation Offload)的支持。如下命令中的参数“$eth”为待调整配置的网卡设备名称,如eth0,eth1等。
# ethtool -K $eth tso off
经过测试,以上调优手段,对时延影响不大。
2.3 中断聚合参数调整
原理:中断聚合特性允许网卡收到报文之后不立即产生中断,而是等待一小段时间有更多的报文到达之后再产生中断,这样就能让CPU一次中断处理多个报文,减少开销。
两种修改方式:
1)使用ethtool -C $eth方法调整中断聚合参数。其中参数“$eth”为待调整配置的网卡设备名称,如eth0,eth1等。
# ethtool -C eth3 adaptive-rx off adaptive-tx off rx-usecs N rx-frames N tx-usecs N tx-frames N
为了确保使用静态值,需禁用自适应调节,关闭Adaptive RX和Adaptive TX。
rx-usecs:设置接收中断延时的时间。
tx-usecs:设置发送中断延时的时间。
rx-frames:产生中断之前接收的数据包数量。
tx-frames:产生中断之前发送的数据包数量。
这4个参数设置N的数值越大,中断越少。带宽越大,时延越大。
因此建议将以上4个设置N数字变小。从而降低时延。但是gmac网卡暂不支持ethtool此种设置方式。
关于调整中断聚合的详细内容可以参考:https://www.sohu.com/a/352508214_655101
2)通过修改内核代码的方式
通过修改源码中表征中断聚合参数的值,控制中断产生的频率,为降低时延,我们作一下修改:
修改项目 | 修改前 | 修改后 |
---|---|---|
#define MAX_DMA_RIWT | 0xff | 0x20 |
修改完成,重新编译内核源码,详细测试结果见第三章。
3 测试结果
经过2.4 章中,中断聚合优化以后的测试:
测试拓扑:
表 FT-2000+/64(i350 client)\<-\>D2000(gmac server)
测试次数 | 时延(μs) |
---|---|
1 | 93.37 |
2 | 93.03 |
3 | 93.04 |
4 | 93.69 |
5 | 94.80 |
平均值 | 93.59 |
表 FT-2000+/64(i350 server)\<-\>D2000(gmac client)
测试次数 | 时延(μs) |
---|---|
1 | 96.57 |
2 | 97.91 |
3 | 95.69 |
4 | 97.90 |
5 | 94.19 |
平均值 | 96.45 |
测试结论:netperf时延测试,gmac作为server端和client端,时延分别在93.59和96.45左右,取两者的平均值:95μs左右
4 测试结论
经过中断聚合参数调整以后,前后网络时延性能对比:
测试结论:优化后,gmac无论作为netperf的server端或者作为client时,性能提升接近4倍左右,接近两块intel i350网卡互连时时延的水平(80μs左右)。
推荐阅读
欢迎广大开发者来飞腾开发者平台获取更多前沿技术文档及资料
如开发者在使用飞腾产品有任何问题可通过在线工单联系我们
版权所有。飞腾信息技术有限公司 2023。保留所有权利。
未经本公司同意,任何单位、公司或个人不得擅自复制,翻译,摘抄本文档内容的部分或全部,不得以任何方式或途径进行传播和宣传。
商标声明
Phytium和其他飞腾商标均为飞腾信息技术有限公司的商标。
本文档提及的其他所有商标或注册商标,由各自的所有人拥有。
注意
本文档的内容视为飞腾的保密信息,您应当严格遵守保密任务;未经飞腾事先书面同意,您不得向任何第三方披露本文档内容或提供给任何第三方使用。
由于产品版本升级或其他原因,本文档内容会不定期进行更新。除非另有约定,本文档仅作为使用指导,飞腾在现有技术的基础上尽最大努力提供相应的介绍及操作指引,但飞腾在此明确声明对本文档内容的准确性、完整性、适用性、可靠性的等不作任何明示或暗示的保证。
本文档中所有内容,包括但不限于图片、架构设计、页面布局、文字描述,均由飞腾和/或其关联公司依法拥有其知识产权,包括但不限于商标权、专利权、著作权等。非经飞腾和/或其关联公司书面同意,任何人不得擅自使用、修改,复制上述内容。