如何解决 MPSoC 万兆以太网应用中 UDP 接收丢包问题

FPGA技术江湖 2025-10-29 08:36
如何解决 MPSoC 万兆以太网应用中 UDP 接收丢包问题图1


本文作者:AMD 赛灵思工程师 Gaofeng Zhao


本文介绍如何使能 Linux 网络协议栈中的 RFS(receive flow steering)功能以优化 MPSoC APU 的并行处理能力,解决丢包问题。


问题描述:


在测试 ZCU102 PL 10G Ethernet with MCDMA 设计的性能时,遇到 UDP 接收丢包率很高的情况,测试使用的工具是 iperf3。


测试过程:


Board side:在 core1~3 上各开一个 iperf3 服务端用于收包,命令如下:

如何解决 MPSoC 万兆以太网应用中 UDP 接收丢包问题图2

Server side:使用与 zcu102 用光纤相连的服务器发送 UDP 帧,命令如下:

如何解决 MPSoC 万兆以太网应用中 UDP 接收丢包问题图3

双方的网卡都工作在 MTU1500 模式下,故数据段长度设为 1472B,总带宽暂设为 2400M。

如何解决 MPSoC 万兆以太网应用中 UDP 接收丢包问题图4

测试结果如上图所示,丢包率超过了百分之十,故实际传输速度也达不到设定的带宽,使用 mpstat 命令观察 CPU 使用状况,发现接收工程中 CPU0 的软中断占用达到93.3%。


解决方案:


使用 RFS 接收流导向,RFS 是 Linux 网络协议栈提供的一项辅助性功能,RFS 的目标是通过将数据包在内核中的处理引导到使用该数据包的应用程序线程对应的 CPU 来提高数据缓存的命中率,详情可参考 Linux 内核文档https://www.kernel.org/doc/html/latest/networking/scaling.html

在本文的测试中 Board side 上运行了三个 iperf 服务端在三个 CPU 上,RFS 可以将发给某个服务端的数据包的部分处理工作交给这个服务端对应的 CPU 执行,以此平衡工作负载。
按照文档中的说明,rps_sock_flow_entries 设置为32768,本文使用的设计中 MCDMA 共有16个接收通道,所以 rps_flow_cnt 为32768/16=2048,另外共开启了三个 iperf 服务端,所以暂时只设置 rx-0~rx-2,综上,执行命令如下:

如何解决 MPSoC 万兆以太网应用中 UDP 接收丢包问题图5

重新测试后结果如上图所示,丢包率大大降低,实际传输速度也达到了设定值,使用 mpstat 命令监控传输期间的 CPU 状况,发现 CPU0 的软中断占用时间降低,而 CPU1~3 的软中断占用升高,可以看出实现了负载的分配,但是从总体来看,四个 CPU 的总负载升高,说明 RFS 还是有一定的额外工作开销。

总结:


使用 RFS 可以一定程度上解决 MPSoC 10G 以太网应用(使用 MCDMA 时)中的 UDP 接收丢包问题,但是会产生额外的 CPU 开销,如果丢包率在接受范围内可以选择不开启。





声明:内容取材于网络,仅代表作者观点,如有内容违规问题,请联系处理。 
MPS
more
突发!标签与软包装设备巨头MPS申请“债权人保护”!
氮化镓(GaN)赋能,效率超95%!MPS PFC+Flyback电源适配器方案及优势
基于MPS HR1275 的 PFC+LLC 二合一 PC 电源方案解析
如何解决 MPSoC 万兆以太网应用中 UDP 接收丢包问题
今日技术直播:解锁MPS高效率高集成度适配器方案
技术直播报名中!解锁MPS高效率高集成度适配器方案
MPS人形机器人解决方案|“芯片+算法+系统”三位一体的创新驱控
“芯片+算法+系统”创新驱控:MPS 人形机器人解决方案发布
Copyright © 2025 成都区角科技有限公司
蜀ICP备2025143415号-1
  
川公网安备51015602001305号