上一次改zfs代码导致系统死机,sysrq尝试过,由于键盘已经不能用了,所以sysrq用不上了,然后又尝试了Kdump工具,结果仍然是失败了,系统依然死机,而且也没看到发生一次内核转储。所以打算采用以下的NMI watchdog的方法检测死机问题,强制内核转储。
NMI(Not Maskable Interrupt)的意思是:不可屏蔽中断的意思。最开始用在内存校验错误的时候通知CPU,但是最近APIC 也能够定时的产生这种中断。所以操作系统会在一秒钟内发送一定次数的中断,如果NMI监控器没有捕捉到任何中断的时候,就认为这是一次错误,然后就会发生内核崩溃转储。
为了使用NMI ,首先要内核支持。查看Processor type and features -> Local APIC support on uniprocessors CONFIG_X86_UP_APIC。在默认的Ubuntu系统中这个watchdog是不工作的。
同时该watchdog不能够和其他的性能监控工具共同使用,因为watchdog需要使用第一个性能监控寄存器。所以perfctr和oprofile都不能够正常使用。
通过
$ cat /proc/interrupts 可以查看中断的情况
NMI 0 0 说明watchdog没有工作。
开启NMI watchdog需要注意nmi_watchdog=panic,N(N=1,2) 当系统当中使用了IO-APIC 设备的时候,需要将N设置成1,如果没有IO-APIC的时候,那么将N设置成2.
如何判断是否安装了IO-APIC呢?
在proc/interrupts文件中 如果看到很多IO-APIC相关的中断内容,说明使用了IO-APIC设备。
在我的测试当中发现在Ubuntu10.04的virtualbox虚拟机当中开启nmi_watchdog并没有任何效果,但是在实际的机器中是可以使用的,说明虚拟机还无法模拟出一整套的硬件出来。
阅读(10593) | 评论(2) | 转发(1) |