sched_clock精度不够导致统计cpu占用率发生跳变故障

在系统CPU占用率为20%左右时,死循环检测机制误报任务死循环。通过分析发现,问题源于任务CPU占有率统计的精度不足,统计源为/proc/statp,转换时使用的是毫秒级别的sched_clock,而实际任务执行时间是纳秒级别。辅助时钟周期为5ms的中断可能影响任务执行时间统计,导致跳变。提高sched_clock精度以解决此问题。
摘要由CSDN通过智能技术生成

1 故障现象

系统比较空闲时(cpu占用率为20%左右),系统死循环检测机制检测到存在任务处于死循环状态。但是,系统明显比较空闲,也就是说系统死循环检测机制发生了误判。为了分析这个故障,首先要了解死循环检测机制的工作原理。

2 死循环检测机制

   每隔一分钟,统计一次系统中所有任务的cpu占用率,如果一分钟之内统计到某个任务cpu占有率超过给定的阈值,该条件作为该任务作为死循环发生的一个必要条件。另外,如果比该任务优先级低的任务没有得到调度,并且系统的消息队列没有发生变化,只有这三个条件同时成立时,才认为发生了死循环。而且,需要重复命中两次才可以确认死循环的发生。

这种实现机制存在的缺陷是优先级很低的任务发生死循环的时候,不能够检测到。这是由于发生死循环的任务优先级比较低,总是被高优先级的任务打断,导致发生死循环的任务执行的时间没有达到阈值或者只有其中的一次达到阈值之后,第二次进行重复命中确认的时候,运行时间又没有达到阈值,最终系统认为该任务没有发生死循环。虽然死循环检测机制存在这种缺陷,但是只要确定一个最低优先级死循环能够被检测到,比这个优先级更低的任务即使发生了死循环,也不会影响系统的运行。

根据目前的故障现象,检测到了不存在的死循环,作为死循环的必要条件,任务执行的时间必须达到设定的阈值。也就是说很可能是任务cpu占有率统计出了问题。

3 统计任务的cpu占有率   

   死循环检测机制统计任务cpu占有率的数据源是/proc/statp文件。而/proc/statp通过读取task_struct的sum_exec_runtime值来计算每个任务的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值