NUMA架構的個人理解

zongzw發表於2024-06-01

numa架構是並行處理器環境的產物。
之前透過卷cpu頻率的方式無法滿足更高計算效能的情況下,cpu向著多socket多core多thread的方式發展。
這種架構設計下,匯流排發生爭用,不再適合並行的需求。
於是,出現了這種新的架構設計,每個socket獨佔一部分記憶體空間,這樣就出現了針對某個socket的本地記憶體和遠端記憶體之分。
訪問本地記憶體的效率會高於遠端記憶體。

之前的單cpu架構下的記憶體方式機制為UMA(uniform Memory Access):CPU透過記憶體控制器再透過匯流排訪問記憶體。
新的多CPU架構下,記憶體控制器被繼承到每個socket中,訪問記憶體方式變為NUMA(non-uniform memory access)。
這種架構的好處是,很好的解決了並行多處理環境下匯流排的效能瓶頸問題,但是記憶體的訪問效率變得不固定,如果跨socket訪問遠端記憶體,效率會有折扣。
對於不頻繁申請記憶體的應用來說,訪問記憶體總是在本地,所以效率很高。
但是對於記憶體申請量比較大的應用,比如MYSQL,會頻繁申請記憶體,如果本地記憶體不夠,會嘗試清理無用的部分(許久沒有用的部分),導致記憶體頁面的置換,造成效能抖動。

CPU透過MESI狀態機機制保證資料寫入的一致性。

Linux下可以使用numactl來檢視記憶體的分配和使用(可以注意到遠端和本地記憶體及訪問失效矩陣)。

相關文章