Linux 中的 NUMA CPU 编号

juh*_*ist 7 linux multi-core numa

我可以访问两台 NUMA 服务器。其中之一是 Dell R720,具有以下 CPU:

$ cat /proc/cpuinfo |grep Xeon|sort|uniq -c
     24 model name  : Intel(R) Xeon(R) CPU E5-2630L v2 @ 2.40GHz
Run Code Online (Sandbox Code Playgroud)

另一个是 HPE DL360 Gen8,具有以下 CPU:

$ cat /proc/cpuinfo |grep Xeon|sort|uniq -c
     24 model name  : Intel(R) Xeon(R) CPU E5-2630 0 @ 2.30GHz
Run Code Online (Sandbox Code Playgroud)

在我们拥有许多 HPE Gen9 服务器的工作中,我已经习惯了 CPU 编号(socket0、socket1、socket0 超线程、socket1 超线程)。HPE DL360 Gen8 似乎使用以下编号:

$ cat /proc/cpuinfo |grep physical.id|uniq -c
      6 physical id : 0
      6 physical id : 1
      6 physical id : 0
      6 physical id : 1
Run Code Online (Sandbox Code Playgroud)

但 Dell R720 服务器使用不同的编号:

$ cat /proc/cpuinfo |grep physical.id|uniq -c
      1 physical id : 0
      1 physical id : 1
      1 physical id : 0
      1 physical id : 1
      1 physical id : 0
      1 physical id : 1
      1 physical id : 0
      1 physical id : 1
      1 physical id : 0
      1 physical id : 1
      1 physical id : 0
      1 physical id : 1
      1 physical id : 0
      1 physical id : 1
      1 physical id : 0
      1 physical id : 1
      1 physical id : 0
      1 physical id : 1
      1 physical id : 0
      1 physical id : 1
      1 physical id : 0
      1 physical id : 1
      1 physical id : 0
      1 physical id : 1
Run Code Online (Sandbox Code Playgroud)

我的问题是,是什么导致了这种差异?这些服务器有两个略有不同的内核版本:

戴尔R720:

$ uname -a
Linux dell 4.10.0-33-generic #37~16.04.1-Ubuntu SMP Fri Aug 11 14:07:24 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux
Run Code Online (Sandbox Code Playgroud)

HPE DL360 Gen8:

$ uname -a
Linux hpe 4.11.0-14-generic #20~16.04.1-Ubuntu SMP Wed Aug 9 09:06:22 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux
Run Code Online (Sandbox Code Playgroud)

这是内核版本不同造成的吗?还是不同的CPU?或者通过不同的主板/BIOS?

编辑:我更新了两台机器上的内核并重新启动,所以现在两台机器使用完全相同的内核版本。尽管如此,差异仍然存在。

eww*_*ite 8

停止 grep 并uniq运行lscpulstopo --of png > server.png可视化结果......

[root@LA_Specialty ~]# lscpu
Architecture:          x86_64
CPU op-mode(s):        32-bit, 64-bit
Byte Order:            Little Endian
CPU(s):                24
On-line CPU(s) list:   0-23
Thread(s) per core:    2
Core(s) per socket:    6
Socket(s):             2
NUMA node(s):          2
Vendor ID:             GenuineIntel
CPU family:            6
Model:                 62
Model name:            Intel(R) Xeon(R) CPU E5-2643 v2 @ 3.50GHz
Stepping:              4
CPU MHz:               3501.000
BogoMIPS:              7013.88
Virtualization:        VT-x
L1d cache:             32K
L1i cache:             32K
L2 cache:              256K
L3 cache:              25600K
NUMA node0 CPU(s):     0-5,12-17
NUMA node1 CPU(s):     6-11,18-23
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述


And*_*zek 2

lscpu [1]将更简洁地表达各个系统的numa布局。lstopo [2]给出了处理器关系的层次结构视图。

枚举由CPU+BIOS+内核决定。在高级别上,主板有不同的插槽 0 和 1,它总是启动 0。插槽 0 中的 CPU 然后在特定地址启动核心 0 并启动 BIOS,然后 BIOS 枚举该芯片上的逻辑 CPU 和其他 CPU (可能不是按这个顺序)[3]。BIOS 根据需要将枚举数据传递给操作系统,但操作系统可以随意对 CPU 进行编号(想象一下热插拔 CPU 对编号的作用)。

如果您担心关联性和缓存,那么 apicid 是一个有用的数字。位字段的定义应使得最接近的内存/缓存具有通过对位进行排序而在数值上接近的 apicids。核心| SMT。不过,这些字段的宽度不是固定的,因此您不能指望 LSB 始终表示 SMT,它可能没有 SMT,并且该位是核心 id 的一部分。