linux 内核出现CPU 死机

linux 异常分析工具(一)

linux 内核OOPS(二)

linux 内核出现死机

产生linux kernel死机原因有硬件引起,有驱动本身错误,有调试函数不合规定

       (1)watchdog 检测lockup 异常

Linux 正常情况下, 一个CPU 参与到系统之中后, 会创建一个watchdog 内核进程用于检测CPU 的运行情况, 可以通过以下命令查看到进程:    

# ps auxf | grep "watchdog"
11 root [watchdog/0]
12 root [watchdog/1]
17 root [watchdog/2]
22 root [watchdog/3]
821 root grep watchdog

可以看到, 每个CPU核都有一个watchdog 进程, 后缀代表CPU 号. 此进程用于维护每个CPU 的全局变量watchdog_touch_ts, 然后再建立一个定时器用于检测这个全局变量是
否更新了, 具体实现在kernel/watchdog.c 代码中.

static void watchdog_prepare_cpu(int cpu)
{
struct hrtimer *hrtimer = &per_cpu(watchdog_hrtimer, cpu);
WARN_ON(per_cpu(softlockup_watchdog, cpu));
hrtimer_init(hrtimer, CLOCK_MONOTONIC, HRTIMER_MODE_REL);
hrtimer->function = watchdog_timer_fn;
}
这类问题的现象如图1, 图1 所示一样. 在图3-4 中的现象是soft lockup. 从下
面的信息来看, 有当前CPU 正在运行的进程swapper/0:1, 出错的是CPU1, 同时还打印
超时的时间, 即已经超过多久没有更新watchdog 的值了, 而接着就是出错CPU 的调用栈.



                                                               图 1    softlookup 出错类型



           图 2   hardlookup 出错类型

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值