在Linux环境机器上面进行测试的时候经常会报softlockup什么意思up的问题,而导致系统panicSoftlockup什么意思up是内核中进行死锁检查的一种机制,在2.6.X内核中是在softlockup什么意思up.c的文件中实现在新的3.X内核中是在watchdog.c文件中实现的。
Softlockup什么意思up是用来检测内核长时间不发生调度的情况它的工作原理是在内核中启动一个优先级为MAX_RT_PRIO – 1的FIFO进程,在此進程里面会刷新时间戳如果此时间戳超过设定的时间阈值没有更新,则会报softlockup什么意思up错误
下面结合代码来分析softlockup什么意思up的实现。系统啟动会调用
首先获取当前CPU的per
然后调用函数设置进程的调度策略和优先级此内核线程为实时的FIFO线程,优先级为MAX_RT_PRIO- 1优先级最高了,这样就能夠在进程被唤醒的时候能够强制其它优先级低的线程\进程了
然后调用wake_up_process函数唤醒此cpu上的watchdog线程,如果watchdog线程被唤醒就会去刷新时间戳如果系統关了抢占,此watchdog线程不会被唤醒这样时间戳就不会更新。
如果touch_ts为0表示第一次hrtimer到期,直接刷新时间戳并重新启动此定时器。
is_softlockup什么意思up函数会判断当前时间与上次刷新时间touch_ts的差值如果差值大于设定的阈值,就返回差值即变量duration否则返回0。
如果duration不为0则表示内核有超过设萣的阈值时间没有发生调度。
发布了40 篇原创文章 · 获赞 14 · 访问量 9万+