linux RT_PREEMPT 高CPU负载下的驱动稳定性?

本文探讨了在Kubuntu 14.04及Debian 9上使用实时内核时遇到的稳定性问题,特别是在运行实时测试工具如rt-test和pi_stress时出现的I/O错误与网络连接中断等问题,并尝试通过调整进程调度策略和内核版本来解决问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

kubuntu 14.04 kernel 3.10.101-rt111 i386

同时运行rt-test1.0 (https://lwn.net/Articles/687446/) 套件的 

cyclictest -m -n -t4 -p40

pi_stress

上面两个测试,一段时间后,会出现以下错误 

ata2.00: device reported invalid CHS sector 0
sd 1:0:0:0: [sda] Unhandled error code
journal commit I/O error
EXT4-fs error
INFO: task jdb2/dm-0-8:219 blocked for more than 120 seconds
end_request: I/O error, dev sda, sector 13398584
kernel tried to execute NX-protected page

同时,在另一台机子上(debian9 ,内核直接从apt下载linux-image-4.9.0-4-rt-amd64包)

却不会出现上面的问题?

但是在ighEthercatMaster主站运行时,一段时间后会出现

e1000e: ecm0 NIC Link is down

然后连接就中断了


怀疑是 irq*进程与kworker*进程的调度策略为SCHED_OTHER, 会被pi_stress完全阻塞(不过很奇怪,XServer进程也是非实时进程,但是却没有卡死)

发现了 rtirq-init包, 将irq*进程的调度策略设置为了SCHED_FIFO,优先级为50

现在还未在 kubuntu 14.04 上测试, 但是在debian9上安装后,e1000e一段时间后仍然报错


可能的解决办法是调整kworker*的实时性?


跟踪错误:

在igh e1000e的驱动中,netdev-4.9-ethercat.c 里有 "NIC Link is down" 字样

调用者有 e1000e_close ,e1000_watchdog_task

其中,e1000_watchdog_task会调用 e1000e_has_link来判断是否需要link down

e1000e_has_link 会受 ec_poll函数, E1000_ICR_LSC寄存器位的影响

E1000_ICR_LSC位置高是真的断线了

ec_poll是ighMaster的读取函数,里面有个超时判断,超时就会设置e1000e_has_link返回错误,然后e1000_watchdog_task就会link down

ec_poll的超时判断会受xxx_clean_irq,e1000_probe影响

其中clean_irq会受irq优先级影响?

e1000_watchdog_task运行在kworker中,但是并未发现kworker阻塞会影响e1000e的代码


跟踪过程中,发现在e1000e_has_link 函数中

这一句 ret_val = hw->mac.ops.check_for_link(hw); 在cpu高负载时会执行很久,然后就会得出错误的结果,但是ret_val的值却一直返回0;

没时间了,先放弃跟踪.


安装rtirq-init包,使irq*进程变成实时进程

用chrt指令设置 kworker* 和ksoftirq* 进程的调度方式为FF,优先级21

ps -eo pid,comm,cls,rtprio | grep kworker

chrt -f --pid 21 [PID]

然后再次测试,在10分钟内没出问题

测试中....挂了


放弃linux 4.9的e1000e驱动,改用3.10的,同时使用 https://sourceforge.net/p/etherlabmaster/code/ci/9149adda56ed7bc600a263f9a7639918eeb6d117/ 这个版本的etherlabMaster就没问题了.

可能和 SmartPowerDownEnable 参数有关系,但是没时间测了







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值