| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 人工智能 -> kernel hung_task死锁检测机制原理实现 -> 正文阅读 |
|
[人工智能]kernel hung_task死锁检测机制原理实现 |
1、实现原理分析Linux的进程存在多种状态,可在include/linux/sched.h中查看。
其中有一种状态等待为TASK_UNINTERRUPTIBLE,称为D状态,处于该种状态下进程不接收信号,只能通过wake_up唤醒。处于这种状态的情况有很多,例如mutex锁就可能会设置进程于该状态,down信号量也有可能使进程处于该状态
有时候进程在等待某种IO资源就绪时(wait_event机制)会设置进程进入该状态。一般情况下,进程处于该状态的时间不会太久,但若IO设备出现故障或者出现进程死锁等情况,进程就可能长期处于该状态而无法再返回到TASK_RUNNING态。因此,内核为了便于发现这类情况设计出了hung task机制专门用于检测长期处于D状态的进程并发出告警。本文分析内核hung task机制的源码并给出改进建议。 本文基于linux kernel 5.13.6版本源码为例进行分析,源代码位于kernel/hung_task.c。监控时间间隔通常为120s,在defconfig中进行定义CONFIG_DEFAULT_HUNG_TASK_TIMEOUT 2、代码解析实现并不是很复杂,接下来我们对关键代码进行走读。 hung_task_call_panic用来控制是否触发panic复位,该配置默认为true。 3、总结D状态死锁一般在底层驱动开发的过程中比较常见,如果代码规模比较庞大的话对于开发人员来讲不太容易定位,linux内核提供的这种hung task机制,开发人员只需要根据这些输出的定位信息就可以快速的进行定位。 不足:原生的hung_task也有自己的不足之处,因为在实际的应用中,我们对于不能kill掉的守护进程还是有需求的,比如通信相关进程、维测相关进程等,因此要想兼容此场景,就需要对原生hung_task机制进行改造,有两种方式:在检测时可以对指定的进程进行检查,或者对指定的进程不做检查。 附: 常见的进程状态有哪些? R 是 Running 或 Runnable 的缩写,表示进程在 CPU 的就绪队列中,正在运行或者正在等待运行。 D 是 Disk Sleep 的缩写,也就是不可中断状态睡眠(Uninterruptible Sleep),一般表示进程正在跟硬件交互,并且交互过程不允许被其他进程或中断打断。 Z 是 Zombie 的缩写,它表示僵尸进程,也就是进程实际上已经结束了,但是父进程还没有回收它的资源(比如进程的描述符、PID 等)。 S 是 Interruptible Sleep 的缩写,也就是可中断状态睡眠,表示进程因为等待某个事件而被系统挂起。当进程等待的事件发生时,它会被唤醒并进入 R 状态。 I 是 Idle 的缩写,也就是空闲状态,用在不可中断睡眠的内核线程上。前面说了,硬件交互导致的不可中断进程用 D 表示,但对某些内核线程来说,它们有可能实际上并没有任何负载,用 Idle 正是为了区分这种情况。要注意,D 状态的进程会导致平均负载升高, I 状态的进程却不会。 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/27 8:38:48- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |