2012-03-26 155 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符号。附近有一个洞。插入一个引脚来触发中断。如果您的内核是为了支持它而构建的,则会将内核恐慌跟踪转储到控制台,然后重新引导系统。

这可以发生得非常快。因此,如果您没有连接控制台来将输出保存到文件中,则可能看起来只是重新启动。