hung task 机制
每次上下文切换的时候,
struct task_struct {
// ...
#ifdef CONFIG_DETECT_HUNG_TASK
unsigned long last_switch_count;
unsigned long last_switch_time;
#endif
// ...
}
- watchdog : 启动一个循环线程
- check_hung_uninterruptible_tasks
- for_each_process_thread : check_hung_task ,就是检查一个 task 如果处于如下状态,那么报告
- ((state & TASK_UNINTERRUPTIBLE) && !(state & TASK_WAKEKILL) && !(state & TASK_NOLOAD))
- for_each_process_thread : check_hung_task ,就是检查一个 task 如果处于如下状态,那么报告
- schedule_timeout_interruptible : 睡眠 120s,然后重新检测
- check_hung_uninterruptible_tasks
也就是进入到内核中,并且在用户态杀不掉的时候,那么会出现问题。
- 让当前进入 unkillable ,然后等待 lock ,应该可以造成这种现象。
整理一下 https://blog.cloudflare.com/es-la/searching-for-the-cause-of-hung-tasks-in-the-linux-kernel/
本站所有文章转发 CSDN 将按侵权追究法律责任,其它情况随意。