理解 Kubernetes 中的 NUMA 架构
❝本文转自周淑科的博客,原文:https://izsk.me/2022/06/02/System-Understanding-NUMA-Architecture/,版权归原作者所有。欢迎投稿,投稿请添加微信好友:cloud-native-yang
最近在研究 kubernetes 下 NUMA 架构的支持 , 看到一篇关于 NUMA 的博文 , 就尝试翻译成了中文 , 原文地址 : Understanding NUMA Architecture[1]
设计电脑总是一种妥协。计算机的四个基本部件——中央处理单元 (CPU) 或处理器、内存、存储器和连接部件的电路板 (I/O 总线系统)——被尽可能巧妙地组合在一起,以创造出一台既划算又强大的机器。设计过程主要涉及处理器 (协处理器、多核设置)、内存类型和数量、存储 (磁盘、文件系统) 以及价格的优化。协同处理器和多核架构背后的理念是,在尽可能小的空间中,将操作分配到尽可能多的单个计算单元,并使并行执行计算指令更容易获得和负担得起。就内存而言,这是一个可以由单个计算单元处理的数量或大小的问题,以及哪种内存类型具有尽可能低的延迟。存储属于外部内存,其性能取决于磁盘类型、正在使用的文件系统、线程、传输协议、通信结构和附加的内存设备的数量。
I/O 总线的设计代表了计算机的主干,并显着地决定了上面列出的单个组件之间可以交换多少数据和多快的数据。排名第一的是用于高性能计算 (HPC) 领域的组件。截至 2020 年年中,高性能计算的当代代表产品有英伟达特斯拉和 DGX、Radeon Instinct 和英特尔 Xeon Phi gpu 加速器产品 (产品对比见 [引用 1,2])。
理解 NUMA
非统一内存访问 (NUMA) 描述了当代多处理系统中使用的共享内存架构。NUMA 是一个由多个节点组成的计算系统,所有节点共享聚合的内存 :每个 CPU 被分配自己的本地内存,并且可以从系统中的其他 CPU 访问内存,见 [引用 12,7]。
NUMA 是一个巧妙的系统,用于将多个中央处理单元 (CPU) 连接到计算机上任何数量的可用内存。单个 NUMA 节点通过可伸缩网络 (I/O 总线) 连接,这样 CPU 就可以系统地访问与其他 NUMA 节点关联的内存。
本地内存是 CPU 在特定 NUMA 节点中使用的内存。外部或远程内存是 CPU 从另一个 NUMA 节点获取的内存。术语 NUMA 比率描述了访问外部内存成本与访问本地内存成本的比率。比例越大,成本就越大,因此访问内存所需的时间就越长。
但是,它所花费的时间比 CPU 访问它自己的本地内存要长。本地内存访问是一个主要的优势,因为它结合了低延迟和高带宽。相比之下,访问属于任何其他 CPU 的内存具有更高的延迟和更低的带宽性能。
回顾 : 共享内存多处理器的发展
Frank Dennemann[引用 8] 指出,现代系统架构不允许真正的统一内存访问 (UMA),即使这些系统是专门为此目的而设计的。简单地说,并行计算的思想是让一组处理器协同计算给定的任务,从而加快传统的顺序计算。
正如 Frank Dennemann[引用 8] 所解释的那样,在 20 世纪 70 年代早期,随着关系数据库系统的引入,“对能够服务多个并发用户操作和过多数据生成的系统的需求成为主流”。“尽管单处理器的性能令人印象深刻,但多处理器系统能够更好地处理这种工作负载。为了提供性价比高的系统,共享内存地址空间成为研究的重点。早期,使用交叉开关的系统被提倡,然而随着这种设计的复杂性随着处理器的增加而增加,这使得基于总线的系统更有吸引力。总线系统中的处理器 (可以) 通过在总线上发送请求来访问整个内存空间,这是一种尽可能优化地使用可用内存的非常划算的方式。”
然而,基于总线的计算机系统有一个瓶颈——有限的带宽会导致可伸缩性问题。系统中添加的 cpu 越多,每个节点可用的带宽就越少。此外,添加的 cpu 越多,总线就越长,因此延迟就越高。
大多数 cpu 都是在二维平面上构建的。cpu 还必须添加集成内存控制器。对于每个 CPU 核心,有四个内存总线 (上、下、左、右) 的简单解决方案允许完全可用的带宽,但仅此而已。cpu 在很长一段时间内都停滞在 4 核状态。当芯片变成 3D 时,在上面和下面添加痕迹允许直接总线穿过对角线相反的 cpu。在卡上放置一个四核 CPU,然后连接到总线,这是合乎逻辑的下一步。
如今,每个处理器都包含许多核心,这些核心都有一个共享的片上缓存和片外内存,并且在服务器内不同内存部分的内存访问成本是可变的。
提高数据访问效率是当前 CPU 设计的主要目标之一。每个 CPU 核都被赋予了一个较小的一级缓存 (32 KB) 和一个较大的二级缓存 (256 KB)。各个核心随后共享几个 MB 的 3 级缓存,其大小随着时间的推移而大幅增长。
为了避免缓存丢失 (请求不在缓存中的数据),需要花费大量的研究时间来寻找合适的 CPU 缓存数量、缓存结构和相应的算法。关于缓存 snoop 协议 [引用 4] 和缓存一致性 [引用 3,5] 的更详细的解释,以及 NUMA 背后的设计思想,请参见 [引用 8]。
NUMA 的软件支持
有两种软件优化措施可以提高支持 NUMA 架构的系统的性能—处理器关联性和数据放置。正如 [引用 19] 中解释的那样,“处理器关联 […] 允许将进程或线程绑定到单个 CPU 或一系列 CPU,以便进程或线程只在指定的 CPU 或 CPU 上执行,而不是在任何 CPU 上执行。”术语“数据放置”是指将代码和数据尽可能地保存在内存中的软件修改。
不同的 UNIX 和 UNIX 相关操作系统通过以下方式支持 NUMA(以下列表来自 [引用 14]):
Silicon Graphics IRIX 支持 ccNUMA 架构超过 1240 CPU 与 Origin 服务器系列。 Microsoft Windows 7 和 Windows Server 2008 R2 增加了对 64 个逻辑核上 NUMA 架构的支持。 Linux 内核的 2.5 版本已经包含了基本的 NUMA 支持,在后续的内核版本中得到了进一步的改进。Linux 内核的 3.8 版带来了新的 NUMA 基础,允许在以后的内核版本 [引用 13] 中开发更有效的 NUMA 策略。Linux 内核的 3.13 版本带来了大量的策略,旨在将进程放在靠近其内存的位置,以及对各种情况的处理,例如在进程之间共享内存页,或使用透明的巨大页 ; 新的系统控制设置允许启用或禁用 NUMA 平衡,以及配置各种 NUMA 内存平衡参数 [引用 15]。 Oracle 和 OpenSolaris 都采用了引入逻辑组的 NUMA 架构。 FreeBSD 在 11.0 版本中添加了初始 NUMA 亲和性和策略配置。
蔡宁在《Computer Science and Technology, Proceedings of the International Conference (CST2016)》一书中提出 NUMA 架构的研究主要集中在高端计算环境,提出了 NUMA-aware Radix Partitioning (NaRP),优化 NUMA 节点中的共享缓存的性能,以加速商业智能应用程序。因此,NUMA 代表共享内存 (SMP) 系统与几个处理器 [引用 6] 之间的中间地带。
NUMA 和 Linux
如上所述,Linux 内核从版本 2.5 开始就支持 NUMA 了。Debian GNU/Linux 和 Ubuntu 都提供 numactl[引用 16] 和 numad[引用 17] 两个软件包对进程优化的 NUMA 支持。在 numactl 命令的帮助下,您可以列出系统 [引用 18] 中可用 NUMA 节点的清单 :
$ numactl --hardware
available: 2 nodes (0-1)
node 0 cpus: 0 1 2 3 4 5 6 7 16 17 18 19 20 21 22 23
node 0 size: 8157 MB
node 0 free: 88 MB
node 1 cpus: 8 9 10 11 12 13 14 15 24 25 26 27 28 29 30 31
node 1 size: 8191 MB
node 1 free: 5176 MB
node distances:
node 0 1
0: 10 20
1: 20 10
NumaTop 是 Intel 开发的一个有用的工具,用于监视运行时内存位置和分析 NUMA 系统中的进程 [引用 10,11]。该工具可以识别潜在的 NUMA 相关性能瓶颈,从而帮助重新平衡内存 /CPU 分配,以最大限度地发挥 NUMA 系统的潜力。有关更详细的描述,请参阅 [引用 9]。
使用场景
支持 NUMA 技术的计算机允许所有 cpu 直接访问整个内存——cpu 将其视为一个单一的线性地址空间。这可以更有效地使用 64 位寻址方案,从而更快地移动数据、更少地复制数据、更容易地进行编程。
NUMA 系统对于服务器端应用程序非常有吸引力,比如数据挖掘和决策支持系统。此外,有了这种架构,为游戏和高性能软件编写应用程序变得更加容易。
结论
总之,NUMA 架构解决了可伸缩性问题,这是它的主要优点之一。在 NUMA CPU 中,一个节点将拥有更高的带宽或更低的延迟来访问同一节点上的内存 (例如,本地 CPU 在远程访问的同时请求内存访问 ; 优先级在本地 CPU 上)。如果将数据本地化到特定的进程 (以及处理器),这将显着提高内存吞吐量。缺点是将数据从一个处理器移动到另一个处理器的成本较高。只要这种情况不经常发生,NUMA 系统将优于具有更传统架构的系统。
引用
Compare NVIDIA Tesla vs. Radeon Instinct, https://www.itcentralstation.com/products/comparisons/nvidia-tesla_vs_radeon-instinct Compare NVIDIA DGX-1 vs. Radeon Instinct, https://www.itcentralstation.com/products/comparisons/nvidia-dgx-1_vs_radeon-instinct Cache coherence, Wikipedia, https://en.wikipedia.org/wiki/Cache_coherence Bus snooping, Wikipedia, https://en.wikipedia.org/wiki/Bus_snooping Cache coherence protocols in multiprocessor systems, Geeks for geeks, https://www.geeksforgeeks.org/cache-coherence-protocols-in-multiprocessor-system/ Computer science and technology – Proceedings of the International Conference (CST2016), Ning Cai (Ed.), World Scientific Publishing Co Pte Ltd, ISBN: 9789813146419 Daniel P. Bovet and Marco Cesati: Understanding NUMA architecture in Understanding the Linux Kernel, 3rd edition, O’Reilly, https://www.oreilly.com/library/view/understanding-the-linux/0596005652/ Frank Dennemann: NUMA Deep Dive Part 1: From UMA to NUMA, https://frankdenneman.nl/2016/07/07/numa-deep-dive-part-1-uma-numa/ Colin Ian King: NumaTop: A NUMA system monitoring tool, http://smackerelofopinion.blogspot.com/2015/09/numatop-numa-system-monitoring-tool.html Numatop, https://github.com/intel/numatop Package numatop for Debian GNU/Linux, https://packages.debian.org/buster/numatop Jonathan Kehayias: Understanding Non-Uniform Memory Access/Architectures (NUMA), https://www.sqlskills.com/blogs/jonathan/understanding-non-uniform-memory-accessarchitectures-numa/ Linux Kernel News for Kernel 3.8, https://kernelnewbies.org/Linux_3.8 Non-uniform memory access (NUMA), Wikipedia, https://en.wikipedia.org/wiki/Non-uniform_memory_access Linux Memory Management Documentation, NUMA, https://www.kernel.org/doc/html/latest/vm/numa.html Package numactl for Debian GNU/Linux, https://packages.debian.org/sid/admin/numactl Package numad for Debian GNU/Linux, https://packages.debian.org/buster/numad How to find if NUMA configuration is enabled or disabled?, https://www.thegeekdiary.com/centos-rhel-how-to-find-if-numa-configuration-is-enabled-or-disabled/ Processor affinity, Wikipedia, https://en.wikipedia.org/wiki/Processor_affinity
引用链接
[1]Understanding NUMA Architecture: https://linuxhint.com/understanding_numa_architecture/
你可能还喜欢
点击下方图片即可阅读
2022-06-07
2022-06-06
2022-06-01
2022-05-29
云原生是一种信仰 🤘
关注公众号
后台回复◉k8s◉获取史上最方便快捷的 Kubernetes 高可用部署工具,只需一条命令,连 ssh 都不需要!
点击 "阅读原文" 获取更好的阅读体验!
发现朋友圈变“安静”了吗?