zynq的linux管理了软中断吗,ZYNQ xilinx_axienet CPU软中断占用过高问题解决记录

标签:一个   mdi   运行   boot   cpu   技术   测试   错误   logs

Vivado:2016.4

Linux:Ubuntu16.4

ZYNQ:xc7z020

题主最近在做ZYNQ的网络接收,需求是4路百兆网输入,PS自带的两个网口肯定不够用,于是在PL侧外扩了3个百兆以太网(参见之前博文:ZYNQ Linux 下 AXI Ethernet使用记录),一切运行正常后测试带宽,发现百兆以太网再接收到50Mb/s的时候已经出现了CPU占用过高的现象,进一步发现是进程ksoftirqd/0占用了30%的CPU,这显然不合理。于是从头研究xilinx AXI Ehernet的驱动程序,研究以太网卡的驱动框架,发现了一篇好文:https://www.jianshu.com/p/6292b3f4c5c0 ;

20200626122029131609.jpg

研究了2016.4对应的linux内核中drivers/net/ethernet/xilinx/xilinx_axienet_main.c 中刚好使用的就是NAPI机制,本应该是优化网络接收,减少中断的一种机制,结果在这个版本中既然导致CPU占用过高,猜测是内核中某个地方的bug,无奈没这本事深入到内核中去定位,于是尝试了将kernel和uboot同时升级到高版本(2018.3),结果发现高版本中好多内容有变化(FPGA配置/dev/xdevcfg等内容变化),导致要跑起来整个kernel和uboot很繁琐,于是行到一半放弃了。

其实解决思路无非两种:1. 升级到高版本的内核,解决NAPI占用CPU过高的问题; 2. 不适用NAPI机制,因为目前是百兆网,带宽不是很高,采用中断方式足够使用;

回过头来继续寻找不适用NAPI的方式,先去github上去撸一下看看历史记录,以前的版本是否有不适用NAPI机制的驱动,这一看还真发现历史版本中存在不适用NAPI机制的驱动:https://github.com/Xilinx/linux-xlnx/tree/xilinx-v2015.1/drivers/net/ethernet/xilinx ; 2015.1是最后一个不适用NAPI机制的网卡驱动。于是down下来重新编译(只需要xilinx_axienet.h xilinx_axienet_main.c xilinx_axienet_mdio.c这三个文件,编译过程中报xilinx_axienet_mdio.c某一行错误,注释掉即可)。系统运行起来后加载驱动(insmod xilinx_emac.ko),运行程序发现ksoftirqd/0这个占用CPU高的进程找不到了,同样的测试程序CPU idle从替换驱动前的30% 上升到了70%左右。 大功告成。

20200626122029700966.jpg

ZYNQ xilinx_axienet CPU软中断占用过高问题解决记录

标签:一个   mdi   运行   boot   cpu   技术   测试   错误   logs

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值