Linux 中的 NUMA CPU 编号

Linux 中的 NUMA CPU 编号

我可以访问两台 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

另一台是 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

在拥有多台 HPE Gen9 服务器的工作中,我已经习惯了 CPU 编号(socket0、socket1、socket0 HyperThreads、socket1 HyperThreads)。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

但戴尔 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

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

戴尔 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

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

这是由不同的内核版本引起的吗?还是由不同的 CPU 引起的?还是由不同的主板/BIOS 引起的?

编辑:我更新了两台机器的内核并重启,现在两台机器使用的内核版本完全相同。然而,差异仍然存在。

答案1

停止 grapping 并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

在此处输入图片描述

答案2

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

枚举由 CPU + BIOS + 内核决定。从高层次上讲,主板的插槽 0 和 1 不同,它始终启动 0。插槽 0 中的 CPU 然后从特定地址启动核心 0 并启动 BIOS,然后枚举此芯片上的逻辑 CPU 和其他 CPU(可能不是按该顺序)[3]。BIOS 根据需要将枚举数据传递给操作系统,但操作系统可以自由地对 CPU 进行编号(想象一下热插拔 CPU 对编号的影响)。

如果您担心亲和性和缓存,那么 apicid 是一个有用的数字。应定义位字段,以便最接近的内存/缓存具有数值接近的 apicid,方法是按位 Socket | Core | SMT 排序。但是这些字段的宽度不是固定的,因此您不能指望 LSB 总是表示 SMT,它可能没有 SMT,并且该位是核心 ID 的一部分。

相关内容