现在我遇到了关于Linux NMI看门狗的问题。 我想使用Linux NMI看门狗来检测和恢复操作系统挂起。 所以我给grub.cfg加上“nmi_watchdog = 1”。 然后检查/ proc / interrupt,每秒触发NMI。 但是当我加载死锁模块(双重获取螺旋锁)后,系统完全挂起,没有任何事情发生(从不恐慌!)。 它看起来像纳米看门狗没有工作!
然后我读了Documantation / nmi_watchdog.txt,它说:
请注意,使用本地APIC时,NMI产生的中断频率取决于系统负载。 当地APIC NMI看门狗,缺乏更好的来源,使用“ 周期未定 ”事件。
什么是“无循环 ”事件?
它补充说
但是如果你的系统locking在“hlt”处理器指令之外的任何地方,那么看门狗将很快触发,因为每个时钟周期都会发生“无周期”事件…如果它locking在“hlt”好运 – 事件不会发生,看门狗也不会触发。
看来如果处理器执行“hlt”指令,看门狗不会触发,然后在“ Intel 64和IA-32架构软件开发人员手册 ”中的“hlt”中进行search,其描述如下:
停止指令执行并将处理器置于HALT状态。 启用的中断(包括NMI和SMI),debuggingexception,BINIT#信号,INIT#信号或RESET#信号将恢复执行。
然后我输了
我的问题是:
我的操作系统是Ubuntn 10.04 LTS,Linux-2.6.32.21,CPU奔腾4双核3.20 GHz。
我没有阅读关于nmi看门狗的全部源代码(没时间),如果我不明白nmi看门狗是如何工作的,我想用性能监视计数器中断和处理器间中断 (由APIC提供)来发送NMI nmi看门狗
有人能帮我吗? 谢谢。
据我所知,nmi_watchdog只会触发不可中断的挂起。 我通过google找到了一个代码示例: http : //oslearn.blogspot.in/2011/04/use-nmi-watchdog.html
如果您的死锁不是不可中断的,您可以尝试启用sysRq来触发某些跟踪(Alt-printscreen-t)或崩溃(Alt-printscreen-c)以获取更多信息。
答案取决于你的硬件。
不可屏蔽的中断(NMI)可以通过两种方式触发:1)当内核达到不能被其他方法中断的暂停状态时; 2)通过硬件 – 使用NMI按钮。
例如,在一些戴尔服务器的正面,您会看到一个内部有锯齿形的小圆圈。 这是NMI符号。 附近有一个洞。 插入一个引脚来触发中断。 如果您的内核是为支持它而构建的,则会将内核恐慌跟踪转储到控制台,然后重新启动系统。
这可能发生得非常快。 因此,如果您没有连接控制台来将输出保存到文件,则可能看起来只是重新启动。