普通网友 2026-02-26 19:05 采纳率: 98.7%
浏览 0
已采纳

Kunpeng 920 7260服务器启动后无法识别全部72核CPU,如何排查?

Kunpeng 920 7260标称72核,但系统仅识别部分CPU(如36或48核),常见原因包括:BIOS中CPU核心数配置被限制(如误设为“Half Core”或启用Core Disable);UEFI固件版本过旧,存在CPU拓扑识别缺陷;操作系统内核未启用ARM64 SMT/ACPI多核支持(需确认CONFIG_ARM64_ACPI=y、CONFIG_HOTPLUG_CPU=y);或启动参数中存在isolcpus、maxcpus等限制项。排查应按序进行:① 进BIOS确认“Processor Configuration”→“Active Cores”设为“All”且SMT开启;② 升级至华为官方推荐的最新iBMC/BMC及UEFI固件(如V2.12+);③ 检查dmesg | grep -i "acpi\|smp\|cpu"定位初始化阶段报错;④ 验证/boot/grub2/grub.cfg中kernel行无maxcpus=xx等约束;⑤ 使用lscpu、cat /proc/cpuinfo核对逻辑CPU数与拓扑结构。若仍异常,需结合华为eSDK日志工具导出BMC CPU健康状态及ACPI table进行深度分析。
  • 写回答

1条回答 默认 最新

  • 风扇爱好者 2026-02-26 19:05
    关注
    ```html

    一、现象层:系统可见CPU核数与标称规格严重偏离

    Kunpeng 920 7260 是华为基于ARMv8.2-A架构设计的72核(144线程)高性能服务器处理器,但实际部署中常出现 lscpu 显示仅36/48/64个逻辑CPU,/proc/cpuinfoprocessor 编号最大值远低于71,甚至 cat /sys/devices/system/cpu/online 返回 0-35 等截断范围。该现象非随机偶发,具有强环境耦合性——同一物理机在不同固件/内核/启动参数组合下呈现不同识别结果。

    二、配置层:BIOS/UEFI运行时策略直接干预硬件可见性

    • Active Cores 设置陷阱:华为iBMC BIOS中“Processor Configuration → Active Cores”默认可能为“Half Core”(即36核模式)或“Quarter Core”,需手动设为 All
    • SMT开关依赖性:Kunpeng 920 的SMT(Simultaneous Multithreading)开启与否影响ACPI _PXM/CPUPM表生成,关闭SMT可能导致OS仅枚举物理核的一半;
    • Core Disable List:部分定制化BIOS提供按位掩码禁用特定core(如bit0–bit71),若误写入0x0000FFFF则强制屏蔽高32核。

    三、固件层:UEFI/iBMC版本缺陷引发ACPI拓扑解析失败

    固件版本典型问题影响范围修复建议
    iBMC V2.08ACPI MADT表缺失GICR结构,导致secondary CPU无法唤醒所有7260双路机型升级至V2.12+(含补丁KB2023-ACPI-07)
    UEFI V2.05_MAT方法返回错误MPIDR值,ARM64 SMP初始化卡在smp_init()CentOS Stream 9 / EulerOS 22.03 SP1同步更新UEFI与iBMC(版本绑定校验)

    四、内核层:ARM64平台关键配置项缺位导致热插拔失效

    必须验证内核编译配置是否满足以下硬性要求(以 zcat /proc/config.gz | grep -E "(ARM64_ACPI|HOTPLUG_CPU|SMP|IRQCHIP)" 检查):

    CONFIG_ARM64_ACPI=y
    CONFIG_ACPI_GENERIC_GSI=y
    CONFIG_HOTPLUG_CPU=y
    CONFIG_ARM64_SMP_ON_UP=y
    CONFIG_ARM64_ERRATUM_1418040=y   # Kunpeng 920必需erratum补丁
    CONFIG_ARM64_VHE=y                # 启用虚拟化主机扩展(影响GICv3初始化)
    

    五、启动层:GRUB参数隐式限制CPU资源暴露面

    检查 /boot/grub2/grub.cfg 中kernel行是否存在以下高危参数:

    • maxcpus=36 —— 强制限制可激活CPU数量;
    • isolcpus=managed_irq,1-35 —— 即使未启用irqbalance,也可能触发内核early_param跳过后续core初始化;
    • acpi_enforce_resources=lax —— 在ACPI资源冲突时静默忽略CPU设备而非报错,掩盖根本问题。

    六、诊断层:多维度日志交叉验证定位根因

    执行标准化诊断流水线:

    1. dmesg -d | grep -A5 -B5 "ACPI.*CPU\|smp:.*bringup\|GICv3" —— 定位ACPI MADT/GICC解析点及SMP bring-up中断位置;
    2. acpidump -t | grep -A20 "MADT\|SRAT" —— 提取原始ACPI表结构,比对core count字段;
    3. cat /sys/firmware/acpi/table/*/header —— 验证DSDT/SSDT加载完整性;

    七、深度分析层:eSDK工具链驱动的硬件可信验证

    graph TD A[运行华为eSDK命令] --> B[eSDK-cli --cmd get_bmc_cpu_health] A --> C[eSDK-cli --cmd dump_acpi_tables --output acpi_dump.bin] B --> D[解析CPU状态寄存器:Core Status Map / Thermal Throttle Flag] C --> E[使用iasl -d acpi_dump.bin反编译MADT/SRAT] D & E --> F[比对BMC报告的active core mask与ACPI _MAT返回的MPIDR列表]

    八、规避与加固:生产环境最小化风险实践

    • 建立固件基线清单:所有Kunpeng 920节点统一采用iBMC V2.15 + UEFI V2.18(2024Q2 LTS);
    • 内核启动参数白名单机制:maxcpusisolcpus 列入CI/CD构建阶段静态扫描规则;
    • 部署Ansible Playbook自动校验:assert: { that: \"ansible_processor_cores == 72\" } 并集成eSDK健康检查模块;
    • ACPI表哈希固化:首次部署后计算 sha256sum /sys/firmware/acpi/tables/MADT 写入CMDB,变更告警。

    九、延伸思考:ARM64 CPU热插拔与NUMA拓扑的协同演进

    值得注意的是,Kunpeng 920 7260 的72核并非单die设计,而是由4×18核chiplet通过HCCN总线互联。当SRAT表中Proximity Domain字段缺失或重复时,Linux内核会退化为flat NUMA模型,进而触发topology_parse_cpu_capacity()失败,最终抑制部分cluster的CPU上线。此问题在启用CONFIG_ARM64_AMU_EXTN=y(Activity Monitor Unit)后更为显著,需结合arm64.cpu-map=firmware启动参数显式声明拓扑来源。

    十、生态兼容层:主流发行版适配现状与补丁追踪

    截至2024年,各发行版对Kunpeng 920 7260全核支持状态如下:

    • EulerOS 22.03 SP3:已合入华为提交的arm64: acpi: fix MADT GICC UID overflow for >64 cores(commit 8a3f1c2);
    • OpenEuler 24.03 LTS:默认启用CONFIG_ARM64_ACPI_PPTT=y,支持芯片级cache topology发现;
    • Rocky Linux 9.4:需手动打补丁0001-arm64-acpi-add-Kunpeng-920-7260-core-mask-hint.patch
    • Ubuntu 24.04 LTS:5.15.0-105内核起内置kunpeng-cpufreq驱动,但需配合iBMC V2.13+才能解锁全部72核功耗管理策略。
    ```
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 已采纳回答 2月27日
  • 创建了问题 2月26日