跳至內容

什麼是非統一記憶體存取(NUMA)?

非統一記憶體存取(NUMA)

非均勻記憶體存取(NUMA)是一種用於多處理器系統的電腦記憶體設計,其特點是記憶體存取時間取決於記憶體位置相對於處理器的位置。在NUMA架構中,每個處理器都有自己的本機記憶體。雖然它也可以存取連接到其他處理器的內存,但由於需要穿越互連網路並可能經過其他處理器,這種訪問速度較慢,從而引入了額外的延遲和頻寬爭用。

NUMA 的開發旨在解決傳統對稱多處理 (SMP) 系統的可擴展性限制,在傳統 SMP 系統中,所有處理器共享同一個記憶體池。 NUMA 透過將記憶體分組到更靠近每個處理器的位置,提高了記憶體存取效率和整體效能,尤其是在擁有大量中央處理器(CPU) 或核心的系統中。

現代作業系統和針對NUMA優化的應用程式能夠以一種將資料保留在執行計算的處理器附近的方式來分配內存,從而最大限度地減少延遲並提高吞吐量。 NUMA通常用於伺服器、高效能運算( HPC )系統以及需要大量記憶體和運算資源的企業級工作負載。

NUMA 的工作原理是什麼?

在NUMA系統中,架構被分割為多個節點。每個節點包含一個或多個處理器(或多個子處理器)。 CPU 處理器擁有多個插槽以及專用記憶體。這些節點相互連接,使處理器能夠存取本地記憶體和遠端記憶體。

存取本地記憶體(實體連接到相同節點的記憶體)速度更快,延遲更低。當處理器存取遠端記憶體(位於不同節點上的記憶體)時,由於節點間的互連路徑,會產生額外的延遲。這種延遲差異正是NUMA「非均勻」特性的體現。

現代NUMA系統依賴系統韌體、作業系統和應用程式的NUMA感知能力。 NUMA感知軟體會嘗試以一種能夠將任務及其記憶體集中在同一節點上的方式來分配記憶體和調度進程。這可以減少跨節點記憶體流量並優化效能。

NUMA 通常在具有兩個或多個核心的系統中實作。 CPU 插槽,例如伺服器和高效能運算平台。每個插槽都有自己的記憶體控制器和本地動態隨機存取記憶體 (DRAM),並透過系統互連,例如 Intel® Ultra 路徑互連(UPI)或AMD Infinity Fabric,連接插槽並在需要時允許存取遠端記憶體。

NUMA 和系統架構設計

隨著多路系統在現代化資料中心企業基礎架構中變得越來越普遍,了解NUMA對系統架構的影響至關重要。硬體供應商設計伺服器主機板, CPU 互連設計充分考慮了NUMA拓撲結構,確保處理器和記憶體庫之間實現最佳資料路徑。這直接影響應用程式效能,尤其對於跨多個核心和插槽進行橫向擴展的工作負載而言更是如此。

設計考慮因素還包括記憶體分配規則、BIOS 級 NUMA 配置設定以及組件的實體佈局。系統架構師必須考慮應用程式如何與記憶體和運算資源交互,以確保硬體效能得到充分利用。硬體配置最佳化不足會導致 NUMA 效能欠佳,例如遠端記憶體存取過多和延遲增加。

NUMA系統的軟體優化

為了使NUMA發揮其全部性能潛力,軟體必須經過設計,或至少進行配置,以感知底層記憶體拓撲結構。例如,作業系統… Linux 和Windows 伺服器包含核心級的 NUMA 支持,從而啟用處理器親和性、記憶體綁定和 NUMA 感知調度等功能。這些機制有助於確保執行緒被調度到能夠快速存取其最常用記憶體區域的 CPU 上。

應用程式開發人員和系統管理員可以透過利用 NUMA 特有的 API 和調優實踐來進一步提升效能。平行程式框架(例如 OpenMP 和 MPI)提供了控制執行緒放置和記憶體局部性的選項。對於企業級應用程式和HPC 對於工作負載而言,這種程度的最佳化可以顯著降低記憶體延遲並提高吞吐量,尤其是在具有大記憶體佔用的多路系統上運行時。

NUMA 應用案例及優勢

NUMA 為需要高並行性和大記憶體佔用的工作負載提供效能優勢。透過減少跨節點記憶體存取並更好地利用可用頻寬,NUMA 增強了可擴展性,並有助於消除多路架構中的瓶頸。

高效能運算( HPC )

高效能運算領域,科學模擬、建模和大規模資料分析工作負載均可受益於 NUMA,因為它能降低跨多個記憶體通道的存取延遲。 CPU 插座。

虛擬化平台

可以對虛擬機器管理程式和虛擬機器進行最佳化,使其使用 NUMA 感知調度,從而確保虛擬 CPU 及其記憶體保持在同一實體節點上。

記憶體資料庫

NUMA 有助於在將大量資料直接儲存在 RAM 中的資料庫系統中保持低延遲記憶體存取。

大型企業應用

NUMA 提高了企業軟體(例如企業資源計劃 ( ERP ) 系統)的響應速度和吞吐量,這些軟體需要存取跨多個核心的大型記憶體空間。

常見問題解答

  1. 什麼是NUMA聚類?
    NUMA叢集是指在支援NUMA架構的系統中,將處理器和記憶體組織成節點或叢集。每個叢集都有自己的本地內存,叢集內的處理器可以以更低的延遲存取這些內存。這種架構透過減少對共享記憶體資源的爭用,提高了效能和可擴展性。
  2. 什麼是NUMA拓樸結構?
    NUMA拓撲結構描述了系統中CPU、記憶體和互連的物理和邏輯排列方式。它定義了哪些處理器連接到哪些記憶體區域,以及節點之間如何進行存取。了解系統的拓撲結構有助於優化記憶體分配和應用程式效能。
  3. NUMA 對虛擬化重要嗎?
    是的,NUMA在虛擬化中發揮著至關重要的作用,它有助於確保最佳的記憶體和CPU 虛擬機器的放置。當虛擬機器管理程式支援 NUMA 時,它可以將虛擬 CPU 及其關聯的記憶體保留在同一個實體節點內,從而降低延遲並避免效能損失。
  4. 如何在系統上啟用NUMA?
    現代伺服器平台通常預設啟用 NUMA 支援。在某些情況下,可能需要在系統 BIOS 或 UEFI 設定中手動啟動。啟用後,系統會將 NUMA 拓撲結構暴露給作業系統,以便優化調度和記憶體分配。
  5. 如果軟體不支援NUMA會發生什麼事?
    如果軟體不支援NUMA架構,則跨節點存取記憶體的效率可能會降低,從而導致更高的延遲和更低的效能。這在具有大型記憶體池的多路系統中,尤其是在高負載情況下,可能會成為效能瓶頸。