虚拟机死锁检测

NMI Watchdog是一种专门用于检测Linux出现hardlockup(硬死锁)的机制。NMI Watchdog通过产生NMI(Non-Maskable Interrupt)不可屏蔽中断来中断代码执行,即便在Linux内核关闭中断的代码区间也能生效,从而确保系统能够检测到硬死锁现象。在ARM架构上,由于原生不支持NMI中断,因此采用了基于中断优先级的Pseudo-NMI技术,将PMI(Performance Monitoring Interrupt)中断配置为模拟NMI中断,实现了NMI Watchdog的功能,也称为PMU Watchdog。

虚拟机环境中实现不可屏蔽中断的监控,可以防止虚拟机陷入死循环后不能跳出,导致无法恢复管理。

当前使用鲲鹏920系列处理器的服务器上的虚拟机已经验证支持该特性,采用openEuler 22.03 LTS SP2及以上版本,配合Libvirt 6.2.0及以上版本和QEMU 6.2.0及以上版本使用。

使用约束

操作步骤

针对Arm架构虚拟机配置NMI Watchdog的操作步骤如下:

  1. 在虚拟机的引导配置文件grub.cfg中添加如下参数:nmi_watchdog=1 pmu_nmi_enable hardlockup_cpu_freq=auto irqchip.gicv3_pseudo_nmi=1 disable_sdei_nmi_watchdog hardlockup_enable=1
  2. 检查虚拟机内部PMU Watchdog是否加载成功,如果加载成功,内核dmesg日志打印类似如下内容
[2.1173222] NMI watchdog: CPU0 freq probed as 2399999942 HZ.1 

3.测试NMI Watchdog hardlockup(硬死锁)检测机制是否有效:安装hardlockup.ko文件,系统卡死,如果检测机制有效,系统会自动重启