Jul
12
[转]解决系统CPU个数识别不正确的问题
目前服务器上配置的CPU是越来越多,并且,单个物理CPU中也包括了更多的核心。以Intel E5504为例,一个CPU就拥有4个核心,并发的速度得到明显的提高。其中,部分CPU还同时拥有超线程技术,这样,系统中识别出来的核心数量会更多。要让系统正确的识别出所有可用的CPU核心,系统使用Linux kernel是个关键,例如使用smp或largesmp,打开kernel编译时的支持等。当然,kernel越新,兼容性通常会更好。
但我接下来要举出的案例,确与kernel关系不大,因此该kernel(红旗 DC Server 5.0 SP3)已经被确认可支持多大64个物理core,而且支持双核、四核、六核等架构。该问题的解决过程,由zhengyiyun#redflag-linux.com提供,我觉得相当值得借鉴。
一、故障现象
服务器型号为:浪潮NF5220
板载一颗Intel E5504的CPU,但安装红旗 DC Server 5.0 SP3后,发现从系统中只能看到2个CPU:
二、故障处理
1、使用dmidecode分析cpu信息
-A42表示显示grep匹配后,紧跟下面42行的信息(After),可根据dmidecode命令显示的具体信息内容输入。
从该命令中,发现有如下信息:
(1)共中第三个是Status: Populated, Enabled这表明只认到一个CPU, 其它三个认到了,但是没有启用。其它三个是Status: Populated, Disabled By User
(2)CPU信息:
提示的很清楚,被BIOS禁用,还有一个是被User禁用。当然,Bios禁用,也有可能是主板问题,比如接口故障造成这种现象。
(3)查看dmesg内容,dmesg里面也是显示只激活了2个CPU: “Brought up 2 CPUs” 。
二、解决故障
查看BIOS里的设置。
在bios中cpu配置中存在active Processor cores 2,将其改为active Processor cores all。
改完BIOS之后,保存。建议断电休息一分钟(把整个机器断电一分钟以上)。
重新启动服务器后,查看cpu显示正常,问题解决。
※ 当然,这仅是一个关于CPU的案例,我只是希望通过这个案例告诉大家,类似的硬件识别问题,除怀疑Linux kernel不支持该硬件外,还需要考虑物理硬件本身的配置、设置等。不同的操作系统,例如Windows、Linux,其识别的结果也可能存在差异的,但不妨可作为考虑信息之一。
三、关于cpuinfo
使用cat命令查看/proc/cpuinfo,可得到当前服务器上CPU的物理信息。由于从top等命令中,是无法识别物理CPU数量、核心数量、超线程数量等准确的信息的,因此请特别留意一下。
我觉得上面的内容还是没有说清楚,更详细的内容,建议看看[转]Linux中确定CPU的情况。
但我接下来要举出的案例,确与kernel关系不大,因此该kernel(红旗 DC Server 5.0 SP3)已经被确认可支持多大64个物理core,而且支持双核、四核、六核等架构。该问题的解决过程,由zhengyiyun#redflag-linux.com提供,我觉得相当值得借鉴。
一、故障现象
服务器型号为:浪潮NF5220
板载一颗Intel E5504的CPU,但安装红旗 DC Server 5.0 SP3后,发现从系统中只能看到2个CPU:
引用
# cat /proc/cpuinfo|grep processor
processor : 0
processor : 1
processor : 0
processor : 1
二、故障处理
1、使用dmidecode分析cpu信息
# dmidecode |grep -A42 "Processor"|more
-A42表示显示grep匹配后,紧跟下面42行的信息(After),可根据dmidecode命令显示的具体信息内容输入。
从该命令中,发现有如下信息:
(1)共中第三个是Status: Populated, Enabled这表明只认到一个CPU, 其它三个认到了,但是没有启用。其它三个是Status: Populated, Disabled By User
(2)CPU信息:
引用
Version:Intel(R) Xeon(R) CPU E5504 @ 2.00GHz
......
Status: Populated, Disabled By BIOS
......
Status: Populated, Disabled By BIOS
提示的很清楚,被BIOS禁用,还有一个是被User禁用。当然,Bios禁用,也有可能是主板问题,比如接口故障造成这种现象。
(3)查看dmesg内容,dmesg里面也是显示只激活了2个CPU: “Brought up 2 CPUs” 。
二、解决故障
查看BIOS里的设置。
在bios中cpu配置中存在active Processor cores 2,将其改为active Processor cores all。
改完BIOS之后,保存。建议断电休息一分钟(把整个机器断电一分钟以上)。
重新启动服务器后,查看cpu显示正常,问题解决。
※ 当然,这仅是一个关于CPU的案例,我只是希望通过这个案例告诉大家,类似的硬件识别问题,除怀疑Linux kernel不支持该硬件外,还需要考虑物理硬件本身的配置、设置等。不同的操作系统,例如Windows、Linux,其识别的结果也可能存在差异的,但不妨可作为考虑信息之一。
三、关于cpuinfo
使用cat命令查看/proc/cpuinfo,可得到当前服务器上CPU的物理信息。由于从top等命令中,是无法识别物理CPU数量、核心数量、超线程数量等准确的信息的,因此请特别留意一下。
引用
processor : 0 ←系统显示的逻辑CPU数量,包括超线程、多核等复合后的结果
vendor_id : GenuineIntel
cpu family : 6
model : 26
model name : Intel(R) Xeon(R) CPU E5504 @ 2.00GHz
stepping : 5
cpu MHz : 2000.455
cache size : 4096 KB
physical id : 1 ←这是板载物理实际CPU的ID号,即实际插入主板socket的CPU编号(从外面看到的)
siblings : 2 ←这是板载物理CPU中逻辑CPU的数量,如果多核的核心支持超线程,则为核心*2
core id : 8 ←这是每个核心的ID,多核的编号
cpu cores : 2 ←这是单个板载物理CPU中包含的核心个数,多核指的就是这个数量(从外面看不到的)
fdiv_bug : no
hlt_bug : no
f00f_bug : no
coma_bug : no
fpu : yes
fpu_exception : yes
cpuid level : 11
wp : yes
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe nx rdtscp lm constant_tsc pni monitor ds_cpl est tm2 xtpr popcnt
bogomips : 4002.74
vendor_id : GenuineIntel
cpu family : 6
model : 26
model name : Intel(R) Xeon(R) CPU E5504 @ 2.00GHz
stepping : 5
cpu MHz : 2000.455
cache size : 4096 KB
physical id : 1 ←这是板载物理实际CPU的ID号,即实际插入主板socket的CPU编号(从外面看到的)
siblings : 2 ←这是板载物理CPU中逻辑CPU的数量,如果多核的核心支持超线程,则为核心*2
core id : 8 ←这是每个核心的ID,多核的编号
cpu cores : 2 ←这是单个板载物理CPU中包含的核心个数,多核指的就是这个数量(从外面看不到的)
fdiv_bug : no
hlt_bug : no
f00f_bug : no
coma_bug : no
fpu : yes
fpu_exception : yes
cpuid level : 11
wp : yes
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe nx rdtscp lm constant_tsc pni monitor ds_cpl est tm2 xtpr popcnt
bogomips : 4002.74
我觉得上面的内容还是没有说清楚,更详细的内容,建议看看[转]Linux中确定CPU的情况。