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

1 故障现象

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

2 死循环检测机制

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

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

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

3 统计任务的cpu占有率   

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

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值