Linux內存管理之UMA模型和NUMA模型


一、共享存儲型多處理機模型

  共享存儲型多處理機模型有兩種:

    • 均勻存儲器存取(Uniform-Memory-Access,簡稱UMA)模型 (一致存儲器訪問結構)
    • 非均勻存儲器存取(Nonuniform-Memory-Access,簡稱NUMA)模型 (非一致存儲器訪問結構)

二、UMA模型和NUMA模型

2.1 UMA模型

  UMA模型將多個處理機與一個集中的存儲器和I/O總線相連,物理存儲器被所有處理機均勻共享所有處理機對所有的存儲單元都具有相同的存取時間。SMP(對稱型多處理機)系統有時也被稱之為一致存儲器訪問(UMA)結構體系

  UMA模型的最大特點就是共享。在該模型下,所有資源都是共享的,包括CPU、內存、I/O等。也正是由於這種特性,導致了UMA模型可伸縮性非常有限,因為內存是共享的,CPUs都會通過一條內存總線連接到內存上,這時,當多個CPU同時訪問同一個內存塊時就會產生沖突,因此當存儲器和I/O接口達到飽和的時候,增加處理器並不能獲得更高的性能

2.2 NUMA模型

  NUMA模型的基本特征是具有多個CPU模塊,每個CPU模塊又由多個CPU core(如4個)組成,並具有本地內存、I/O接口等,所以可以支持CPU對本地內存的快速訪問。這里我們把CPU模塊稱為節點,每個節點被分配有本地存儲器,各個節點之間通過總線連接起來,這樣可以支持對其他節點中的本地內存的訪問,當然這時訪問遠的內存就要比訪問本地內存慢些。所有節點中的處理器都能夠訪問全部的物理存儲器。

  NUMA模型的最大優勢是伸縮性。與UMA不同的是,NUMA具有多條內存總線,可以通過限制任何一條內存總線上的CPU數量以及依靠高速互連來連接各個節點,從而緩解UMA的瓶頸。NUMA理論上可以無限擴展的,但由於訪問遠地內存的延時遠遠超過訪問本地內存,所以當CPU數量增加時,系統性能無法線性增加。

  當然,兩種模型的混合也是有可能的。

三、(N)UMA模型中的內存組織結構

  內核對一致和非一致內存訪問系統使用相同的數據結構,因此,對各種不同形式的內存布局,各個內存管理的算法幾乎沒有什么差別。在UMA系統中,內核只使用一個NUMA節點來管理整個系統內存。而內存管理的其他部分則相信它們是在處理一個偽NUMA系統。由於要引入NUMA,就需要存儲管理機制的支持,因此,Linux內存從2.4版本開始就提供了對NUMA的支持(作為一個編譯可選項CONFIG_NUMA)。

  在NUMA模式下:

    • 處理器被分割成多個節點,每個節點分配有自己的本地存儲器。所有節點中的處理器都能夠訪問整個物理存儲器,但是訪問遠端存儲器的時間要多於訪問本地存儲器的時間。
    • 內存被分割成多個區域稱為簇,依據簇與處理器的距離不同,訪問不同的簇的代碼也不同。

  Linux把物理內存划分為三個層次來管理:

    • 存儲節點(Node):是每個CPU對應的一個本地內存,在內核中表示為pg_data_t的實例。因為CPU被划分為多個節點,內存被划分為簇,每個CPU都對應一個本地物理內存,即一個CPU Node對應一個內存簇bank,即每個內存簇被認為是一個存儲節點。在UMA結構下,只存在一個存儲節點。
    • 內存域(Zone):每個物理內存節點Node被划分為多個內存域, 用於表示不同范圍的內存,內核可以使用不同的映射方式映射物理內存。
    • 頁面(Page):各個內存域都關聯一個數組,用來組織屬於該內存域的物理內存頁(頁幀)。頁面是最基本的頁面分配的單位。

  具體可參考下圖所示。

四、轉載於

https://zhuanlan.zhihu.com/p/353918963


免責聲明!

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



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