探测softlockup的原理
2017-06-10
本文以2.6.18内核来说明.
1. 检测
每间隔HZ, 会喂watchdog.
tick watchdog
| |
| wakup |
|- - - - - - - - - - - > |
|check | touch
| |
| |
| wakup |
|- - - - - - - - - - - > |
|check | touch
| |
| |
若watchdog线程迟迟没有被调度到, 则导致watchdog没有touch, 这样, tick 时钟会检查到该问题, 报 soft lockup .
2. 打印出来的是谁的栈
softlockup_tick
{
if (time_after(jiffies, touch_timestamp + 10*HZ))
{
...
per_cpu(print_timestamp, this_cpu) = touch_timestamp;
dump_stack();
...
}
}
问题:上面这个dump_stack()有意义吗? 打印出来的是谁的栈?
答: 由于 watchdog 线程无法调度到, 那么, 也就是有 task 长期占用着cpu, 所以, 时钟中断发生时, 大概率是处在这个 长期占用的cpu的task上, 故 这里dump_stack()大概率打印出 这个task.
本文地址: https://awakening-fong.github.io/posts/debug/softlockup
转载请注明出处: https://awakening-fong.github.io
若无法评论, 请打开JavaScript, 并通过proxy.
blog comments powered by Disqus