CPU架构之---SMP、NUMA
一、缩略词:
缩略词 | 全称 | 含义 |
SMP | Symmetric Multi processing | 对称多处理器(UMA) |
NUMA | (Non-Uniform Memory Access) | 非一致性内存访问 |
UMA | Uniform Memory Architecture | 一致性内存访问 |
二、SMP简述和框架
2.1 smp简述
SMP(Symmetric Multiprocessing,对称多处理)是一种计算机体系结构,用于多处理器系统。在 SMP 系统中,每个处理器都可以执行相同的任务,并且每个处理器都可以访问相同的内存和 I/O 总线。这使得每个处理器都能够独立地执行任务,而无需太多的协调或通信。
关键特点包括:
-
CPU和CPU以及CPU和内存都是通过一条总线连接起来
-
CPU都是平等的,没有主从关系
-
所有的硬件资源都是共享的,即每个CPU都能访问到任何内存、外设等
-
内存是统一结构和统一寻址的(UMA, Uniform Memory Architecture)
-
SMP服务器CPU利用率最好的情况是2至4个CPU,因为所有的处理器都通过一条总线连接起来,因此随着处理器的增加,系统总线成为了系统瓶颈
2.2 smp框架
三、NUMA简述和框架
3.1 NUMA简述
NUMA的诞生是为了解决SMP架构下不断增多的CPU Core导致的性能问题,NUMA调整了CPU和内存的布局和访问关系。
NUMA(Non-Uniform Memory Access,非一致性存储访问)是一种多处理器系统架构,其中每个处理器核心可以访问其本地内存以及其他处理器核心的远程内存。在 NUMA 系统中,内存访问时间取决于访问数据的位置,因为不同处理器核心访问本地内存和远程内存的延迟可能不同。
关键特点包括:
-
内存访问区域:系统中的内存被划分为多个区域,每个处理器核心可以更快地访问其本地内存,但对于其他处理器核心的内存访问速度可能会较慢。
-
本地性:NUMA 架构鼓励程序在其数据访问模式中保持本地性,即尽可能地访问本地内存,以减少远程内存访问所带来的性能开销。
-
可扩展性:NUMA 系统通常用于大型多处理器系统,因为它可以提供更好的可扩展性,同时降低了总线和内存访问的竞争。
-
在NUMA架构中,将CPU划分到多个NUMA Node中,每个Node有自己独立的内存空间和PCIE总线系统。各个CPU间通过QPI总线进行互通。
3.2 numa框架
3.4 典型应用
3.3 NUMA架构的CPU和内存分布
3.3.1 NUMA架构CPU分布
-
Socket:表示一颗物理 CPU 的封装(物理 CPU 插槽),简称插槽。Socket表示可以看得到的真实的CPU核 。
-
Core:物理 CPU 封装内的独立的一组程序执行的硬件单元,比如寄存器,计算单元等,Core表示的是在同一个物理核内逻辑层面的核。同一个物理CPU的多个Core,有自己独立的L1和L2 Cache,共享L3 Cache。
-
Thread:使用超线程技术虚拟出来的逻辑 Core,需要 CPU 支持(这里需要用到cpu虚拟化技术,下面会讲这块)。为了便于区分,逻辑 Core 一般被写作 Processor。在具有 Intel 超线程技术的处理器上,每个内核可以具有两个逻辑处理器,这两个逻辑处理器共享大多数内核资源(如内存缓存和功能单元)。此类逻辑处理器通常称为 Thread 。
-
Node:即NUMA Node,包含有若干个 CPU Core 的组。
3.3.2 NUMA架构memory分布
可以使用numactl -H命令查看
四、如何判断系统是NUMA还是SMP架构
通过lscpu命令来查询。
它们最重要的区别在于内存是否绑定在各个物理CPU上,以及CPU如何访问内存。
NUMA 最大的特点是引入了node和distance的概念,node内部有多个CPU,以及绑定的内存。每个node的CPU和内存一般是相等。
4.1 numa架构
lscpu
Architecture: x86_64
CPU op-mode(s): 64-bit
Byte Order: Little Endian
CPU(s): 128
On-line CPU(s) list: 0-127
Thread(s) per core: 2
Core(s) per socket: 32
Socket(s): 2
NUMA node(s): 4
上面开启了超线程, NUMA node(s) 为 4,而 Socket(s) 为 2,这意味着每个物理的 CPU 插槽内包含了两个 NUMA 节点。这种设计可以提供更多的内存通道和更大的内存容量,以支持更多的处理器核心和更高的性能。可以这样计算:128 = 32 * 2 * 2。
4.2 SMP架构
SMP架构在嵌入式系统中也经常见到,比如一些移动手机嵌入式终端设备。如下图可以看到 "Socket(s)" 的值为 2,而 "NUMA node(s)" 并未在 lscpu 的输出中显示,这表明系统不是 NUMA 架构,而是采用对称多处理器架构。
lscpu
Architecture: arm64
CPU op-mode(s): 64-bit
Byte Order: Little Endian
CPU(s): 8
On-line CPU(s) list: 0-7
Thread(s) per core: 1
Core(s) per socket: 4
Socket(s): 2
可以看到此处没有超线程,每个core都有一个硬线程。此处的线程并不是我们操作系统中的进程、线程。每个核心只能同时执行一个线程,操作系统可以管理多个进程和线程,并通过时间片轮转的方式使得多个进程和线程能够在这些核心上运行。
五、SMP和NUMA架构下的多系统应用
随着soc技术不断更新迭代,以及科技应用多元化发展,芯片的集成度越来越强大。我们经常能看到一芯多系统的芯片。
对于SMP: armv8架构支持type-1虚拟化,可以对cpu进行虚拟化,虚拟化后,就可以跑多个os系统,比如vcpu1跑linux, vcpu2跑rtos等。
对于NUMA:由于每个core有自己独立的内存,包括cache等。不需要虚拟化,即可跑多os系统。比如node1跑linux,node2跑rtos等。
六、NUMA编程注意
NUMA架构显著的特点就是CPU访问本地内存快,访问远程内存慢。所以我们在NUMA架构下编写程序,要扬长避短,多核多线程编程中,我们要尽可能的利用CPU Core的亲和性,将线程绑定到对应的CPU上,并且该线程从该CPU对应的本地内存上去申请内存,这样才能最大限度发挥NUMA架构的优势,达到比较好的处理性能。
原文地址:https://blog.csdn.net/a2591748032/article/details/137740563
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!