【问题标题】:About Linux NMI watchdog关于 Linux NMI 看门狗
【发布时间】:2012-04-09 14:12:43
【问题描述】:

现在我遇到一个关于 Linux NMI Watchdog 的问题。 我想使用 Linux NMI 看门狗来检测和恢复操作系统挂起。因此,我将“nmi_watchdog=1”添加到 grub.cfg 中。然后检查/proc/interrupt,NMI是每秒被触发的。但是在我加载一个带有死锁的模块(双获取自旋锁)后,系统完全挂起,什么也没有发生(永远不要恐慌!)。看起来 NMI 看门狗不起作用!

然后我阅读了 Documentation/nmi_watchdog.txt,它说:

请注意,使用本地 APIC 时,NMI 中断的频率 它生成,取决于系统负载。本地 APIC NMI 看门狗, 缺少更好的来源,使用“cycles unhalted”事件。

什么是“cycles unhalted”事件?

它补充说:

但是如果您的系统锁定在“hlt”处理器以外的任何设备上 指令,看门狗将很快触发“周期 unhalted”事件将在每个时钟滴答声中发生......如果它锁定在 “hlt”,那你就倒霉了——事件根本不会发生 并且看门狗不会触发。

如果处理器执行“hlt”指令,似乎看门狗不会触发,然后我在“Intel 64 and IA-32 Architectures Software Developer's Manual, Volumn 2A”中搜索“hlt”,它描述如下:

停止指令执行并将处理器置于 HALT 状态。 启用的中断(包括 NMI 和 SMI)、调试异常、 BINIT# 信号、INIT# 信号或 RESET# 信号将恢复 执行。

那我就迷路了……

我的问题是:

  • Linux NMI 看门狗如何工作?
  • 触发了 NMI?

我的操作系统是 Ubuntu 10.04 LTS,Linux-2.6.32.21,CPU Pentium 4 Dual-core 3.20 GHz。

我没有阅读有关 NMI 看门狗的完整源代码(没有时间),如果我不明白 NMI 看门狗的工作原理,我想使用 性能监控计数器中断inter - 处理器中断(由 APIC 提供)发送 NMI 而不是 NMI 看门狗。

【问题讨论】:

  • 好东西 NMI 看门狗,将其添加到我的交易工具中
  • Linux内核实现watchdog_nmi_enable().

标签: linux performancecounter watchdog apic


【解决方案1】:

据我所知,nmi_watchdog 只会在不可中断挂起时触发。我通过google找到了一个代码示例:http://oslearn.blogspot.in/2011/04/use-nmi-watchdog.html

如果您的死锁不是不可中断的,您可以尝试启用 sysRq 以触发一些跟踪 (Alt-printscreen-t) 或崩溃 (Alt-printscreen-c) 以获取更多信息。

【讨论】:

  • 谢谢。我已经阅读了有关 nmi_watchdog 的所有资料(在 linux-2.6.32 中),现在我知道它是如何工作的 :)
  • 原始链接中的代码是reposted on kernelnewbies。它仅适用于单处理器系统。该线程中的 reply 包含适用于多核和 SMP 系统的代码。
  • 链接后面的博客是非公开的(不再)“这个博客只对受邀的读者开放”
【解决方案2】:

答案取决于您的硬件。

不可屏蔽中断 (NMI) 可以通过 2 种方式触发:1) 当内核达到无法被其他方法中断的暂停状态时,以及 2) 由硬件 - 使用 NMI 按钮。

例如,在某些戴尔服务器的正面,您会看到一个小圆圈,里面有一条锯齿线。这是 NMI 符号。附近有个洞。插入一个引脚来触发中断。如果您的内核是为支持它而构建的,这会将内核恐慌跟踪转储到控制台,然后重新启动系统。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-22
    • 2013-09-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多