NUMA(非一致性內存架構)


https://blog.csdn.net/vanbreaker/article/details/7492886

一、基本概念         

           非一致性內存架構(Non-uniform Memory Architecture)是為了解決傳統的對稱多處理(Symmetric Multi-processor)系統中的可擴展性問題而誕生的。在對稱多處理系統中,處理器共享北橋中的內存控制器來達到共同訪問外部內存和IO的目的,也就是說所有的處理器對內存和I/O的訪問方式和開銷都是相同的。在這種系統中,隨着更多的處理器被添加到SMP系統中,總線的競爭將會越來越大,系統的性能也必將隨之大打折扣。SMP系統的示意圖如下:

 

 

image.png

 

 

 

 

  

 

      NUMA系統擁有多條內存總線,於是將幾個處理器通過內存總線與一塊內存相連構成一個組,這樣整個龐大的系統就可以被分為若干個組,這個組的概念在NUMA系統中被稱為節點(node)。處於該節點中的內存被稱為本地內存(local memory),處於其他節點中的內存對於該組而言被稱為外部內存(foreign memory)。而節點又可以分為三類,即本地節點(local node),鄰居節點(neighbour node)和遠端節點(remote node).

 

本地節點:對於某個節點中的所有CPU,此節點稱為本地節點;

 

鄰居節點:與本地節點相鄰的節點稱為鄰居節點;

 

遠端節點:非本地節點或鄰居節點的節點,稱為遠端節點。

 

超立方體可以作為一種有效的拓撲來描述NUMA系統,它將系統中的節點數限制在2^C內,C是每個節點擁有的鄰居節點數,如下圖所示

image.png

 

 

以C=3為例,則對於節點1而言,2,3,5則為鄰居節點,4,6,7,8為遠端節點,顯然訪問開銷的關系為 本地節點<鄰居節點<遠端節點。

 

 

 

二、AMD Hyper-Transport

        古老的SMP系統只擁有一個位於北橋中的內存控制器,而如今更先進的做法是將內存控制器整合到CPU中去,這樣每個CPU都擁有自己的內存控制器,不會相互之間產生競爭。最先采用這種做法的一批處理器就是AMD在2003年推出的AMD Opteron系列處理器,其結構如下圖所示:

 

image.png

 

 

 

可以看到,每個CPU中都整合了一個內存控制器,並且CPU之間采用了一種Hyper-Transport的技術建立連接,這種連接可以使得CPU通過其他CPU來訪問外部內存,當然訪問開銷要比訪問本地內存更大。

 

 

 

 

 

三、操作系統的支持

      為了支持NUMA架構,OS的設計必須將內存分布的特點考慮進去。舉一個簡單的例子,假如一個進程運行在一個給定的處理器中,那么為這個進程所分配的物理內存就應該是該處理器的本地內存,而不是外部內存。為了避免情況變得更糟,OS還要注意避免將一個進程從一個節點給遷移到另一個節點。在一個普通的多處理系統中,OS就應該已經嘗試不去在處理器之間遷移進程,因為這意味着一個處理器的cache中的相關內容都將被丟失。如果在某種情況下必須進行遷移,那么OS可以隨意選擇一個空閑的處理器。但是在NUMA系統中,可選擇的新處理器將要受到一些限制,最重要的一點就是新處理器訪問內存的開銷不能比先前的處理器大,也就是說應該盡可能選擇本地節點中的處理器。當找不到符合條件的處理器,OS才能選擇其他的處理器。在這種較糟的情況下有兩種選擇,一種是如果這個進程只是暫時性的被遷移出去,那么可以再將其遷移回更加合適的處理器;如果不是暫時性的,那么可以將該進程的內存拷貝到新處理器的內存中,這樣就可以通過訪問拷貝的內存來消除訪問外部內存的開銷,顯然這是一種空間換時間的做法。

————————————————

版權聲明:本文為CSDN博主「橙色逆流」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接及本聲明。

原文鏈接:https://blog.csdn.net/vanbreaker/article/details/7492886


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM