lscpu
运行lscpu
命令,输出中,"CPU(s)"是逻辑CPU数,"Socket(s)"是物理插槽数,"Core(s) per socket"是每颗CPU的核数,"Thread(s) per core"是每个核的线程数,一般是1或者2,后者叫做“超线程”。
逻辑CPU数是物理插槽数、核数和每核线程数3者的乘积。
平常所说的“CPU个数”,就是指逻辑CPU数,也就是"CPU(s)"的值。
cat /proc/cpuinfo
下面是一个实例:
processor : 0
vendor_id : GenuineIntel
cpu family : 6
model : 26
model name : Intel(R) Xeon(R) CPU X5550 @ 2.67GHz
stepping : 5
cpu MHz : 2666.851
cache size : 8192 KB
physical id : 0
siblings : 8
core id : 0 cpu cores : 4
apicid : 0
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 syscall nx rdtscp lm constant_tsc ida nonstop_tsc pni monitor ds_cpl vmx est tm2 cx16 xtpr popcnt lahf_lm
bogomips : 5333.70
clflush size : 64
cache_alignment : 64
address sizes : 40 bits physical, 48 bits virtual
power management: [8]
processor : 1
...
cpu cores : 4
...
processor : n ... cpu cores : 4 ... processor : 15 ... cpu cores : 4 ...
【所以CPU(processor)的数量是最后一个cpu标号加1,每颗CPU的核数是其中"cpu cores"的值,这是一个有16颗4核CPU的服务器】
上面的结论错误,阅读cpuinfo的正确方法是:
-
通过physical id确定有多少个物理CPU(即多少个CPU插槽socket,或者叫物理封装);
-
通过cpu cores确定某一个物理CPU有多少核;
-
如果siblings数量与cpu core一致,说明没有超线程。反之如果siblings的值大于cpu cores,说明开启了超线程(hyperthreading),开启超线程的另一个证据是不同的processor拥有同样的core id,这一点可以用"cat /proc/cpuinfo|grep "core id"确认;
-
processor的数量应该等于物理CPU的数量与siblings的乘积;
根据以上方法分析,上面的服务器有两颗4核CPU(即两个CPU插槽,每个插槽上的CPU有4个核),开启了超线程,共有16个逻辑CPU。
参考Understanding Linux /proc/cpuinfo
相关资料
-
查看CPU是32位还是64的方法是:cpuinfo的flags参数中是否有"lm"这一项,lm表示long mode,可以用"cat /proc/cpuinfo|grep "\<lm>"查询;
-
CPU超线程技术可以参考Hyper-threading。
另:用free指令查看系统内存大小
用free -g以GB为单位显示内存大小,另外可以通过查看cat /proc/meminfo指令结果第一行的方法确定物理内存大小;