【发布时间】: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