硬锁定会触发重新启动,但不会出现恐慌,也不会出现 kdump

硬锁定会触发重新启动,但不会出现恐慌,也不会出现 kdump

我一直在尝试调试运行 4.14.93-rt 内核时的随机系统冻结。为此,我使用以下配置在内核中启用了锁定检测器:

CONFIG_HAVE_HARDLOCKUP_DETECTOR_PERF=y
CONFIG_LOCKUP_DETECTOR=y
CONFIG_SOFTLOCKUP_DETECTOR=y
CONFIG_HARDLOCKUP_DETECTOR_PERF=y
CONFIG_HARDLOCKUP_CHECK_TIMESTAMP=y
CONFIG_HARDLOCKUP_DETECTOR=y
CONFIG_BOOTPARAM_HARDLOCKUP_PANIC=y
CONFIG_BOOTPARAM_HARDLOCKUP_PANIC_VALUE=1
CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC=y
CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC_VALUE=1

目标是在发生锁定时触发内核恐慌。我还在内核命令行上启用了 NMI 看门狗:

nmi_watchdog=1

利用 kdump/kexec 工具,我已将系统配置为在内核崩溃时生成内核崩溃转储。该机制在手动触发恐慌时起作用:

echo c > /proc/sysrq-trigger

我可以确认在这种情况下系统加载了转储捕获内核。然而,当遇到实际的锁定时,系统只会在看门狗启动时重新启动。据我所知,不会发生内核恐慌。没有切换到转储捕获内核。没有核心转储,日志中没有存储任何内容。

请注意,我启用了所有相关的 sysctl 选项:

kernel.panic = 1
kernel.panic_on_oops = 1
kernel.unknown_nmi_panic = 1
kernel.panic_on_unrecovered_nmi = 1
kernel.panic_on_io_nmi = 1
kernel.softlockup_panic = 1
kernel.hung_task_panic = 1

当我遇到现实生活中的系统冻结时,我会看到这种行为。当在具有高 RT 优先级的所有内核上运行 CPU 占用 while 循环时,也会发生这种情况。我希望这会被检测为挂起任务并导致恐慌。

在这种情况下,什么会导致重新启动而不触发恐慌/kdump 机制?

相关内容