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

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

3天内不再提示

如何使Linux网络协议栈中RFS功能优化 MPSoC APU 的并行处理能力

FPGA技术江湖 来源:FPGA技术江湖 2023-06-17 08:59 次阅读

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

问题描述:

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

测试过程:

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

94988b74-0ca4-11ee-962d-dac502259ad0.png

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

94af35ae-0ca4-11ee-962d-dac502259ad0.png

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

94c92338-0ca4-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,综上,执行命令如下:

952af07c-0ca4-11ee-962d-dac502259ad0.png

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

总结:

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

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

    关注

    8

    文章

    6512

    浏览量

    87601
  • Linux
    +关注

    关注

    87

    文章

    10990

    浏览量

    206738
  • APU
    APU
    +关注

    关注

    0

    文章

    141

    浏览量

    23568

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

文章出处:【微信号:HXSLH1010101010,微信公众号:FPGA技术江湖】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    linux平台实现modbus主机协议的动态库libMbpoll

    libMbopll动态库是面向linux平台设计的modbus主机协议,可以运行在x86平台以及各种嵌入式linux平台;协议
    发表于 05-28 14:23

    linux平台实现modbus主机协议的动态库libMbpoll

    libMbopll动态库是面向linux平台设计的modbus主机协议,可以运行在x86平台以及各种嵌入式linux平台;协议
    发表于 05-28 14:55

    协议介绍

    的利用率高。且CPU的占用率低。10)本协议支持外网,运行时需要通过ICS服务器与局域网外部网络进行数据通讯。运行时需要设置相关的网关地址,网关地址通过IP层代码进行MAC地址的转换与封装。包括 PING客户端
    发表于 09-03 15:02

    协议介绍

    的函数。5)本协议可以完成客户机,服务器,UDP客户机,UDP服务器。还可以方便完成DNS客户端功能,PING客户端功能。6)本协议
    发表于 09-14 08:44

    基于精简版协议代码开放的ZigBee网络节点研究介绍

      引言  ZigBee是一种新兴的短距离、低功耗、低数据速率、低成本、低复杂度的无线网络技术。ZigBee在整个协议处于网络层的位置,
    发表于 06-14 07:35

    请问Zynq Ultrascale + MPSOC本身是否存在问题?

    本身是否存在问题(换句话说,我无法实现这一点)?要么2)ZCU102电路板设计有问题吗?要么3)Zynq Ultrascale + MPSOC APU上运行的Linux设备驱动程序是否存在问题?对于
    发表于 10-14 09:17

    嵌入式SIP协议怎么设计?

    ,凭借SIP自身的特性可有效提高嵌入式网络设备的互操作性和接入网络的便利性。但SIP协议本身只给出SIP消息的文法定义以及自然语言描述的消息处理,并未给出SIP
    发表于 10-29 08:14

    协议是什么 协议又是什么

    协议协议的具体实现形式, 通俗的理解就是用代码实现的函数库, 以便于开发人员调用。协议是通常是一个层级结构。
    发表于 08-05 07:00

    网络协议-lwip2.1.2移植

    本篇目标:上一篇freertos的优化(stm32f4_os_app),RTOS的移植已经告一段落了,接下来就是移植重要的网络协议-lw
    发表于 08-16 08:08

    使Linux内核的SCSI协议

    U盘使用 SCSI协议,因此要先使Linux内核的 SCSI协议,配置路径如下:我们还需要使能 USB Mass Storage,也就
    发表于 12-16 06:27

    主流的小型嵌入式网络协议

    最新教程下载:http://www.armbbs.cn/forum.php?mod=viewthread&tid=95243第1章 当前主流的小型嵌入式网络协议这几年物联网发展迅猛,各种
    发表于 12-23 06:18

    Z-stack协议是什么

    本篇文章:主要是协议的介绍,使用协议完成一个简单例子,协调器创建网络的相关问题,学会在协议
    发表于 01-12 07:49

    介绍RL-TCPnet网络协议

    第4章 RL-TCPnet网络协议简介本章节介绍RL-TCPnet网络协议,让大家对 RL-
    发表于 03-02 06:30

    CH582如何优化BLE协议的RAM占用?

    请问,如何能优化下BLE协议的RAM空间,我编译BLE中最基本的一个示例,光BLE协议就占去了16K RAM,分析map文件,发现其中6
    发表于 09-19 09:23

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

    本文介绍如何使能 Linux 网络协议栈中的 RFS(receive flow steering)功能
    的头像 发表于 06-14 10:10 474次阅读
    如何解决<b class='flag-5'>MPSoC</b>万兆以太网应用中UDP接收丢包问题