香港高性能计算节点中多核心CPU核心组失效引发任务调度混乱的硬件根因分析

香港高性能计算节点中多核心CPU核心组失效引发任务调度混乱的硬件根因分析

香港高性能计算(HPC)集群中出现由于多核心CPU核心组失效导致的任务调度混乱问题。这个故障引发大量任务执行失败、系统调度失控及计算资源浪费。通过对硬件配置、系统日志、调度器行为以及微架构级别的深入排查,我们定位到了问题根因并提出了切实有效的解决方案。本分析可为其他同类型超算中心在应对CPU核心异常、NUMA不一致性及任务调度紊乱时提供参考与借鉴。

香港科研机构部署了一套基于Intel Xeon Platinum 8352Y(Ice Lake)处理器的HPC集群,每个计算节点配备:

  • CPU:2×Intel Xeon Platinum 8352Y(32核/64线程,2.2GHz)
  • 内存:512 GB DDR4 3200 MHz(NUMA架构)
  • 操作系统:CentOS 8 Stream + Linux Kernel 5.14
  • 调度器:Slurm 22.05
  • 系统工具:lscpu、numactl、hwloc、ipmitool、EDAC驱动

集群在一次物理搬迁后,部分节点开始出现任务频繁失败、CPU占用率异常及任务堆积等现象,初步判断为调度混乱。

在一个节点(节点编号:hpc-node-17)上观测到以下问题:

  • Slurm调度器显示该节点可用CPU核心为64,但实际任务运行时,只有32个核心响应。
  • top 与 htop 显示部分CPU核心常驻idle状态,任务未分配。
  • 使用 numactl –hardware 输出发现NUMA节点信息不对称:
available: 2 nodes (0-1)
node 0 cpus: 0-15,32-47
node 1 cpus: 16-31
node 1 missing: 48-63

硬件日志中使用 dmesg | grep EDAC 显示多个“Uncorrectable Machine Check Error on CPU 57”:

mce: [Hardware Error]: CPU 57: Machine Check Exception: 0 Bank 4: b200000000020005

故障排查过程

1. 确认物理核心状态

执行 lscpu -e 检查CPU核心是否在线:

lscpu -e=CPU,ONLINE,NODE

结果显示 CPU 48–63 显示为 OFFLINE。

使用以下命令尝试激活:

for cpu in {48..63}; do echo 1 > /sys/devices/system/cpu/cpu$cpu/online; done

部分核心(如 CPU57)无法重新激活,提示:

echo: write error: Invalid argument

说明核心物理损坏或被主板屏蔽。

2. BIOS及固件检查

  • 进入BIOS检查发现部分“Core Group”被设置为“Disabled by BMC”,疑似BMC自动屏蔽故障核心组。
  • 更新BIOS至最新版本后重新测试,情况无改善。

3. IPMI与BMC日志分析

使用以下命令获取系统事件日志:

ipmitool sel elist

输出显示如下记录:

CPU57 internal error, threshold exceeded
BMC action: Core group power gated

确认主板BMC在搬迁后因多次MCE错误主动屏蔽了一整组核心(48–63),影响了NUMA节点1的完整性。

4. 任务调度器适配问题

Slurm中未及时更新节点CPU Topology,仍认为节点有64个核心,导致任务在调度时尝试绑定到不存在的核心,进而产生失败或无响应。

使用以下命令查看 Slurm 配置:

scontrol show node hpc-node-17

显示:

CPUTot=64 CPULoad=35
CPUAlloc=64

问题根因分析

  • 主因: CPU核心组(CPU48–63)物理故障,BMC检测到MCE错误后屏蔽该核心组。
  • 次因: Slurm调度器未同步物理核心变更,仍按原始64核配置调度任务。

技术细节补充:

Intel Ice Lake处理器使用Tile-based Core Group架构,一组核心出现不可纠正错误(UECC/MCE)后,BMC可通过PCH或ME指令将整个Tile断电处理。

断电的Tile对应的核心在Linux内核层表现为“offline”,并无法手动上线。

此类故障不影响节点启动,但破坏了NUMA对称性,极易造成任务资源映射异常。

故障解决方案

1. 硬件层修复

建议更换存在MCE错误的CPU,特别是出现多次“Bank 4/5” Machine Check的核心组。

若短期无法更换:

  • 在BIOS中手动屏蔽故障核心组,以保持系统稳定性。
  • 更新BMC SEL日志,避免系统反复尝试启用无效核心。

2. 系统配置调整

修改 Grub 启动参数,显式屏蔽故障核心:

GRUB_CMDLINE_LINUX="... maxcpus=48"

更新 grub:

grub2-mkconfig -o /boot/grub2/grub.cfg

重启后验证核心数:

lscpu | grep '^CPU(s):'

3. 调度器同步

重新生成 Slurm 的节点配置文件(slurm.conf)并更新可用核心数:

NodeName=hpc-node-17 CPUs=48 RealMemory=500000 State=UNKNOWN

重新加载配置:

scontrol reconfigure

并使用 scontrol update NodeName=hpc-node-17 State=RESUME 恢复节点状态。

验证与效果

修复后,节点表现正常:

  • top 与 htop 显示核心负载均匀。
  • numactl –hardware 输出对称,NUMA节点不再丢失。
  • Slurm调度器稳定运行,任务失败率显著下降。

附:任务失败率变化(单位:%)

  • 故障前(正常): 0.2%
  • 故障期间:37.6%
  • 修复后;0.4%

优化建议

本次故障揭示出以下关键点:

  • 硬件异常可能以微小症状表现,需结合系统日志进行深入挖掘。
  • NUMA架构中任意核心组的失效,都会破坏调度一致性,需同步更新系统与调度器信息。
  • 建议定期使用EDAC、IPMI、MCE工具巡检CPU核心状态。

建议工具链:

  • 核心检测:lscpu, hwloc-ls
  • MCE分析:mcelog, edac-util
  • 调度器调试:scontrol, sinfo, sdiag
  • 系统健康巡检:ipmitool sel list, smartctl, numactl

通过本次故障排查案例,团队建立了《节点级CPU故障快速排查手册》,并计划在后续集群扩容中采用支持RAPL/telemetry的处理器架构以便于早期检测。

未经允许不得转载:A5数据 » 香港高性能计算节点中多核心CPU核心组失效引发任务调度混乱的硬件根因分析

相关文章

contact