服务器系统下CPU核心数量识别不一致问题详解
服务器系统下CPU核心数量识别不一致问题详解
本文为服务器操作系统常见问题系列的第七篇,主要探讨了在系统中查看到的CPU核心数量与硬件规格不一致的问题。通过深入分析dmesg日志、/proc/cpuinfo文件以及ACPI表等内容,最终定位到BIOS设置中的"CCD Control"参数配置不当,导致系统仅识别出部分CPU核心。
问题描述
服务器配置了2颗AMD EPYC 9654处理器,根据AMD官网信息,单颗处理器应有96个核心,因此两颗处理器合计应有192个核心。然而,在系统中执行lscpu
命令时,却发现仅识别出了128个核心。
图1 CPU规格信息
过程分析
- 系统启动过程分析
通过检查dmesg日志,发现系统在初始化阶段仅识别了128个处理器核心:
[ 1.141827] smpboot: CPU0: AMD EPYC 9654 96-Core Processor (fam: 19, model: 11, stepping: 01)
[ 1.246473] smpboot: Booting Node 0, Processors #1 #2 #3 #4 #5 #6 #7 #8 #9 #10 #11 #12 #13 #14 #15 #16 #17 #18 #19 #20 #21 #22 #23 #24 #25 #26 #27 #28 #29 #30 #31 #32 #33 #34 #35 #36 #37 #38 #39 #40 #41 #42 #43 #44 #45 #46 #47 #48 #49 #50 #51 #52 #53 #54 #55 #56 #57 #58 #59 #60 #61 #62 #63 OK
[ 1.398382] smpboot: Booting Node 1, Processors #64 #65 #66 #67 #68 #69 #70 #71 #72 #73 #74 #75 #76 #77 #78 #79 #80 #81 #82 #83 #84 #85 #86 #87 #88 #89 #90 #91 #92 #93 #94 #95 #96 #97 #98 #99 #100 #101 #102 #103 #104 #105 #106 #107 #108 #109 #110 #111 #112 #113 #114 #115 #116 #117 #118 #119 #120 #121 #122 #123 #124 #125 #126 #127
[ 1.633732] Brought up 128 CPUs
[ 1.633734] smpboot: Max logical packages: 8
[ 1.633740] smpboot: Total of 128 processors activated (614403.45 BogoMIPS)
- CPU信息检查
进一步检查/proc/cpuinfo
和/sys/devices/system/cpu/
目录,确认系统中只有128个处理器核心是在线状态:
# cat /proc/cpuinfo | grep "processor:" | wc -l
128
# cat /sys/devices/system/cpu/present
0-127
# cat /sys/devices/system/cpu/online
0-127
- ACPI表分析
ACPI表是系统启动时由BIOS初始化的重要数据结构,包含了操作系统与硬件之间的关键信息传递机制。其中,MADT(Multiple APIC Description Table)描述了系统中的多个APICs,对于多处理器系统的中断管理至关重要。
通过反编译MADT表,发现仅有128个核心被标记为已启用,这表明BIOS传递给操作系统的APIC表中仅声明了128个可用的处理器核心。
图8 AMD CPU核心,CCX及CCD的关系
- BIOS设置检查
在BIOS配置中,发现"CCD Control"参数被设置为"4 CCDS"。由于AMD EPYC 9654处理器的架构设计中,每个CCD包含16个核心,因此这种设置导致系统仅识别出128个核心(即8个CCD)。
图7 BIOS中CCD Control参数
问题根因
系统识别的CPU核心数来源于BIOS提供的MADT表。在本次问题诊断中,通过反编译MADT表发现只有128个处理器核心被标记为启用状态。由于BIOS中的"CCD Control"选项设置为"4 CCDS",导致限制了CPU核心数量,因此操作系统仅能识别出128个核心。
解决方案
将BIOS中的"CCD Control"选项调整为默认值"Auto"后,重启系统,操作系统成功识别并加载了全部192个CPU核心。
图9 BIOS中CCD Control设置
图10 正确的lscpu信息
总结
在现代服务器架构中,BIOS通过ACPI表向操作系统提供硬件配置信息,其中MADT表中的"Processor Enabled"字段决定了哪些CPU核心能够在操作系统中启用。因此,当遇到硬件识别问题时,应优先检查ACPI表和对应的BIOS设置,确保BIOS提供给操作系统的硬件信息准确无误。这要求系统管理员不仅要熟悉操作系统的硬件识别过程,还要对BIOS的各种设置选项有透彻的了解。