我可以访问两台 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
运行lscpu
并lstopo --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 的一部分。