0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

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

XILINX开发者社区 来源:XILINX开发者社区 2023-06-14 10:10 次阅读

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

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

问题描述:

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

测试过程:

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

ec08a6f0-09d9-11ee-962d-dac502259ad0.png

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

ec1e82f4-09d9-11ee-962d-dac502259ad0.png

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

ec358cd8-09d9-11ee-962d-dac502259ad0.png

测试结果如上图所示,丢包率超过了百分之十,故实际传输速度也达不到设定的带宽,使用 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,综上,执行命令如下:

ec62e43a-09d9-11ee-962d-dac502259ad0.png

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

总结:

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

审核编辑:汤梓红
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 以太网
    +关注

    关注

    40

    文章

    5079

    浏览量

    166251
  • Linux
    +关注

    关注

    87

    文章

    10992

    浏览量

    206745
  • Xilinx
    +关注

    关注

    70

    文章

    2121

    浏览量

    119390
  • UDP
    UDP
    +关注

    关注

    0

    文章

    311

    浏览量

    33624
  • MPSoC
    +关注

    关注

    0

    文章

    194

    浏览量

    24115

原文标题:开发者分享|如何解决 MPSoC 万兆以太网应用中 UDP 接收丢包问题

文章出处:【微信号:gh_2d1c7e2d540e,微信公众号:XILINX开发者社区】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    万兆以太网规范

    在这10多个规范中,可以分为三类:一是基于光纤的局域网万兆以太网规范,二是基于双绞线(或铜线)的局域网万兆以太网规范,三是基于光纤的广域网万兆
    发表于 03-27 11:26 5056次阅读

    基于FPGA的万兆以太网接口的设计与实现

    基于FPGA的万兆以太网接口的设计与实现标准万兆以太网物理层及媒质接入控制子层的相关协议以 应用物理环境为例,阐述了
    发表于 08-11 15:48

    xilinx~k7_connectivity_trd(ug927)万兆以太网求助!!!

    有哪位大神实现了xilinx的k7_connectivity_trd万兆以太网,为什么将FPGA通过PCIE插槽插到PC上,PC认不到Xilinx万兆以太网驱动,是哪里出问题了,该如何
    发表于 05-12 17:06

    C6678以太网载波丢失造成何解决?

    = 7,这个是说Port2的载波丢失PC上位机显示,而我再DSP上统计结果只有这两项是错误的,我推测是这两个原因造成。DSP和P
    发表于 09-04 20:26

    AC6102 开发板千兆以太网UDP传输实验

    一大串字符,在网络的数据接收窗口我们可以看到从FPGA返回的数据也变成刚发送字符串。注意:以太网的数据帧的传输有长的要求, 一般在46~1500字节。所以在发送以太网数据
    发表于 12-15 15:01

    关于千兆以太网UDP传输漏的问题

    FPGA千兆以太网发送数据,数据来自AD采集(有60MHz),经FIFO缓存。采用的UDP协议,一帧一帧传输数据,最后通信成功,但是漏严重,后来发现是因为:AD不停地采集数据,但每一帧UDP
    发表于 05-15 09:21

    简谈基于FPGA的千兆以太网

    知识,那么问题来了,如何去快速学习千兆以太网呢?个人认为掌握好总体框架以及接口细节,理解UDP协议,掌握抓等等,慢慢琢磨学习,大家都可以慢慢掌握好的。那么下面咱们就来聊聊千兆以太网
    发表于 02-03 15:11

    以太网MPSoC的数据通讯实现

    来承担。发送写控制模块通过读取缓存模块的数据,配置发送数据的有效信息,完成网络数据格式封装,最后传输至多核系统通信网络资源接口。2.4 接收模块设计 接收模块承担网络数据
    发表于 06-03 05:00

    AC6102开发板千兆以太网UDP传输实验分享!

    ,或者接收其他设备传输过来的数据并进行处理。接触过以太网的用户,应该最常听说的是TCP/IP协议,确实,在PC端或者嵌入式系统,TCP/IP协议应用非常广泛,因此,当大家看到FPGA上带有
    发表于 10-18 02:15

    基于MPSoC以太网接口该如何去设计?

    本文介绍了一种基于MPSoC以太网接口设计方案。
    发表于 05-19 07:22

    何解决stm32DMA+消息队列串口数据接收的问题?

    何解决stm32DMA+消息队列串口数据接收的问题?
    发表于 12-09 06:31

    esp32 udp broadcast问题如何解决?

    https://www.esp32.com/viewtopic.php?f=1 ... ee512eccf2我遇到和这个一样的问题(我也没有使用蓝牙),请问有人知道如何解决吗?
    发表于 02-14 06:41

    简谈基于FPGA的千兆以太网设计

    ,理解UDP协议,掌握抓等等,慢慢琢磨学习,大家都可以慢慢掌握好的。那么下面咱们就来聊聊千兆以太网UDP协议,并且会结合wireshark抓
    发表于 06-01 18:39

    万兆以太网LAN与WAN技术的研究

    本文主要介绍万兆以太网的核心技术以及在新领域中的研究。相对于传统以太网万兆以太网自身有其独特的特点,而且更是突破了传统
    发表于 07-30 11:03 19次下载

    基于FPGA的UDP万兆光通信测试

    本文开源一个FPGA项目:UDP万兆光通信。该项目实现了万兆光纤以太网数据回环传输功能。Vivado工程代码结构和之前开源的《UDP RGM
    的头像 发表于 09-01 16:25 866次阅读
    基于FPGA的<b class='flag-5'>UDP</b><b class='flag-5'>万兆</b>光通信测试