现在我遇到了一个关于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看门狗。
有人能帮助我吗?谢谢。
好东西NMI看门狗,把这个添加到我的贸易工具 – cctan 2012-03-26 03:09:08
Linux内核实现watchdog_nmi_enable()。 – firo 2016-12-26 09:27:30