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

    文章

    6852

    浏览量

    88771
  • Linux
    +关注

    关注

    87

    文章

    11216

    浏览量

    208810
  • APU
    APU
    +关注

    关注

    0

    文章

    141

    浏览量

    23690

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

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

收藏 人收藏

    评论

    相关推荐

    结合pppoe协议分析Linux网络的实现方式

    这个标题起得比较纠结,之前熟知的PPPOE是作为PPP协议的底层载体,而实际上它也是一个完整的协议,不过它的实现比较简单,由它出发,可以很容易理清楚Linux网络
    的头像 发表于 10-26 15:21 2625次阅读
    结合pppoe<b class='flag-5'>协议</b>分析<b class='flag-5'>Linux</b><b class='flag-5'>网络</b><b class='flag-5'>栈</b>的实现方式

    通信网络协议之UDP协议技术解析

    在通常的网络协议,TCP/IP协议是一个常见的示例,其中UDP和TCP都是传输层
    发表于 02-01 11:00 858次阅读
    通信<b class='flag-5'>网络</b><b class='flag-5'>协议</b><b class='flag-5'>栈</b>之UDP<b class='flag-5'>协议</b>技术解析

    网络协议-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

    介绍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

    基于网络处理器的VxWorks高层协议开发

    基于网络处理器的VxWorks高层协议开发
    发表于 03-29 12:27 21次下载

    LINUX网络协议实现分析-SKBUFF的实现

    了解网络协议的人都知道,网络协议是一个有层次的软件结构,层与层之间通过预定的接口传递
    发表于 04-07 22:32 26次下载

    Linux平台双协议主机网络管控系统设计与实现

    Linux平台双协议主机网络管控系统设计与实现_贾锐
    发表于 01-07 19:00 2次下载

    Linux网络技术中最核心的部分--TCP/IP协议

    今天给大家介绍Linux网络技术中最核心的部分--TCP/IP协议 。 我们先看一下抽象的网络协议
    的头像 发表于 06-29 15:14 2317次阅读

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

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

    tcpip协议是什么?tcpip协议有哪些协议?tcpip协议中报文封装和解封装过程

    tcpip协议是什么? TCP/IP协议是计算机网络中使用的最常见的网络
    的头像 发表于 08-01 17:51 8230次阅读
    tcpip<b class='flag-5'>协议</b><b class='flag-5'>栈</b>是什么?tcpip<b class='flag-5'>协议</b><b class='flag-5'>栈</b>有哪些<b class='flag-5'>协议</b>?tcpip<b class='flag-5'>协议</b><b class='flag-5'>栈</b>中报文封装和解封装过程

    Linux网络技术的相关知识

    网络是一个很复杂的协议,今天网络这么发达,网络协议起到关键性作用。 这里就给大家详细描述一
    的头像 发表于 08-24 10:33 638次阅读
    <b class='flag-5'>Linux</b><b class='flag-5'>网络</b>技术<b class='flag-5'>栈</b>的相关知识

    CAN协议与LIN协议介绍

    CAN协议 汽车CAN协议是一种软件组件,用于实现汽车电子系统的CAN总线通信功能。它包含
    的头像 发表于 10-27 16:16 2955次阅读
    CAN<b class='flag-5'>协议</b><b class='flag-5'>栈</b>与LIN<b class='flag-5'>协议</b><b class='flag-5'>栈</b>介绍

    Linux网络协议的实现

    网络协议是操作系统核心的一个重要组成部分,负责管理网络通信中的数据包处理。在 Linux 操作
    的头像 发表于 09-10 09:51 252次阅读
    <b class='flag-5'>Linux</b><b class='flag-5'>网络</b><b class='flag-5'>协议</b><b class='flag-5'>栈</b>的实现