1. 程式人生 > >linux 核心出現CPU 宕機

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 出錯型別