奇怪的cpuinfo,这个物理cpu有多少个核心?

奇怪的cpuinfo,这个物理cpu有多少个核心?

这篇文章的末尾是我的 /proc/cpuinfo。

我知道物理 CPU 编号是 2

grep 'physical id' /proc/cpuinfo|sort|uniq|wc -l
2 

但是每个 CPU 有多少个核心?

“cpu 核心”显示它有 16 个核心。

但是使用这个命令它显示总共只有8个核心。

grep 'core id' /proc/cpuinfo    
core id         : 16
core id         : 0
core id         : 17
core id         : 1
core id         : 25
core id         : 9
core id         : 26
core id         : 10

显示使用超线程的架构中同一物理 CPU 上的同级 CPU 数量。我的机器上有 16 个。但物理 0 CPU 上有 4 个,物理 1 CPU 上有 4 个。我真的很困惑。

有谁能够帮助我?

下面是我的 /proc/cpuinfo

processor   : 0
vendor_id   : GenuineIntel
cpu family  : 6
model       : 12
model name  : Intel(R) Xeon(R) CPU           E5620  @ 2.40GHz
stepping    : 2
cpu MHz     : 2400.191
cache size  : 256 KB
physical id : 1
siblings    : 16
core id     : 16
cpu cores   : 16
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 lm pni monitor ds_cpl est tm2 cx16 xtpr
bogomips    : 4803.77
clflush size    : 64
cache_alignment : 64
address sizes   : 40 bits physical, 48 bits virtual
power management:

processor   : 1
vendor_id   : GenuineIntel
cpu family  : 6
model       : 12
model name  : Intel(R) Xeon(R) CPU           E5620  @ 2.40GHz
stepping    : 2
cpu MHz     : 2400.191
cache size  : 256 KB
physical id : 0
siblings    : 16
core id     : 0
cpu cores   : 16
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 lm pni monitor ds_cpl est tm2 cx16 xtpr
bogomips    : 4800.22
clflush size    : 64
cache_alignment : 64
address sizes   : 40 bits physical, 48 bits virtual
power management:

processor   : 2
vendor_id   : GenuineIntel
cpu family  : 6
model       : 12
model name  : Intel(R) Xeon(R) CPU           E5620  @ 2.40GHz
stepping    : 2
cpu MHz     : 2400.191
cache size  : 256 KB
physical id : 1
siblings    : 16
core id     : 17
cpu cores   : 16
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 lm pni monitor ds_cpl est tm2 cx16 xtpr
bogomips    : 4800.13
clflush size    : 64
cache_alignment : 64
address sizes   : 40 bits physical, 48 bits virtual
power management:

processor   : 3
vendor_id   : GenuineIntel
cpu family  : 6
model       : 12
model name  : Intel(R) Xeon(R) CPU           E5620  @ 2.40GHz
stepping    : 2
cpu MHz     : 2400.191
cache size  : 256 KB
physical id : 0
siblings    : 16
core id     : 1
cpu cores   : 16
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 lm pni monitor ds_cpl est tm2 cx16 xtpr
bogomips    : 4800.21
clflush size    : 64
cache_alignment : 64
address sizes   : 40 bits physical, 48 bits virtual
power management:

processor   : 4
vendor_id   : GenuineIntel
cpu family  : 6
model       : 12
model name  : Intel(R) Xeon(R) CPU           E5620  @ 2.40GHz
stepping    : 2
cpu MHz     : 2400.191
cache size  : 256 KB
physical id : 1
siblings    : 16
core id     : 25
cpu cores   : 16
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 lm pni monitor ds_cpl est tm2 cx16 xtpr
bogomips    : 4800.14
clflush size    : 64
cache_alignment : 64
address sizes   : 40 bits physical, 48 bits virtual
power management:

processor   : 5
vendor_id   : GenuineIntel
cpu family  : 6
model       : 12
model name  : Intel(R) Xeon(R) CPU           E5620  @ 2.40GHz
stepping    : 2
cpu MHz     : 2400.191
cache size  : 256 KB
physical id : 0
siblings    : 16
core id     : 9
cpu cores   : 16
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 lm pni monitor ds_cpl est tm2 cx16 xtpr
bogomips    : 4800.19
clflush size    : 64
cache_alignment : 64
address sizes   : 40 bits physical, 48 bits virtual
power management:

processor   : 6
vendor_id   : GenuineIntel
cpu family  : 6
model       : 12
model name  : Intel(R) Xeon(R) CPU           E5620  @ 2.40GHz
stepping    : 2
cpu MHz     : 2400.191
cache size  : 256 KB
physical id : 1
siblings    : 16
core id     : 26
cpu cores   : 16
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 lm pni monitor ds_cpl est tm2 cx16 xtpr
bogomips    : 4800.13
clflush size    : 64
cache_alignment : 64
address sizes   : 40 bits physical, 48 bits virtual
power management:

processor   : 7
vendor_id   : GenuineIntel
cpu family  : 6
model       : 12
model name  : Intel(R) Xeon(R) CPU           E5620  @ 2.40GHz
stepping    : 2
cpu MHz     : 2400.191
cache size  : 256 KB
physical id : 0
siblings    : 16
core id     : 10
cpu cores   : 16
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 lm pni monitor ds_cpl est tm2 cx16 xtpr
bogomips    : 4800.20
clflush size    : 64
cache_alignment : 64
address sizes   : 40 bits physical, 48 bits virtual
power management:

答案1

根据英特尔眼镜对于处理器,它是一个四核 CPU(4 个不同的核心),每个核心都启用了超线程,这使得它看起来像一个八核。

鉴于它是 Xeon,您可以很容易地拥有双插槽主板,这意味着有 2 个独立的芯片,每个芯片有 4 个内核,每个芯片可以运行两个线程,因此实际上在操作系统中显示为一台 16 核机器。

答案2

这是我用来检查 CPU 信息的函数。

function CORES(){

  local -i SOCKETS=$(grep -w "physical id" /proc/cpuinfo | sort -u | wc -l)
  [ "${SOCKETS}" -eq 0 ] && SOCKETS="1"
  local -i CORES=$(grep -w "core id" /proc/cpuinfo | sort -u | wc -l)
  [ "${CORES}" -eq 0 ] && CORES="1"
  local -r MODEL=$(grep -w "model name" /proc/cpuinfo | sort -u | awk -F:     '{print $2}')
  local -ir THREADS=$(grep -w "processor" /proc/cpuinfo | sort -u | wc -l)
  local -ir TOTAL_CORES=$(echo $((${SOCKETS}*${CORES})))
  local -ir THREADS_PER_CORE=$(echo $((${THREADS}/${TOTAL_CORES})))

  echo -e "ModelName\t: " $MODEL
  echo -e "Sockets\t\t: " $SOCKETS
  echo -e "Cores/Socket\t: " $CORES
  echo -e "Threads/Core\t: " $THREADS_PER_CORE
  echo -e "TotalCores\t: " $TOTAL_CORES
  echo -e "TotalThreads\t: " $THREADS

}

其中主要有三个部分:

  1. 物理 CPU 数量 ( 'physical id')
  2. 每个物理 CPU 的核心总数('core id'
  3. 每个物理 CPU 每个核心的线程总数('processor'

仅供'model name'参考...

它的唯一错误是,如果'physical id'在 /proc/cpuinfo 中不存在,那么它会抛出这个错误(我还没有来得及修复...):

$ CORES
-bash: 2/0: division by 0 (error token is "0")
ModelName       :  Intel(R) Xeon(R) CPU X5560 @ 2.80GHz
Sockets         :  0
Cores/Socket    :  0
Threads/Core    :  0
TotalCores      :  0
TotalThreads    :  2

编辑:已修复。

希望有帮助!

编辑:这是一个存在的示例'physical id'

ModelName       :  Intel(R) Xeon(R) CPU X3470 @ 2.93GHz
Sockets         :  2
Cores/Socket    :  1
Threads/Core    :  1
TotalCores      :  2
TotalThreads    :  2

另一个

ModelName       :  Intel(R) Xeon(R) CPU E5520 @ 2.27GHz
Sockets         :  2
Cores/Socket    :  2
Threads/Core    :  1
TotalCores      :  4
TotalThreads    :  4

编辑2:一个大问题!

ModelName       :  Intel(R) Xeon(R) CPU X5650 @ 2.67GHz
Sockets         :  2
Cores/Socket    :  6
Threads/Core    :  2
TotalCores      :  12
TotalThreads    :  24

编辑:OP 的 /proc/cpuinfo 结果

$ CORES
ModelName       :  Intel(R) Xeon(R) CPU E5620 @ 2.40GHz
Sockets         :  2
Cores/Socket    :  8
Threads/Core    :  0
TotalCores      :  16
TotalThreads    :  8

这表明您在某处(可能是在 BIOS 中)禁用了超线程,这就是为什么每个核心有 0 个线程。在这种情况下,TotalThreads = Cores/Socket。这意味着每个插槽有 8 个非超线程核心。

答案3

在我看来,/proc/cpuinfo这仅显示了实际物理 CPU 配置的一部分。

某些字段可能表明您的系统有 2 个 CPU 插槽,每个插槽有 16 个物理核心:

  • physical id从 0 变为 1,因此会有 2 个 CPU 插槽
  • siblings表示每个 CPU 插槽有 16 个逻辑核心
  • cpu cores也是 16,我将其解释为 中指定的 CPU 的物理核心数physical id。至于这一点,我会说 CPU 不支持超线程,但是……

根据Intel E5620芯片规格,每个芯片有 4 个物理核心,每个核心由于超线程技术而有 2 个逻辑核心。

这让我得出这样的结论:从操作系统的角度来看,您只能部分访问 CPU 资源。我建议您在虚拟化环境中运行。

下面我们来看看/proc/cpuinfo在双 CPU 上运行的虚拟机英特尔 E5430基于服务器(2 个 CPU 插槽,4 个物理核心,无超线程)。操作系统只能看到来自 CPU#0 的核心#0 和来自 CPU#1 的核心#0。

processor   : 0
vendor_id   : GenuineIntel
cpu family  : 6
model       : 23
model name  : Intel(R) Xeon(R) CPU           E5430  @ 2.66GHz
stepping    : 10
cpu MHz     : 2659.998
cache size  : 6144 KB
physical id : 0
siblings    : 4
core id     : 0
cpu cores   : 4
apicid      : 0
initial apicid  : 0
fpu     : yes
fpu_exception   : yes
cpuid level : 13
wp      : yes
flags       : fpu vme de pse tsc msr pae mce cx8 apic mtrr pge mca cmov pat pse36 clflush dts     acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx lm constant_tsc arch_perfmon pebs bts rep_good aperfmperf pni dtes64 monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr pdcm dca sse4_1 xsave lahf_lm tpr_shadow vnmi flexpriority
bogomips    : 5319.99
clflush size    : 64
cache_alignment : 64
address sizes   : 38 bits physical, 48 bits virtual
power management:

processor   : 1
vendor_id   : GenuineIntel
cpu family  : 6
model       : 23
model name  : Intel(R) Xeon(R) CPU           E5430  @ 2.66GHz
stepping    : 10
cpu MHz     : 2659.998
cache size  : 6144 KB
physical id : 1
siblings    : 4
core id     : 0
cpu cores   : 4
apicid      : 4
initial apicid  : 4
fpu     : yes
fpu_exception   : yes
cpuid level : 13
wp      : yes
flags       : fpu vme de pse tsc msr pae mce cx8 apic mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx lm constant_tsc arch_perfmon pebs bts rep_good aperfmperf pni dtes64 monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr pdcm dca sse4_1 xsave lahf_lm tpr_shadow vnmi flexpriority
bogomips    : 5319.78
clflush size    : 64
cache_alignment : 64
address sizes   : 38 bits physical, 48 bits virtual
power management:

答案4

这就是超线程,它允许单个核心或多或少地并行运行两个线程。或多或少取决于每个线程正在使用的指令。

相关内容