Linux hung task detect

来源:互联网 发布:网游推荐知乎 编辑:程序博客网 时间:2024/05/16 04:19
hung相关代码所在路径:kernel/linux/kernel/hung_task.c

相关内核配置宏在out/target/product/xxx/obj/KERNEL/.config文件中,如下所示:
CONFIG_DETECT_HUNG_TASK=y
CONFIG_DEFAULT_HUNG_TASK_TIMEOUT=120
CONFIG_BOOTPARAM_HUNG_TASK_PANIC=y

CONFIG_BOOTPARAM_HUNG_TASK_PANIC_VALUE=1

如果要修改以上宏,以arm64为例,需修改kernel/linux/arch/arm64/configs目录下的相关文件。



函数调用关系
subsys_initcall(hung_task_init)->hung_task_init->kthread_run->watchdog->check_hung_uninterruptible_tasks->check_hung_task

hung_task_init函数:创建名为“khungtaskd”的线程,其中watchdog函数为线程运行的函数;
watchdog函数:每隔CONFIG_DEFAULT_HUNG_TASK_TIMEOUT(120S)时间,检测是否有进程hung;
check_hung_uninterruptible_tasks函数:遍历所有线程(进程),如果有线程处于TASK_UNINTERRUPTIBLE状态,则执行check_hung_task函数;
check_hung_task函数:两次间隔CONFIG_DEFAULT_HUNG_TASK_TIMEOUT时间内,如果线程没有主动放弃CPU或者被抢占,则打印hung相关信息,
如果CONFIG_BOOTPARAM_HUNG_TASK_PANIC_VALUE为1,则产生panic。