路漫漫|

Joey-Wang

园龄:4年3个月粉丝:17关注:0

2023-12-06 21:43阅读: 74评论: 0推荐: 0

服务器架构的发展

1 背景

商业化处理器都致力于单核处理器的发展,通过在芯片上集成更多数目的晶体管,加快运算速度 (即主频),从而提升系统性能。

2005年,当主频接近 4GHz 时,Intel 和 AMD 发现,单纯提升主频已无法明显提升系统整体性能。单核处理器利用冗长的运算流水线 (即增加每个始终周期同时执行的运算个数),可以达到较高的主频,但由于流水线过长,使得单位频率效能低下,且由于缓存的增加与漏电流控制不利,导致功耗大幅增加。3.6GHz 奔腾四芯片在性能上反而还不如早些时推出的 3.4GHz 产品。此外,随着功率增大,散热问题也越来越成为一个无法逾越的障碍。在芯片功耗超过150瓦后,现有的风冷散热系统将无法满足散热的需要。

显然,当晶体管数量增加导致功耗增长超过性能增长速度后,处理器的可靠性就会受到致命性的影响。

因此人们转向的多核处理器方案。早在1996年就有第一款多核 CPU 原型 Hydra。2001年 IBM 推出第一个商用多核处理器 POWER4,2005年 Intel 和 AMD 多核处理器大规模应用。

多核处理器越来越流行,在服务器、桌面、上网本、平板、手机还是医疗设备、国防、航天等方面都得到了广泛的应用。

2 多核处理器的发展

多核处理器:在一枚处理器中集成两个或多个完整的内核。

2.1 从核结构上区分

同构多核架构在硬件与软件设计上比较简单,通用性高。

从硬件角度 (和结构) 分类:

1️⃣ 同构多核结构:CPU 中的所有内核的结构都一样。

e.g., Exynos4412,freescale i.mx6 dual和quad系列、TI的OMAP4460等,Intel的Core Duo、Core2 Duo等。

2️⃣ 异构多核结构:CPU 中存在不同结构的内核。

e.g., TI的达芬奇平台DM6000系列(ARM9+DSP)、Xilinx的Zynq7000系列(双核Cortex-A9+FPGA)、Cell处理器(1个64位POWERPC+8个32位协处理器)等。

image-20231204002512368

2.2 从运行模式上区分

从软件角度分类,多核处理器的操作系统体系有:

  • SMP (Symmetric Multi-processing,对称多处理) 结构
  • AMP (Asymmetric Multi-processing,非对称多处理) 结构
  • BMP (Bound Multi-processing,边界多处理) 结构

SMP 结构

只有一个操作系统(OS)实例运行在多个 CPU 内核上,一个 OS 同等的管理各个内核,为各个内核分配工作负载,系统中所有的内核共享内存资源和外设资源

因为异构处理器的各个内核结构不同,如果一个 OS 去管理不同的内核,这种情况实现起来比较复杂,所以一般运行在 SMP 结构下的通常都是同构处理器。Windows、Linux 和 Vxworks 等多种 操作系统都支持SMP 结构。

🌰 如下图所示,在 SMP 结构下,一个 OS 负责协调两个内核,两个内核共享内存,每个核心运行的应用程序(APP1 和APP2)的地址是相同的,通过MMU(Memory Mana gement Unit,内存管理单元)把它们映射到主存的不同位置上。

image-20231204000236656

AMP 结构

每个内核运行自己的 OS 或同一 OS 的独立实例,或者说不运行 OS,如运行裸机,每个内核有自己独立的内存空间,也可以和其它内核共享部分内存空间,每个核心相对独立地运行不同的任务,其中有一个核心为主要核心,它负责控制其它核心以及整个系统的运行,而其它核心负责“配合”主核心来完成特定的任务。主核心被称为主处理器, 其它核心倍称为协处理器/远程处理器

AMP结构最大的特点在于各个操作系统都有本身独占的资源,其它资源由用户来指定多个系统共享或者专门分配给某一个系统来使用,系统间可通过共享的内存来完成通信

🌰 如下图是 STM32MP157 的资源简图,STM32MP157 的 Cortex-A7 内核可以运行 Linux 操作系统,Cortex-M4 内核可以运行裸机或者其它 RTOS (实时操作系统),如 OneOS、FreeRTOS、RT-Thread 和UCOS 等。Cortex-A7 和 Cortex-M4 都有自己独占的资源,也有共享的资源,这些资源由用户来分配,双核之间可通过共享内存来进行通信。

image-20231204000956080

在AMP 系统设计中,一般需解决两个问题:

  • 生命周期管理(内核启动顺序)问题
  • 内核间通信问题

配置 AMP 系统最好的方法是使用一个既满足控制又满足通信要求的统一框架,而 OpenAMP 就是当前多核架构使用的最多的标准框架,许多芯片供应商都提供了 OpenAMP 的实现。基于 OpenAMP,通过 Remoteproc 实现生命周期管理,通过 RPMsg 管理内核间通信。

BMP 结构

BMP 和 SMP 类似,也是由一个 OS 同时管理所有 CPU 内核,但开发者可指定某个任务在某个核中执行。

小结

SMP 特征:只有一个 OS 实例,运行在多个内核上;每个内核的结构相同,且共享所有资源。

AMP 特征:多个内核的结构可不同,每个内核可运行一个独立的 OS 或同一 OS 的独立实例。各 OS 拥有独立的资源,系统间可通过共享内存通信。

AMP 和 SMP 有明显的差别,但两者也有联系:如在一个芯片上,可能多个架构相同的内核被配置为一个 SMP 子系统,而此时另外的内核跑的是其它的操作系统。从整体来看是 AMP 结构,从逻辑上来分,这个 SMP 子系统看起来像是一个单核,可以看做包含在这个大的 AMP 系统中。🌰 STM32MP157 的两个 Cortex-A7 内核跑的是同一个 Linux 操作系统,这两个 Cortex-A7 内核就可以看做是一个SMP 子系统,而 Cortex-M4 内核可以跑裸机或者RTOS,那么 STM32MP157 这款芯片从整体上看就是AMP 结构。

3 服务器架构的发展

从系统架构来看,目前的商用服务器大体可以分为三类

  • 对称多处理器结构 (SMP:Symmetric Multi-Processing)
  • 非一致存储访问结构 (NUMA:Non-Uniform Memory Access)
  • 大规模并行处理结构 (MPP:Massive Parallel Processing)

3.1 SMP

SMP(Sysmmetric Multi-Processor,对称多处理器),指服务器由多个具有对称关系的 CPU 组成,无主次或从属关系。SMP 的出现使一台计算机不再由单个 CPU 组成。

SMP 的典型特征为「多个 CPU 共享一个集中式存储器」,且每个 CPU 访问存储器的时间片相同,使得工作负载能够均匀的分配到所有可用 CPU 上,极大地提高了整个系统的数据处理能力。

虽然 SMP 具有多个 CPU,但由于只有一个共享的集中式存储器,所以 SMP 只能运行一个操作系统和数据库系统的副本 (实例),依旧保持了单机特性。同时,SMP 也会要求多 CPU 保证共享存储器的数据一致性。如果多个 CPU 同时请求访问共享资源,就需要由软件或硬件实现的加锁机制来解决资源竞态的问题。由此,SMP 又称为 UMA (Uniform Memory Access,一致性存储访问)

所谓一致性指的是:

  • 在任意时刻,多个 CPU 只能为存储器的每个数据保存或共享一个唯一的数值。
  • 每个 CPU 访问存储器中的任何地址所需要的时间都是一致的。

对 SMP 服务器进行扩展的方式包括增加内存、使用更快的 CPU、增加 CPU、扩充 I/O (槽口数与总线数) 以及添加更多的外部设备 (通常是磁盘存储)。

SMP服务器的主要特征是共享,系统中所有资源 (CPU、内存、I/O等) 都是共享的。也正是由于这种特征,导致了 SMP 服务器的主要问题,那就是它的扩展能力非常有限。对于 SMP 服务器而言,每一个共享的环节都可能造成 SMP 服务器扩展时的瓶颈,而最受限制的则是内存。由于每个 CPU 必须通过相同的内存总线访问相同的内存资源,因此随着 CPU 数量的增加,内存访问冲突将迅速增加,最终会造成 CPU 资源的浪费,使 CPU 性能的有效性大大降低。实验证明,SMP 服务器 CPU 利用率最好的情况是 2 至 4 个 CPU。=> CPU 扩展性差,内存是瓶颈

综合来看,SMP 架构广泛的适用于 PC 和移动设备领域,能显著提升并行计算性能。但 SMP 却不适合超大规模的服务器端场景,例如:云计算。

3.2 NUMA

现代计算机系统中,CPU 的处理速度已经超过了主存的读写速度,限制计算机计算性能的瓶颈转移到了存储器带宽之上。SMP 由于集中式共享存储器的设计限制了 CPU 访问存储器的频次,导致 CPU 可能会经常处于对数据访问的饥饿状态。

NUMA 的设计理念是:将 CPU 和存储器划分到不同的节点 (NUMA Node),它们都拥有几乎相等的资源。在 NUMA 节点内部会通过自己的存储总线访问内部的本地内存,而所有 NUMA 节点都可以通过主板上的共享总线来访问其他节点的远程内存。

NUMA 服务器的基本特征是具有多个 CPU 模块,每个 CPU 模块由多个 CPU (如4个) 组成,并且具有独立的本地内存、I/O槽口等。

image-20231206165158978

由于其节点之间可以通过互联模块 (如称为Crossbar Switch) 进行连接和信息交互,因此每个CPU可以访问整个系统的内存 (这是NUMA系统与MPP系统的重要差别)。显然,访问本地内存的速度将远远高于访问远地内存 (系统内其它节点的内存) 的速度,NUMA 非一致性存储访问由此得名。而且因为节点划分并没有实现真正意义上的存储隔离,所以 NUMA 同样只会保存一份操作系统和数据库系统的副本

NUMA「多节点」的结构设计能够在一定程度上解决 SMP 低存储带宽的问题。假如有一个 4 NUMA 节点的系统,每一个 NUMA 节点内部具有 1GB/s 的存储带宽,外部共享总线也同样具有 1GB/s 的带宽。理想状态下,如果所有的处理器总是访问本地内存的话,那么系统就拥有了 4GB/s 的存储带宽能力,此时的每个节点可以近似的看作为一个 SMP(这种假设为了便于理解,并不完全正确);相反,在最不理想的情况下,如果所有处理器总是访问远程内存的话,那么系统就只能有 1GB/s 的存储带宽能力。

除此之外,使用外部共享总线时可能会触发 NUMA 节点间的 Cache 同步异常,这会严重影响内存密集型工作负载的性能。当 I/O 性能至关重要时,共享总线上的 Cache 资源浪费,会让连接到远程 PCIe 总线上的设备(不同 NUMA 节点间通信)作业性能急剧下降。

由于这个特性,基于 NUMA 开发的应用程序应该尽可能避免跨节点的远程内存访问。因为,跨节点内存访问不仅通信速度慢,还可能需要处理不同节点间内存和缓存的数据一致性。多线程在不同节点间的切换,是需要花费大成本的。

虽然 NUMA 相比于 SMP 具有更好的 CPU 扩展性,但因为 NUMA 没有实现彻底的主存隔离。所以 NUMA 远没有达到无限扩展的水平,最多可支持几百个 CPU。这是为了追求更高的并发性能所作出的妥协,一个节点未必就能完全满足多并发需求,多节点间线程切换实属一个折中的方案。这种做法使得 NUMA 具有一定的伸缩性,更加适合应用在服务器端

由于访问远地内存的延时远远超过本地内存,因此当 CPU 数量增加时,系统性能不能线性增加。如 HP 公司发布 Superdome 服务器时,它已经公布了 HP 其它 UNIX 结果发现,服务器的相对性能值为 64 路 CPU的Superdome (NUMA结构) 的相对性能值是 20,而 8 路 N4000 (共享的SMP结构) 的相对性能值为 6.3。从这个结果可以看出,数量是 8 倍 CPU 换来的只是性能提升的三倍。

3.3 MPP

既然 NUMA 扩展性的限制是没有完全实现资源 (e.g. 存储器、互联模块) 的隔离性,那么 MPP 的解决思路就是为 CPU 提供彻底的独立资源

MPP 拥有多个真正意义上的独立的 SMP 单元,每个 SMP 单元独占并只会访问自己本地的内存、I/O 等资源,SMP 单元间通过节点互联网络进行信息交互 (称为数据重分配,Data Redistribution),是一个完全无共享 (Share Nothing) 的 CPU 计算平台结构。

MPP 的典型特征就是「多 SMP 单元组成,单元之间完全无共享」。除此之外,MPP 结构还具有以下特点:

  • 每个 SMP 单元内都可以包含一个操作系统副本,所以每个 SMP 单元都可以运行自己的操作系统、数据库等。
  • MPP 需要一种复杂的机制来调度和平衡各个节点的负载和并行处理过程,目前一些基于 MPP 技术的服务器往往通过系统级软件(e.g. 数据库)来屏蔽这种复杂性。🌰 NCR 的 Teradata 就是基于 MPP 技术的一个关系数据库软件,基于此数据库来开发应用时,不管后台服务器由多少个节点组成,开发人员所面对的都是同一个数据库系统,而不需要考虑如何调度其中某几个节点的负载。
  • MPP 架构的局部区域内存的访存延迟低于远地内存访存延迟,因此 Linux 会自定采用局部节点分配策略,当一个任务请求分配内存时,首先在处理器自身节点内寻找空闲页,如果没有则到相邻的节点寻找空闲页,如果还没有再到远地节点中寻找空闲页,在操作系统层面就实现了访存性能优化

因为完全的资源隔离特性,所以 MPP 的扩展性是最好的,理论上其扩展无限制,目前的技术可实现 512 个节点互联,数千个 CPU,多应用于大型机。目前,该行业还没有节点互联网的标准 NCR 的 Bynet,IBM 的 SPSwitch,它们都采用了不同的内部实现机制。但节点互联网仅供MPP服务器内部使用,对用户而言是透明的。

NUMA 🆚 MPP

image-20231206180515884

相同点:都由多个 SMP 节点组成,每个节点都有自己的CPU、内存、I/O,节点之间的信息交互可以通过节点互联机制进行。

不同点:

  1. 节点互联机制不同NUMA 的节点互联机制是在同一个物理服务器内部实现的,当某个 CPU 需要进行远地内存访问时,它必须等待,这也是为什么 NUMA 服务器无法实现 CPU 增加时性能线性扩展MPP 的节点互联机制是在不同的 SMP 节点外部通过 I/O 实现的,每个节点只访问本地内存和存储,节点之间的信息交互与节点本身的处理是并行进行的。因此 MPP 在增加节点时性能基本上可以实现线性扩展。SMP所有的 CPU 资源是共享的,因此完全实现线性扩展。
  2. 内存访问机制不同:NUMA 服务器中,任意一节点的 CPU 都可访问整个系统的内存,但远程访问的性能远低于本地内存访问,因此在开发应用程序时应尽量避免远程内存访问。MPP服务器中,每个节点只访问本地内存。

NUMA 的优势:从NUMA架构来看,它可以在一个物理服务器内集成许多 CPU,使系统具有较高的事务处理能力,由于远地内存访问时延远长于本地内存访问,因此需要尽量减少不同CPU模块之间的数据交互。显然,NUMA 架构更适用于 OLTP 事务处理环境,当用于数据仓库环境时,大量复杂的数据处理必然导致大量的数据交互,将使 CPU 的利用率大大降低。

MPP 的优势:相对而言,MPP 服务器架构的并行处理能力更好,更适合复杂的数据综合分析和处理环境。当然,它需要支持 MPP 技术的关系数据库系统屏蔽节点之间负载平衡和调度的复杂性。此外,这种并行处理能力也与节点互联网有很大关系。显然,为了充分发挥整个系统的性能,适应 OLAP 数据仓库环境 MPP 节点互联网的服务器 I/O 性能应该非常突出。

4 总结

传统的多核运算是使用 SMP(Symmetric Multi-Processor) 模式:将多个 CPU 与一个集中的存储器和 I/O 总线相连。所有处理器只能访问同一个物理存储器,因此SMP系统有时也被称为一致存储器访问 (UMA) 结构体系,一致性意指无论在什么时候,CPU 只能为内存的每个数据保持或共享唯一一个数值。很显然,SMP的缺点是可伸缩性有限,因为在存储器和I/O接口达到饱和的时候,增加 CPU 并不能获得更高的性能,与之相对应的有 AMP 架构,不同核之间有主从关系,如一个核控制另外一个核的业务,可以理解为多核系统中控制平面和数据平面。

NUMA 模式是一种分布式存储器访问方式处理器可以同时访问不同的存储器地址,大幅度提高并行性。 NUMA 模式下,CPU 被划分成多个”节点” (node), 每个节点被分配有的本地存储器空间。 所有节点中的 CPU 都可以访问全部的系统物理存储器,但是访问本节点内的存储器所需要的时间,比访问某些远程节点内的存储器所花的时间要少得多。

NUMA 的主要优点是伸缩性。NUMA 体系结构在设计上已超越了 SMP 体系结构在伸缩性上的限制。通过 SMP,所有的内存访问都传递到相同的共享内存总线。这种方式非常适用于 CPU 数量相对较少的情况,但不适用于具有几十个甚至几百个 CPU 的情况,因为这些 CPU 会相互竞争对共享内存总线的访问。NUMA 通过限制任何一条内存总线上的 CPU 数量并依靠高速互连来连接各个节点,从而缓解了这些瓶颈状况。

NUMA 扩展性的限制是没有完全实现资源 (e.g. 存储器、互联模块) 的隔离性,那么 MPP 的解决思路就是为 CPU 提供彻底的独立资源

MPP 拥有多个真正意义上的独立的 SMP 单元,每个 SMP 单元独占并只会访问自己本地的内存、I/O 等资源,SMP 单元间通过节点互联网络进行信息交互 (称为数据重分配,Data Redistribution),是一个完全无共享 (Share Nothing) 的 CPU 计算平台结构。

因为完全的资源隔离特性,所以 MPP 的扩展性是最好的,理论上其扩展无限制,目前的技术可实现 512 个节点互联,数千个 CPU,多应用于大型机

参考链接

多核处理器 (百度百科)

OpenStack Nova 高性能虚拟机之 NUMA 架构

异核通信框架(1)——SMP和AMP架构

服务器SMP、NUMA、MPP体系学习笔记

本文作者:Joey-Wang

本文链接:https://www.cnblogs.com/joey-wang/p/17880611.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   Joey-Wang  阅读(74)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
展开