关于smp,numa,mpp网上一搜都有

NUMA

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
root@iZj6c4s0djlh8ri1r3z64oZ:~# dmesg |grep -i numa
[    0.000000] NUMA: Node 0 [mem 0x00000000-0x0009ffff] + [mem 0x00100000-0xbfffffff] -> [mem 0x00000000-0xbfffffff]
[    0.000000] NUMA: Node 0 [mem 0x00000000-0xbfffffff] + [mem 0x100000000-0x237ffffff] -> [mem 0x00000000-0x237ffffff]
root@iZj6c4s0djlh8ri1r3z64oZ:~# dmesg |grep -i smp
[    0.000000] Linux version 4.15.0-101-generic (buildd@lgw01-amd64-003) (gcc version 7.5.0 (Ubuntu 7.5.0-3ubuntu1~18.04)) #102-Ubuntu SMP Mon May 11 10:07:26 UTC 2020 (Ubuntu 4.15.0-101.102-generic 4.15.18)
[    0.000000] found SMP MP-table at [mem 0x000f5a10-0x000f5a1f]
[    0.000000] Using ACPI (MADT) for SMP configuration information
[    0.000000] smpboot: Allowing 2 CPUs, 0 hotplug CPUs
[    0.004000] Freeing SMP alternatives memory: 36K
[    0.113036] smpboot: CPU0: Intel(R) Xeon(R) Platinum 8269CY CPU @ 2.50GHz (family: 0x6, model: 0x55, stepping: 0x7)
[    0.113922] smp: Bringing up secondary CPUs ...
[    0.114009] x86: Booting SMP configuration:
[    0.114236] smp: Brought up 1 node, 2 CPUs
[    0.114236] smpboot: Max logical packages: 1
[    0.114236] smpboot: Total of 2 processors activated (10000.00 BogoMIPS)
[    0.754458]  smpboot_thread_fn+0xfc/0x170

除非硬件具有> 1个PHYSICAL CPU(不是内核而是物理处理器),否则禁用NUMA(由此非延迟端点衡量)是有利的。1 自从Haswell以来,NUMA对于“单处理器”(即单插槽)计算机不再有用。某些Haswell产品具有Intel所说的“ Cluster on Die”模式。单个插槽处理器具有集成的多个内存控制器,因此具有多个内存路径,具有此功能的路径可被视为不同的NUMA区域,所有这些区域都包含一个插槽。2

NUMA出现的原因

单个物理cpu中的所有CPU Core都是通过共享一个北桥来读取内存,随着核数如何的发展,北桥在响应时间上的性能瓶颈越来越明显。于是,聪明的硬件设计师们,想到了把内存控制器(原本北桥中读取内存的部分)也逐个拆分,平分到了每个die上。于是NUMA就出现了!3 目前的理解:所以本质是一根总线读内存在核心越来越多的情况下,响应时间的问题越来越突出,通过增加物理cpu数量(NUMA中称为节点node),使得读内存的总线数也相应增加: P0 <-> MEM0之间的延迟最小。 P0 <-> MEM1和P0 <-> MEM2之间的等待时间较长; P0 <-> MEM3之间的等待时间甚至更长。 此非统一内存体系结构(NUMA)规定了对空间局部性的需求。4 erlang的beam和golang的调度所实现的并发目前都是针对smp架构的

NUMA对于具有多个CPU插槽(而不是一个插槽中的多个内核)和专用物理内存访问通道(而不仅仅是一个内存控制器)的昂贵服务器非常重要,因此每个CPU都有其专用的本地内存,与它“更近”而不是其他CPU的内存。(请考虑使用8个插槽,64核,256 GB RAM。)NUMA表示,CPU不仅可以访问其自身的本地内存,而且还可以访问远程内存(另一个CPU的本地内存),尽管成本更高。NUMA是共享内存体系结构(例如SMP)和分布式内存体系结构(例如,MPP)的综合体,其中SMP共享所有内存对所有内核均可用,MPP(大规模并行处理)为每个节点提供专用的内存块。它是MPP,但对于应用程序来说看起来像SMP。

台式机主板没有双插槽,包括极速i7版本在内的Intel台式机CPU缺少用于双插槽配置的附加QPI链接。

查看Wikipedia QPI文章以了解QPI与NUMA的关系:

在单处理器主板上,最简单的形式是使用单个QPI将处理器连接到IO集线器(例如,将Intel Core i7连接到X58)。在体系结构更复杂的情况下,单独的QPI链接对连接主板上网络中的一个或多个处理器以及一个或多个IO集线器或路由集线器,从而允许所有组件通过网络访问其他组件。与HyperTransport一样,QuickPath体系结构假定处理器将具有集成的内存控制器,并启用非统一的内存访问(NUMA)体系结构。

参考

1:https://bugs.archlinux.org/task/31187

2:https://qastack.cn/unix/92302/enabling-numa-for-intel-core-i7

3:http://cenalulu.github.io/linux/numa/

4:https://docs.google.com/document/u/0/d/1d3iI2QWURgDIsSR6G2275vMeQ_X7w-qxM2Vp7iGwwuM/pub