dwceqos网络驱动性能优化

文章介绍

本文会介绍优化QNX系统下io-pkt-v6-hc驱动模块cpu loading过高问题,经过优化可以降低约一半的cpu loading.

问题背景

激光雷达通过以太网发送数据到ADAS域控中,测试发现在激光功能激活的情况下,会出现比较明显的网络丢帧现象。

初步调查发现,在发生丢帧时,整个系统的cpu loading非常的高(100%),而且持续处于这种状态,整个系统cpu资源处于过载的状态.

从上面的cpu loading表现来看,QNX的io-pkt-v6-hc的整体cpu loading很高.

由于这个问题的存在已经严重影响了功能的正常使用,所以我们想在不影响性能的前提下,尽可能优化cpu loading,已达到一个合理的范围。

调查过程

这个时候第一个问题已经出现:即当前在这种测试场景下,我们cpu loading表现是否正常?是否符合芯片设计的要求?

这里引出来几个话题:

一、我们的硬件设计是怎样的?

可以看到基本上框架为:SOC-GMAC-RGMII-SWITH

二、io-pkt-v6-hc是和那个硬件模块交互?

io-pkt-v6-hc对接的MAC以太网驱动devnp-dwceqos-mv88e1512.so,而MAC是SOC片上的RGMII模块.在产生数据传输时,最先有MAC硬件接收,DMA数据传输完成之后,产生中断,有io-pkt-v6-hc调用devnp-dwceqos-mv88e1512.so中的中断处理函数,中断处理数据完成之后,调用if_input()接口注入io-pkt-v6-hc网络服务,再由应用程序读取数据.

而在芯片层面,MAC这个硬件模块大致与CPU以及其他模块的连接大致如下(不完全准确):

其中比较重要的是需要知道,MAC硬件模块与SOC的中断控制器(IC)有数条中断线进行连接,其中的中断号可以通过对应的手册查询到:

三、当前的loading状态是否正常?

针对这个问题,我们最先和我们的芯片供应商进行了讨论,但是从反馈来看,他们似乎也并没有什么比较好的解决方法(他们知道这个问题的存在).并且他们并没有计划也没有能力去进行优化(这个驱动由ip core供应商开发,他们没有参与这个部分).

查看了这个MAC的IP core状态,是synopsys公司的dwceqos模块,这个ip core不止在我们这个SOC上使用,同时在高通的多款芯片上也有应用。

基于这个背景,我们也同时测试了8155 q+a/8155 lv/8255 q+a/8295 q+a 这几个平台上的表现,发现表现基本相同,即在千兆以太网传输的case下,cpu loading普遍会很高.

从各方反馈的结果来看,测试结果似乎符合预期的?但是直觉上又感觉不合理,因为进行网络传输占用如此多都cpu资源似乎并不合理(相比其他平台进行网络传输并不会有很高的loading)。

调查思路

一般来说,cpu负荷过高通常有2个原因,一是,cpu现在的确一直在干活,那么优化的思路是优化cpu的工作内容,二是,cpu一直在被中断,反复的状态切换带来的高消耗。

优化尝试

1,确认是否启用DMA

2,修改网络模块收发buffer size

3,修改驱动加载参数

4,中断优化

基于中断合并的思路,我们翻阅了"DesignWare Cores Ethernet Quality-of-Service
Databook" 
这个ip core的datasheet,其中有一段描述:

这段话简单概括来说是,如果你想优化性能,那么最好使用IOC标志位&定时器来产生中断,而不是每次DMA传输完成都产生一次中断.

其中还有一段关于中断模式的描述:

简单概括来说就是,在中断模式0(default)的情况下,只要检测到RX/TX的IOC标志位都会立即触发通用中断(sbd_intr_o),而在1/2模式下,则完全不触发sbd_intr_o中断,而只会触发sbd_perch_tx_intr_o[]或者sbd_perch_rx_intr_o[]

到这里,我们又遇到了问题: 该如何确认我当前驱动工作在那个模式下?

通过驱动代码&SOC芯片手册,我们可以确定这个GMAC控制的寄存器地址,通过devmem2直接读取其值:

note:

1,这里读到的值是我修改过之后的值,默认情况下读到的值是0x0

2,如果devmem2工具不可用,那么可以用qnx提供的in32/out32来读写寄存器

4.1 中断模式修改

到这里,我们首先尝试直接修改中断模式,修改为1/2模式之后,网络驱动完全不可用,无法传输数据。想了下,原因其实很简单,因为驱动已经指定了中断触发的源是sbd_intr_o,我们更改模式之后,因为并没有中断源与当前驱动挂钩,所以即使有数据传输产生也不会产生任何函数调用。

我们通过修改驱动更新了中断源为sbd_perch_rx_intr_o,测试之后发现效果并没有什么变化

原因在于,现在每次DMA描述符都被设置了IOC标志位,意味着,每次传输完成都会产生sbd_perch_rx_intr_o中断,与我们预期还是不符合.

4.2 中断模式修改+修改中断源+定时器触发

基于上面的原因,我们清除了驱动中大部分都DMA描述符的IOC标志位,只在特定的DMA描述符上设置IOC标志位,比如4/16/32。

不过这个时候还是有问题,因为DMA传输只在有IOC标志位的描述符传输完成时产生中断,如果没有检测到IOC标识符则不会产生中断,那么数据的实时性就没有保证了,比如你只传递了一次数据,那么这个数据并不会及时得接收到(因为还未达到IOC触发阈值).

为了解决这个问题,我们需要增加一个timer来定时触发中断,按照手册的描述:

当timer寄存器写入数值时,如果此时一个RX DMA传输完成,且IOC标志位没有被设置,那么timer将会启动,在RWT*RWTU个系统时钟后超时,并产生中断.

优化结果对比

优化前测试结果

iperf3传输速度:

cpu loading表现(每隔1s采样一次)

中断表现:

优化后测试结果

iperf3 测试表现:

cpu loading表现(每隔1s采样一次)

中断表现

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1551522.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

平安养老险深圳分公司积极开展“金融教育宣传月”活动,展现金融为民新风尚

2024年9月,平安养老险深圳分公司以“金融为民谱新篇,守护权益防风险”为主题,正式启动2024年“金融教育宣传月”活动,通过多样化开展进乡村、进商圈、进企业等宣传教育活动,将金融消保知识送达广大消费者身边&#xff…

光通信——PON技术

PON网络结构 PON(Passive Optical Network,无源光网络)系统的基本组成包括OLT(Optical Line Terminal,光线路终端)、ODN(Optical Distribution Network,光分配单元)和ON…

数据结构——队列的基本操作

前言 介绍 🍃数据结构专区:数据结构 参考 该部分知识参考于《数据结构(C语言版 第2版)》24~28页 🌈每一个清晨,都是世界对你说的最温柔的早安:ૢ(≧▽≦)و✨ 目录 前言 1、队列的基本概念…

Oracle 闪回版本(闪回表到指定SCN)

1.创建目录 mkdir /u01/app/oracle/flash 2.配置FRA alter system set db_recovery_file_dest_size15G; alter system set db_recovery_file_dest/u01/app/oracle/flash; 3.设置闪回参数--确保可以闪回48h内的数据库 alter system set db_flashback_retention_target2880; 4…

中关村环球时尚产业联盟 东晟时尚产业创新中心成立

2024年9月6日,中关村环球时尚产业联盟与东晟时尚创新科技(北京)有限公司于中关村科技园东城园举行了隆重的战略合作签约仪式。 中关村科技园东城园领导发表了致辞,并表示东城区作为首都北京的核心区域,拥有深厚的历史…

SW - 装配图旋转到一个想要的正视图

文章目录 SW - 装配图旋转到一个想要的正视图概述笔记将装配图旋转到自己想要的视图的方法保存当前视图选择自己保存的视图END SW - 装配图旋转到一个想要的正视图 概述 在弄装配图。 如果按照SW默认的视图,Y方向是反的。 原因在于我画零件图时,方向就…

从“抄袭”到“原创”:5个超实用的论文降重技巧!

AIPaperGPT,论文写作神器~ https://www.aipapergpt.com/ 每当写完一篇论文,松了一口气准备庆祝时,突然想到还有一个名叫“查重”的终极大Boss等着你,瞬间心情从云端跌入谷底。 是不是你? 很多同学在提交之前&#…

fatfs API使用手册

配置 /*---------------------------------------------------------------------------/ / Configurations of FatFs Module /---------------------------------------------------------------------------*/#define FFCONF_DEF 80286 /* Revision ID *//*---------------…

Spring IoC笔记

目录 1.什么是 IoC? 2.IoC类注解(五大注解) 2.1那为什么要这么多类注解? 2.2五大注解是不是可以混用? 2.3程序被spring管理的条件是? 3.bean对象 3.1Bean 命名约定 3.2获取bean对象 4.⽅法注解 B…

业绩由盈转亏,全面冲刺大模型的360值得期待吗?

在中国互联网市场上,360无疑是一家大家家喻户晓的公司,从安全软件起家,360的服务已经延展到了市场的方方面面,就在最近360的财报正式公布,很多人都在问360的财报该怎么看?全面冲刺大模型的360值得我们期待吗…

uniapp中uni.request的统一封装 (ts版)

文章目录 前言一、我们为什么要去封装?二、具体实现1.创建一个请求封装文件:2.封装 uni.request:3.如何去使用? 总结 前言 在uniapp中如何去更简洁高效的发送我们的请求,下面就介绍了uni.request()二次封装。 一、我们…

目标检测应用场景—数据集【NO.37】纺织物缺陷检测数据集

写在前面:数据集对应应用场景,不同的应用场景有不同的检测难点以及对应改进方法,本系列整理汇总领域内的数据集,方便大家下载数据集,若无法下载可关注后私信领取。关注免费领取整理好的数据集资料!今天分享…

AI大模型面试大纲

大纲 1. 介绍和背景 自我介绍(5分钟) 了解候选人的教育背景、工作经历和对大模型架构的兴趣。 2. 基础理论和概念(30分钟) 机器学习基础 解释基本概念,如监督学习、无监督学习和强化学习。 讨论不同的模型类型&#xf…

【Iceberg分析】调研Iceberg中表的原地演变

调研Iceberg中表的原地演变 文章目录 调研Iceberg中表的原地演变原生非分区表文件关系图表的原地演变之表schema演变新增字段new_column文件关系变化图为新增字段写入数据文件关系变化图删除新增字段文件关系变化图新增字段new_column2文件关系变化图删除数据文件关系变化图 原…

uniapp学习(003-1 vue3学习 Part.1)

零基础入门uniapp Vue3组合式API版本到咸虾米壁纸项目实战,开发打包微信小程序、抖音小程序、H5、安卓APP客户端等 总时长 23:40:00 共116P 此文章包含第11p-第p14的内容 文章目录 vue3使用介绍插值表达式例子时间戳随机数输出函数的值 ref响应式数据变量v-bind 绑…

Python入门:深入了解__init__.py 文件(如何实现动态导入子模块)

文章目录 📖 介绍 📖🏡 演示环境 🏡📒 文章内容 📒📝 `__init__.py` 的作用示例:📝 如何编写 `__init__.py`1. 空的 `__init__.py`2. 导入子模块3. 初始化代码4. 动态导入子模块📝 编写 `__init__.py` 的技巧和注意事项⚓️ 相关链接 ⚓️📖 介绍 📖 在…

大数据-155 Apache Druid 架构与原理详解 数据存储 索引服务 压缩机制

点一下关注吧!!!非常感谢!!持续更新!!! 目前已经更新到了: Hadoop(已更完)HDFS(已更完)MapReduce(已更完&am…

永不失联!遨游双卫星三防手机成为高效应急关键所在

今年9月被戏称为“台风月”,台风“摩羯”、“贝碧嘉”以及热带气旋“普拉桑”接连来袭,极端天气不仅导致了电力中断、道路损毁,更使得传统的通信网络遭受重创,给应急通信保障工作带来了极大的压力。面对“三断”的实战难题&#x…

Web3 游戏周报(9.22 - 9.28)

回顾上周的区块链游戏概况,查看 Footprint Analytics 与 ABGA 最新发布的数据报告。 【9.22-9.28】Web3 游戏行业动态: Axie Infinity 将 Fortune Slips 的冷却时间缩短至 24 小时,从而提高玩家的收入。 Web3 游戏开发商 Darkbright Studios…

SV830C产品介绍

SV830C产品介绍 SV830C是一款由珠海亿智科技有限公司(Zhuhai Eeasy Technology Co., Ltd.,品牌名为EEASYTECH)倾力打造的专业AI系统级芯片(SoC),专为视频编码产品而设计。这款芯片不仅集成了先进的神经网络…