[内核文档系列] NMI 看门狗

[内核文档系列]

NMI 看门狗 

 

秦白衣

qinchenggang@sict.ac.cn

 

[X86X86-64体系结构均支持NMI看门狗]

 

         你的系统是不是会经常被锁住(Lock up)?直至解锁,系统不再响应键盘?你希望帮助我们解决类似的问题吗?如果你对所有的问题都回答“yes”,那么此文档正是为你而写。

         在很多X86/X86-64结构的硬件上,我们都可以使用一种被称为“看门狗NMI中断”的机制。(NMINon Maskable Interrupt. 这种中断即使在系统被锁住时,也能被响应)。这种机制可以被用来调试内核锁住现象。通过周期性地执行NMI中断,内核能够监测到是否有CPU被锁住。当有处理器被锁住时,打印调试信息。

         为了使用NMI看门狗,首先需要在内核中支持APIC。对于SMP内核,APIC的相关支持已自动地被编译进内核。对于UP内核,需要在内核配置中使能CONFIG_X86_UP_APIC (Processor type and features -> Local APIC support on uniprocessors) CONFIG_X86_UP_IOAPIC (Processor type and features -> IO-APIC support on uniprocessors)。在没有IO-APIC的单处理器系统中,配置CONFIG_X86_UP_APIC。在有IO-APIC的单处理器系统中,则需配置CONFIG_X86_UP_IOAPIC[注意:某些与内核调试相关选项可能会禁用NMI看门狗。如:Kernel Stack MeterKernel Tracer]

         对于X86-64系统,APIC已被编进内核。

         使用本地APICnmi_watchdog=2)时,需要占用第一个性能寄存器,因而此寄存器不能再被另作它用(如高精度的性能分析)。Oprofileperfctr的驱动已自动地禁用了本地APICNMI看门狗。

         可以通过启动参数“nmi_watchdog=N”使能NMI看门狗。即在lilo.conf的相关项中添加如下语句:

         append=”nmi_watchdog=1”

         对于具有IO-APICSMPUP机器,设置nmi_watchdog=1。对于没有IO-APICUP机器,设置nmi_watchdog=2,但仅在某些处理器上可以起作用。如果有疑问,在用nmi_watchdog=1启动后,再查看/proc/interrupts文件中的NMI项,如果该项为0,那么便用nmi_watchdog=2重新启动,并再次检查NMI项。如果还是0,问题就比较严重了,你的处理器很可能不支持NMI

         “锁住(Lockup)”是指如下的情况:如果系统中的任何一个CPU不能处理周期性的本地时钟中断,并持续5秒钟以上,那么NMI的处理函数将产生一个oops并杀死当前进程。这是一种“可控崩溃”(Controlled Crash,所谓可控,是指发生崩溃时,能够输出内核信息),可以用此机制来调试“锁住”现象。那么,无论什么时候发生“锁住”,5秒钟之后都会自动地输出oops。如果内核没有输出信息,说明此时发生的崩溃过于严重(如:hardware-wise),以至于NMI中断都无法被响应,或者此次崩溃使得内核无法打印信息。

         在使用本地APIC时要注意,NMI中断被触发的频率依赖于系统的当前负载。由于缺乏更好的时钟源,本地APIC中的NMI看门狗使用的是“有效周期(Cycle unhalted,这个词的翻译似乎不太确切,如果某位朋友有更佳的建议,请告知在下。)”事件。也许你已经猜到了,当CPU处于halted(空等)状态时,该时钟是不计数的。处理器处于空闲状态的时候,常出现这样的情况。如果你的系统在被锁住时,执行的不是hlt指令,看门狗中断很快就会被触发,因为每个时钟周期都会发生“有效周期”事件。如果不幸,处理器在被锁住时,执行的恰是“hlt”指令,那么“有效周期”事件永远都不会发生,看门狗自然也不会被触发。这是本地APIC看门狗的缺陷,在倒霉的时候,永远不会进行时钟计数。而I/O APIC中的看门狗由于采用外部时钟进行驱动,便不存在这个缺陷。但是,它的NMI频率非常高,会显著地影响系统的性能。

         X86nmi_watchdog在默认情况下是禁用的,因此你需要在系统启动的时候使能它。

         在系统运行期间,可以禁用NMI看门狗,只要向文件“/proc/sys/kernel/nmi_watchdog”中写“0”即可。向该文件写“1”,将重新使能看门狗。即使如此,你仍然需要在启动时使用参数“nmi_watchdog=”。

         注意:在2.4.2-ac18之前的内核中,X86 SMP平台会无条件地使能NMI-oopser

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 件错误 这是一个内核错误,指的是NMI看门狗检测到了一个软件错误。NMI看门狗是一种硬件机制,用于检测系统是否出现了死锁或其他严重问题。当NMI看门狗检测到问题时,它会向内核发送一个NMI中断信号,以便内核可以采取适当的措施来解决问题。这个错误表明,NMI看门狗检测到了一个软件错误,可能是由于内核代码中的一个bug引起的。 ### 回答2: 首先,kernel:nmi watchdog: bug: soft是Linux系统中可能出现的一个错误报告。 具体来说,它可能是由于软件故障引起的错误,该故障导致系统随机崩溃或死锁。 在Linux系统中,NMI(非可屏蔽中断)触发器可用于检测系统中的故障或错误。 watchdog则是一种硬件或软件机制,它可以用于监视系统的状态并在出现故障或意外情况时采取措施,例如重启系统。 当软件产生,无法被处理时,NMI watchdog就会进入操作系统以检查问题。 当软件出现问题而无法被处理时,软件错误导致的软件错误会触发此错误报告。这导致系统崩溃或死锁,从而需要重新启动以恢复正常运行。 要解决此问题,可以尝试更新内核以修复软件错误。还可以使用软件或硬件监视器来检测系统的状态,并在出现故障或意外情况时采取措施,例如重启系统。 使用可靠的硬件和软件并及时进行维护,以确保系统的可用性和稳定性。 总之, kernel:nmi watchdog: bug: soft是Linux系统中由于软件错误导致的错误报告,可能导致系统崩溃或死锁。 要解决此问题,可以更新内核,并使用监视器来检测并处理故障或意外情况。 使用可靠的硬件和软件,并及时执行维护,以确保系统的可用性和稳定性。 ### 回答3: kernel:nmi watchdog: bug: soft 是 Linux 系统中的一个错误信息,通常出现在系统崩溃时。其意思是内核代码遇到了一些未知的问题,导致了系统运行失败。下面我们来详细了解其含义。 首先,kernel (内核)是 Linux 系统中最核心的部分,它负责管理系统资源、调度进程、提供接口等功能。当内核出现问题时,整个系统都会受到影响,甚至会导致系统崩溃。因此,kernel:nmi watchdog: bug: soft 表示系统中的内核代码检测到了一个非属于正常处理范围的错误,需要立即执行相应的故障处理程序来避免进一步的损害。 NMI(Non-Maskable Interrupt,不可屏蔽中断)是一种硬件中断,比普通中断更加紧急和高优先级。当 NMI 发生时,它会中断 CPU 所有的操作,包括正在执行的指令。watchdog(看门狗)是一种硬件或软件的定时器,用于检测系统的运行情况,并在系统出现问题时执行相应的操作。 最后,bug: soft 表示这是一种“软件错误”,也就是说出现了一个在软件设计或开发中出现的错误。这种错误可能与特定的硬件或软件配置有关,也可能是由程序员编写的代码出现了一些逻辑错误。在出现这种错误时,系统可能无法正常运行,需要进行相应的故障排除和修复。 总之,kernel:nmi watchdog: bug: soft 是一种 Linux 系统中的错误信息,通常代表着内核遇到了一些未知的问题,需要执行相应的故障处理程序来避免系统出现进一步损害。需要注意的是,这种错误信息出现时需要及时进行排查和修复,以确保系统的稳定性和可靠性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值