什麼是非統一內存訪問 (NUMA)?
目錄
Definition
NUMA 是一種多處理架構,其中內存分為緊密存儲和遠程存儲,內存訪問時間取決於內存相對於處理器的位置。
在 NUMA 下,處理器訪問本地內存的速度比非本地內存快。 NUMA 的優勢僅限於特定工作負載,尤其是在數據通常與特定任務或用戶密切相關的服務器上。
非統一內存訪問系統是具有多個系統總線的高級服務器平台。這些平台可以在一塊板上使用多個處理器,並且所有處理器都可以訪問主板上的所有內存。
NUMA 架構在邏輯上遵循 SMP(對稱多處理)架構的擴展。與 SMP 相比,NUMA 架構可擴展到更多數量的 CPU。
基本概念
現代 CPU 的運行速度比它們使用的主內存快得多。在計算和數據處理的早期階段,CPU 的運行速度通常比其內存慢。限制內存訪問次數是從現代計算機中提取高性能的關鍵。
但是,操作系統大小的急劇增加以及在操作系統上運行的應用程序通常會壓倒這些緩存處理改進。沒有 NUMA 的多處理器系統使問題更加嚴重。
NUMA 嘗試通過為每個處理器提供單獨的內存來解決此問題,避免在多個處理器解析相同內存時對性能造成影響。
此外,NUMA 系統包括用於在存儲庫之間移動數據的其他硬件或軟件。這會降低連接到這些銀行的處理器的速度。因此,NUMA 帶來的整體速度提升主要取決於正在運行的任務的性質。
緩存一致性 NUMA (ccNUMA)
幾乎所有 CPU 架構都利用內存訪問中的引用位置和少量稱為緩存的高速非共享內存。
當多個緩存存儲相同的內存位置時,ccNUMA 採用緩存控制器之間的處理器間通信來維護一致的內存映像。因此,當多個處理器嘗試快速且連續地訪問同一內存區域時,ccNUMA 的性能很差。
在操作系統中支持 NUMA 試圖通過以 NUMA 友好的方式分配處理器和內存並阻止使 NUMA 不友好訪問所需的調度和鎖定算法來降低此類訪問的頻率。
軟件支持
由於 NUMA 極大地影響內存訪問性能,因此需要進行一些軟件優化以允許調度線程和進程訪問其內存數據。
- Silicon Graphics IRIX 支持 ccNUMA 架構超過 1240 CPU 和 Origin Server 系列。
- Microsoft Windows 7 以及 Windows Server 2008 R2 增加了對 NUMA 架構的超過 64 個邏輯核心的支持。
- Java 7 添加了對 NUMA 感知內存分配器和垃圾收集器的支持。
- Linux 內核的 3.13 版引入了一些策略來將進程放置在內存附近並處理諸如使用大的透明頁面或在進程之間共享內存頁面等情況。新的 sysctl 設置允許啟用或禁用 NUMA 平衡以及配置各種 NUMA 內存平衡參數。
- OpenSolaris 使用 lgroups 為 NUMA 體系結構建模。
- FreeBSD 在 11.0 版中添加了初始 NUMA 相關性和策略配置
Bottom Line!
總之,通過本頁,您將對非統一內存訪問的定義、基本概念和工作方式有更好的了解。您還將知道 NUMA 會影響內存訪問性能,因此某些軟件會優化以支持它。