NUMA全名是Non-Uniform Memory Access 或 Non-Uniform Memory Architecture
由於處理器運算時需要使用記憶體,而處理器運算的速度又大於記憶體,因此整體速度會受到記憶體的限制。所以,如果處理器減少對記憶體存取的次數,可提供更快的執行效率。硬體製造商提供更快速的 L3 快取記憶體( Cache Memory ),可降低存取一般記憶體的次數,但這只是有限的解決方案。
另一方面,增加處理器的數目也是提升整體速度的方法。但在多處理器的情況下,會在記憶體這方面產生前一段所提及的問題,反而拖累整體速度。因為記憶體在同一時間只能讓一個處理器對它做存取動作,這意謂著其它處理器將處於等待的狀態,虛耗時間。 NUMA 架構對這個問題提供了可擴充的解決方案。利用 NUMA ,可以分割記憶體區塊,讓不同處理器可分別使用不同區塊的記憶體。這樣可以避免多處理器同時企圖存取同一區塊記憶體的問題,並改善這方面的速度。
然而,並非所有資料都使用在單一的運算任務(task)裡。多個處理器分工做同一件事,在運算執行過程及運算結束時,仍有可能對同一份資料做存取的動作。為解決這個問題,NUMA 可利用額外新增的軟硬體,將資料在不同的儲存處所之間來回搬動,並維持資料的一致性。不過這也會減慢一些速度。所以在利用 NUMA 提升整體速度這方面,也會受到運算任務的特徵 所影響。
NUMA node
由於處理器運算時脈不斷增快,因此在使用單一系統匯流排的情況下,要支援多處理器所需要的頻寬及其它潛在的需求變的更困難也更昂貴。於是在單一系統匯流排裡使用理想的處理器數目,可避免過多 CPU 產生效率上的浪費。大多數微軟視窗作業系統,在單一系統匯流排上支援四個處理器。
而這樣一個工作小組:一個系統匯流排、幾個處理器、一些記憶體,或一些I/O 次系統,可稱之為 node。硬體發展的趨勢是,高端伺服器可使用不只一個系統匯流排。如此一來,八個處理器就可分為二個 node 。
在這樣的架構下,在 Node 1 裡的CPU 若要存取 Node 2 裡的記憶體的資料,速度將會慢於存取同一個 node 裡的記憶體資料。由硬體製造廠商所組裝的超級電腦,常會提供專屬的連結界面來加大連結的頻寬,並降低存取遠端記憶體所產生的損耗,於是又產生了所謂的 ccNUMA 架構 - Cache coherent NUMA。
沒有留言:
張貼留言