我正在开发一个涉及 kexec 的项目。我让它在我们的一些硬件平台上运行。在一个平台上,我在 SMP 设置期间突然重新启动且没有紧急转储:
[ 25.219028] smpboot: CPU0: AMD EPYC 7402 24-Core Processor (family: 0x17, model: 0x31, stepping: 0x0)
[ 25.228083] Performance Events: Fam17h+ core perfctr, AMD PMU driver.
[ 25.237997] ... version: 0
[ 25.247996] ... bit width: 48
[ 25.257996] ... generic registers: 6
[ 25.267996] ... value mask: 0000ffffffffffff
[ 25.277996] ... max period: 00007fffffffffff
[ 25.287996] ... fixed-purpose events: 0
[ 25.297996] ... event mask: 000000000000003f
[ 25.308059] rcu: Hierarchical SRCU implementation.
[ 25.318046] NMI watchdog: Enabled. Permanently consumes one hw-PMU counter.
[ 25.328283] smp: Bringing up secondary CPUs ...
[ 25.335543] x86: Booting SMP configuration:
��
<fans suddenly get loud, indicating a reboot>
该平台在正常(即非 kexec)情况下可以正常启动。主内核和 kexec 内核是从相同的代码库构建的,但链接方式不同 - 这不太可能与该问题相关,因为我已经在 Intel 平台上对此进行了测试。
Kexec命令行:
[ 0.000000] Command line: elfcorehdr=0x86000000 ro panic=5 console=ttyS0,9600 loglevel=8 numifbs=0 nf_conntrack.acct=1 nmi_watchdog=1 profile=0 root=/dev/ram0 initrd=/crashfs.gz libata.force=disable
BIOS - 可能相关,因为一种启动有 BIOS,另一种启动没有 BIOS:
Version 2.20.1275. Copyright (C) 2022 American Megatrends, Inc.
BIOS V1.05(08/26/2022)
我已经追踪到wakeup_secondary_cpu_via_init
了arch/x86/kernel/smpboot.c
。我得到的最后一个输出就在第一个输出之前apic_icr_write
。
我不知道从哪里开始调试这个。是否可能是 NMI 看门狗强制重新启动,因为唯一可用的核心因某种原因挂起?似乎不太可能,因为挂起的核心无法执行 NMI 检查。