我开发了一个内核模块,它完成了一项繁重的工作,当然这需要时间。问题是模块使用 CPU 超过 20 秒,因此引发了 softlockup_threshold 的 BUG。
我的问题是,有没有办法绕过这个?即它可以篡改阈值吗?或者它可以强制调度并稍后继续其工作?(为了将定时器设置为 0)。
提前谢谢你,帕诺斯
我开发了一个内核模块,它完成了一项繁重的工作,当然这需要时间。问题是模块使用 CPU 超过 20 秒,因此引发了 softlockup_threshold 的 BUG。
我的问题是,有没有办法绕过这个?即它可以篡改阈值吗?或者它可以强制调度并稍后继续其工作?(为了将定时器设置为 0)。
提前谢谢你,帕诺斯
使用新内核,您可以调整 /proc/sys/kernel/watchdog_thresh(我认为旧内核使用 /proc/sys/kernel/softlockup_thresh)。但不鼓励这样做,因为阻塞 20 秒意味着你的代码有问题,你应该让出 CPU,例如通过调用 cond_resched()。
您可以尝试让 CPU 一段时间,如果可以接受,那么您应该查看schedule()
Theres a great article here about Sleeping in the Kernel