/proc/cpuinfo 中相同的“核心”

/proc/cpuinfo 中相同的“核心”

Opteron 6128 显示如下/proc/cpuinfo

$ cat /proc/cpuinfo | grep -e ^core -e ^phys 
physical id     : 0
core id         : 0
physical id     : 0
core id         : 1
physical id     : 0
core id         : 2
physical id     : 0
core id         : 3
physical id     : 0
core id         : 0
physical id     : 0
core id         : 1
physical id     : 0
core id         : 2
physical id     : 0
core id         : 3
... (other physical id's)

到目前为止,我的理解是,同一物理 CPU 中的不同核心会有不同的core id,如果core ids 相同,则这是由于超线程。因此,应该将此/proc/cpuinfo条目解释为具有超线程的 4 核 CPU。

但是,Opteron 6128 实际上是 8 核的。这是怎么回事呢?

PS 第 8 个“处理器”的完整条目:

processor       : 7
vendor_id       : AuthenticAMD
cpu family      : 16
model           : 9
model name      : AMD Opteron(tm) Processor 6128
stepping        : 1
cpu MHz         : 800.000
cache size      : 512 KB
physical id     : 0
siblings        : 8
core id         : 3
cpu cores       : 8
apicid          : 23
initial apicid  : 7
fpu             : yes
fpu_exception   : yes
cpuid level     : 5
wp              : yes
flags           : fpu vme de pse tsc msr pae mce cx8 apic mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx mmxext fxsr_opt pdpe1gb rdtscp lm 3dnowext 3dnow constant_tsc rep_good nonstop_tsc extd_apicid amd_dcm pni monitor cx16 popcnt lahf_lm cmp_legacy svm extapic cr8_legacy abm sse4a misalignsse 3dnowprefetch osvw ibs skinit wdt nodeid_msr npt lbrv svm_lock nrip_save pausefilter
bogomips        : 3999.89
TLB size        : 1024 4K pages
clflush size    : 64
cache_alignment : 64
address sizes   : 48 bits physical, 48 bits virtual
power management: ts ttp tm stc 100mhzsteps hwpstate

答案1

以下是用于比较的 Intel i7 2600:

cyrex@cyrex:~$ cat /proc/cpuinfo | grep -e ^core -e ^phys
physical id : 0
core id     : 0
physical id : 0
core id     : 1
physical id : 0
core id     : 2
physical id : 0
core id     : 3
physical id : 0
core id     : 0
physical id : 0
core id     : 1
physical id : 0
core id     : 2
physical id : 0
core id     : 3

因为我的英特尔主板只有一个插槽,这意味着我只有一个物理id。可以认为主板上的每个插槽都有一个物理 id。

接下来,我们有引用该物理 ID 的核心 ID。如果你看一下,它会重复出现。这是因为超线程。实际上有 4 个核心和 4 个 HT 核心。所以最后它显示一个物理 ID,4 个核心 ID 和 4 个 HT。

如果主板上有更多插槽,物理 ID 的数量将随着核心数量而增加。在你的情况下,它应该显示 8 个核心(在我的情况下是 4 个核心),因此它会显示一个长列表,但由于它在第 4 个核心之后重复,看起来要么没有读取其他核心(BIOS 问题,内核问题),要么 cpuinfo 没有正确检测到它。

如果您可以执行以下操作,这也会帮助您找出原因:

sudo dmidecode -t processor | grep -e Core -e Thread并将信息添加到您的问题中。 在我的例子中dmidecode是:

cyrex@cyrex:~$ sudo dmidecode -t processor | grep -e Core -e Thread
    Family: Core i7
    Version: Intel(R) Core(TM) i7-2600 CPU @ 3.40GHz
    Core Count: 4
    Core Enabled: 4
    Thread Count: 8

此外,在基准测试中开放基准我找到了你的模型,在执行 cat on 时有一行显示以下内容/proc/cpuinfo

cpu cores   : 8

由于在您的例子中它显示了所有 8 个核心,这意味着 CPU 被正确检测到,尽管没有显示所有同级的数量。这可能是因为 cpuinfo 如何显示 AMD 或特定系列型号。如果像 这样的命令lscpu可以dmidecode显示每个 CPU、核心和线程/同级的数量,那么问题就在于 cpuinfo 如何处理这些信息。

相关内容