理解 NUMA 架構

最近在研究 kubernetes 下 NUMA 架構的支持, 看到一篇關於 NUMA 的博文, 就嘗試翻譯成了中文, 原文地址: https://linuxhint.com/understanding_numa_architecture/

設計電腦總是一種妥協。計算機的四個基本部件——中央處理單元 (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]):

蔡寧在《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 系統將優於具有更傳統架構的系統

引用

  1. Compare NVIDIA Tesla vs. Radeon Instinct, https://www.itcentralstation.com/products/comparisons/nvidia-tesla_vs_radeon-instinct

  2. Compare NVIDIA DGX-1 vs. Radeon Instinct, https://www.itcentralstation.com/products/comparisons/nvidia-dgx-1_vs_radeon-instinct

  3. Cache coherence, Wikipedia, https://en.wikipedia.org/wiki/Cache_coherence

  4. Bus snooping, Wikipedia, https://en.wikipedia.org/wiki/Bus_snooping

  5. Cache coherence protocols in multiprocessor systems, Geeks for geeks, https://www.geeksforgeeks.org/cache-coherence-protocols-in-multiprocessor-system/

  6. Computer science and technology – Proceedings of the International Conference (CST2016), Ning Cai (Ed.), World Scientific Publishing Co Pte Ltd, ISBN: 9789813146419

  7. 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/

  8. Frank Dennemann: NUMA Deep Dive Part 1: From UMA to NUMA, https://frankdenneman.nl/2016/07/07/numa-deep-dive-part-1-uma-numa/

  9. Colin Ian King: NumaTop: A NUMA system monitoring tool, http://smackerelofopinion.blogspot.com/2015/09/numatop-numa-system-monitoring-tool.html

  10. Numatop, https://github.com/intel/numatop

  11. Package numatop for Debian GNU/Linux, https://packages.debian.org/buster/numatop

  12. Jonathan Kehayias: Understanding Non-Uniform Memory Access/Architectures (NUMA), https://www.sqlskills.com/blogs/jonathan/understanding-non-uniform-memory-accessarchitectures-numa/

  13. Linux Kernel News for Kernel 3.8, https://kernelnewbies.org/Linux_3.8

  14. Non-uniform memory access (NUMA), Wikipedia, https://en.wikipedia.org/wiki/Non-uniform_memory_access

  15. Linux Memory Management Documentation, NUMA, https://www.kernel.org/doc/html/latest/vm/numa.html

  16. Package numactl for Debian GNU/Linux, https://packages.debian.org/sid/admin/numactl

  17. Package numad for Debian GNU/Linux, https://packages.debian.org/buster/numad

  18. 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/

  19. Processor affinity, Wikipedia, https://en.wikipedia.org/wiki/Processor_affinity

感謝

作者要感謝 Gerold Rupprecht 在準備本文時的支持。

關於作者

  • 普萊克斯 · 內翰達 (Plaxedes Nehanda) 是一位多才多藝、自我驅動的多面手,他身兼多種職務,其中包括活動策劃、虛擬助理、轉錄員以及熱心的研究員,現居南非約翰內斯堡。

  • Prince K. Nehanda 是位於津巴布韋哈拉雷的 paflow Metering 公司的儀器和控制 (計量) 工程師。

  • 弗蘭克 · 霍夫曼 (Frank Hofmann) 在路上工作——最好是來自德國柏林、瑞士日內瓦和南非開普敦——他是 Linux- user 和 Linux Magazine 等雜誌的開發者、培訓師和作者,他也是 Debian 包管理書籍的合著者。

翻譯地址:https://izsk.me/2022/06/02/System-Understanding-NUMA-Architecture/

k8s 技術圈 專注容器、專注 kubernetes 技術......

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/l3S7FivUX-ynnWe7tLS-ww