CPU架构之---SMP、NUMA

一、缩略词:

缩略词全称含义
SMPSymmetric Multi processing对称多处理器(UMA)
NUMA(Non-Uniform Memory Access)非一致性内存访问
UMAUniform 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 系统中,内存访问时间取决于访问数据的位置,因为不同处理器核心访问本地内存和远程内存的延迟可能不同。

关键特点包括:

  1. 内存访问区域:系统中的内存被划分为多个区域,每个处理器核心可以更快地访问其本地内存,但对于其他处理器核心的内存访问速度可能会较慢。

  2. 本地性:NUMA 架构鼓励程序在其数据访问模式中保持本地性,即尽可能地访问本地内存,以减少远程内存访问所带来的性能开销。

  3. 可扩展性:NUMA 系统通常用于大型多处理器系统,因为它可以提供更好的可扩展性,同时降低了总线和内存访问的竞争。

  4. 在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架构的优势,达到比较好的处理性能。

  • 8
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
SMP (Symmetric Multi-Processing):是一种共享内存架构,采用多个相同的处理器核来并行执行操作系统的任务,并且这些核之间通过共享内存进行通信,从而实现进程和线程在不同CPU核之间的切换。SMP系统的优点是易于编程和使用,因为内核之间的数据共享非常容易。 UMA (Uniform Memory Access):UMA系统采用一个物理地址空间来访问整个系统的内存,所有的CPU都可以直接访问内存,并且因为内存是通过一个总线连接的,所以访问内存的时间都是相等的。这种系统设计非常简单,但是其性能随着CPU数量的增加而下降,因为总线成为了瓶颈。 NUMA (Non-Uniform Memory Access):NUMA是一种分布式内存架构,将一个机器的内存分为多个区域,并将这些区域连接到不同的CPU上。这种架构提高了内存访问速度,但也增加了一些复杂性,特别是在缓存一致性上。 COMA (Cache-Only Memory Architecture):COMA是一种非常高级的内存架构,目的是利用多个CPU之间的缓存来实现高级别的内存共享。在COMA系统中,每个CPU都有自己的缓存,并且CPU可以通过高速网络互相通信,从而实现内存数据的共享。 ccNUMA (Cache Coherent Non-Uniform Memory Access):ccNUMA是一种混合型内存架构,结合了NUMA和COMA的优点。在ccNUMA中,每个CPU都有自己的缓存,并通过网络互相通信来共享内存数据。这种架构设计不仅可以提供高速的内存访问速度,还可以提高缓存一致性的维护效率。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

a2591748032-随心所记

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值