2012-03-26 156 views
22

現在我遇到了一個關於Linux NMI Watchdog的問題。 我想使用Linux NMI看門狗來檢測和恢復操作系統掛起。所以我在grub.cfg中添加「nmi_watchdog = 1」。然後檢查/ proc/interrupt,每秒觸發NMI。但是當我加載死鎖模塊後(雙重獲取螺旋鎖),系統完全掛起,沒有任何事情發生(從不驚慌!)。它看起來像納米看門狗沒有工作!Linux nmi看門狗如何工作?

然後我讀了Documantation/nmi_watchdog.txt,它說:

注意,使用本地APIC時,NMI中斷的頻率 它產生,取決於系統負載。當地的APIC NMI看門狗 缺少更好的來源,使用「週期未定義的」事件。

什麼是「週期未煞車」「事件?

它補充

,但如果您的系統鎖定的任何東西,但「HLT」處理器 指令,看門狗將很快爲「循環 unhalted」事件會發生在每個時鐘週期觸發..如果它鎖定在 「hlt」,那麼你的運氣不好 - 事件根本不會發生, 和看門狗不會觸發

好像是看門狗不會觸發如果處理器執行「HLT」指令,然後我在搜索「HLT」「英特爾64和IA-32架構軟件開發者手冊,Volumn 2A」,它描述爲如下:

停止指令執行並將處理器置於HALT狀態。 啓動中斷(包括NMI和SMI),調試異常,BINIT#信號,INIT#信號或RESET#信號將會執行恢復 執行。

然後,我輸了...

我的問題是:

  • Linux如何NMI監控工作?
  • 誰觸發nmi?

我的操作系統是Ubuntn 10.04 LTS,Linux-2.6.32.21,CPU Pentium 4雙核3.20 GHz。

我沒看過有關NMI看門狗(沒時間),整個源代碼,如果我不明白爲什麼NMI看門狗的工作,我想用性能監控計數器中斷處理器間中斷(是由APIC提供)發送NMI而不是nmi看門狗。

有人能幫助我嗎?謝謝。

+0

好東西NMI看門狗,把這個添加到我的貿易工具 – cctan 2012-03-26 03:09:08

+0

Linux內核實現watchdog_nmi_enable()。 – firo 2016-12-26 09:27:30

回答

4

據我所知,nmi_watchdog只會觸發不可中斷掛起。我發現了一個谷歌代碼示例:http://oslearn.blogspot.in/2011/04/use-nmi-watchdog.html

如果您的死鎖不是非中斷的,您可以嘗試啓用sysRq來觸發一些跟蹤(Alt-printscreen-t)或崩潰(Alt-printscreen-c)以獲取更多信息。

+1

謝謝。我已經閱讀了關於nmi_watchdog的所有源代碼(在linux-2.6.32中),現在我知道它是如何工作的:) – silverbullettt 2012-04-16 10:47:29

+0

blogspot鏈接是開放閱讀的嗎? – Adil 2012-10-19 15:01:08

+0

@Adil它是。我只是再試一次,但現在不工作。 – Johnlcf 2012-11-02 05:20:56

5

答案取決於您的硬件。

可以觸發不可屏蔽的中斷(NMI)有兩種方式:1)當內核達到不能被其他方法中斷的暫停狀態時;以及2)通過硬件 - 使用NMI按鈕。

例如,在某些戴爾服務器的正面,您會看到一個小圓圈,裏面有鋸齒形線條。這是NMI符號。附近有一個洞。插入一個引腳來觸發中斷。如果您的內核是爲了支持它而構建的,則會將內核恐慌跟蹤轉儲到控制檯,然後重新引導系統。

這可以發生得非常快。因此,如果您沒有連接控制檯來將輸出保存到文件中,則可能看起來只是重新啓動。