当前位置: > Linux故障 >

cat /proc/cpuinfo 引发的思考--CPU 物理封装-物理核心-逻辑核心-超线程之间关系

时间:2016-03-29 22:59来源:linux.it.net.cn 作者:IT
CPU的物理封装,一个物理封装使用独立的一个CPU物理插槽,共享电源和风扇;

CPU物理核心:在一个物理封装中封装了多个独立CPU核心,每个CPU核心都有自己独立的完整硬件单元;

CPU逻辑核心:一个CPU物理核心对外表现为多个独立的外部CPU接口,称这样的每个CPU接口为一个逻辑核心,其内部可能共享执行单元和缓存等。

CPU逻辑核心是超线程技术下的产物,如果没有超线程技术,有多少颗物理CPU核心,OS就认为有多少颗CPU;OS是依据CPU的外部接口来识别CPU数据,而不是依据CPU的实际内部构造;所以超线程技术
会使OS识别出更多颗CPU.

每个物理封装上可以有多个CPU核心,每个CPU物理核心(超线程技术)可以有多个逻辑核心;OS看到的是所有的逻辑核心的数目;

超线程技术,全名为Hyper-Threading:超线程技术就是利用特殊的硬件指令,把两个逻辑内核模拟成两个物理芯片,让单个处理器都能使用线程级并行计算,进而兼容多线程操作系统和软件,减少了CPU的闲置时间,提高的CPU的运行速度

多核心处理器:每个物理封装上封装了多个CPU核心,每个核心都是独立的处理器芯片,二者除了封装在一起,基本不共享其他物理部件;
超线程技术:只是外部接口上让OS软件看到的是两个核心,实际内部多个逻辑核心内部共享:执行单元和缓存等,其出现的主要目的是CPU和内存速度差异较大,系统瓶颈不在CPU的执行单元,而在外部的
存储器,通过超线程技术,提高CPU使用效率;


#############################################################
cat /proc/cpuinfo 关于CPU的核心参数说明:

physical id:CPU的物理封装的编号,从0开始依次编码;
siblings:  每个物理封装上的逻辑核心数目;
cpu cores: 每个物理封装上的物理核心数目;
core id:   当前物理核心在物理封装上的编号
processor: 逻辑CPU核心编号,从0开始依次编码;


上述数字关系:
siblings/(cpu cores) = 每个CPU物理核心下逻辑CPU数目,如果等于1 则没有超线程,如果大于1则有超线程;
siblings*(max(physical id) +1) = 机器所有逻辑核心的数目 = max(processor)+1


示例:


processor       : 23                   #逻辑CPU编号23
vendor_id       : GenuineIntel
cpu family      : 6
model           : 45
model name      : Intel(R) Xeon(R) CPU E5-2620 0 @ 2.00GHz
stepping        : 7
cpu MHz         : 1999.772
cache size      : 15360 KB
physical id     : 1 #物理封装编号是1
siblings        : 12 #每个物理封装有12个逻辑核心(cpu)
core id         : 5                   #当前物理核心的在当前物理封装中的编号
cpu cores       : 6                   #每个物理封装有6个物理核心(cpu)


core id: 当前物理封装下物理核心编号,同一封装下物理核心不同,但是不同物理封装下,物理核心可以相同;
However /proc/cpuinfo has a field named 'core id' which is a unique id for each core in a single processor


#lscpu 更清晰:
[root@TENCENT64 /data1/andes/201507]# lscpu
Architecture:          x86_64                  #64位架构
CPU op-mode(s):        32-bit, 64-bit          #支持32 64位
Byte Order:            Little Endian           #小端
CPU(s):                12                      #逻辑核心12个
On-line CPU(s) list:   0-11                    #逻辑核心编号0-11
Thread(s) per core:    2                       #每个物理核心2个逻辑核心,超线程
Core(s) per socket:    6                       #每个物理封装有6个物理核心
CPU socket(s):         1                       #总共1个CPU槽位,支持一个物理封装
NUMA node(s):          1
Vendor ID:             GenuineIntel
CPU family:            6
Model:                 62
Stepping:              4
CPU MHz:               2100.059               #cpu频率2.1GHZ
BogoMIPS:              4199.88
Virtualization:        VT-x
L1d cache:             32K
L1i cache:             32K
L2 cache:              256K
L3 cache:              15360K
NUMA node0 CPU(s):     0-11

#########################################################
#工具字典
1.查看物理封装个数:
cat /proc/cpuinfo |grep "physical id"|sort |uniq

2.查看逻辑核心数目:
cat /proc/cpuinfo |grep "processor"

3.查看每个物理封装下物理core数目:
cat /proc/cpuinfo |grep "cpu cores"

4.查看每个物理封装下逻辑cpu的数目:
cat /proc/cpuinfo |grep "siblings" |uniq


5.查看是否有超线程
cat /proc/cpuinfo |grep "siblings" |uniq && cat /proc/cpuinfo |grep "cpu cores" |uniq
看下siblings 数目与cpu cores数目之间的关系

6.最清晰的展现CPU信息 lscpu


(责任编辑:IT)
------分隔线----------------------------