【轉】CPU優化(4)NUMA架構

轉自 http://jimshu.blog.51cto.com/3171847/1266977/html

1、服務器系統架構數據庫

  從系統架構來看,目前的商用服務器大致能夠分爲如下三類服務器

1. 即對稱多處理器結構(SMP:Symmetric Multi-Processor),,網絡

  在SMP架構中,每一個CPU對稱工做,各CPU共享相同的物理內存,每一個 CPU訪問內存中的任何地址所需時間是相同的,所以SMP也被稱爲一致存儲器訪問結構(UMA:Uniform Memory Access)。架構

  對SMP服務器進行擴展的主要方法有:增長內存、更高的CPU工做頻率、添加CPU、改善I/O性能。 dom

  可是,SMP架構中的全部資源(CPU、內存、I/O等)都是共享的,致使了它的擴展能力很是有限。最受限制的則是內存,因爲每一個CPU必須經過相同的內存總線訪問相同的內存資源,所以隨着CPU數量的增長,內存訪問衝突將迅速增長,最終會形成CPU資源的浪費,使 CPU性能的有效性大大下降。實驗證實,SMP架構時,CPU利用率最好的狀況是2至4個CPU。性能

 

 

2. 大規模並行處理結構(MPP:Massive Parallel Processing)優化

  由多個SMP服務器(每一個SMP服務器稱節點)經過節點互聯網絡鏈接而成,每一個節點只訪問本身的本地資源(內存、存儲等),是一種徹底無共享(Share Nothing)結構,於是擴展能力最好,理論上其擴展無限制,目前的技術可實現512個節點互聯,數千個CPU。目前業界對節點互聯網絡暫無標準,如 NCR的Bynet,IBM的SPSwitch,它們都採用了不一樣的內部實現機制。但節點互聯網僅供MPP服務器內部使用,對用戶而言是透明的。操作系統

  在MPP系統中,每一個SMP節點也能夠運行本身的操做系統、數據庫等。可是每一個節點內的CPU不能訪問另外一個節點的內存,節點之間的信息交互只能經過節點互聯網絡實現。 線程

  可是MPP服務器還須要一種複雜的機制來調度和平衡各個節點的負載和並行處理過程。目前一些基於MPP技術的服務器每每經過系統級軟件(如數據庫)來屏蔽這種複雜性。舉例來講,NCR的Teradata就是基於MPP技術的一個關係數據庫軟件,基於此數據庫來開發應用時,無論後臺服務器由多少個節點組成,開發人員所面對的都是同一個數據庫系統,而不須要考慮如何調度其中某幾個節點的負載。

  SQL Server 2008 R2 PDW(並行數據倉庫,以前稱之爲「Madison」)版本採用MPP架構,能夠對大型數據表進行分區,並將分區存儲在多個物理節點當中,每個節點均有其獨佔的CPU資源、內存資源、以及存儲資源,而且各自運行獨立的SQL Server實例,這種模型稱之爲Ultra Shared Nothing。全部組件彼此間都是平衡的,從而消除了性能瓶頸。

  MPP的節點互聯機制是在不一樣的SMP服務器外部經過I/O 實現的,每一個節點只訪問本地內存和存儲,節點之間的信息交互與節點自己的處理是並行進行的。所以MPP在增長節點時性能基本上能夠實現線性擴展。

 

 

3. 非一致內存訪問結構(NUMA:Non-Uniform Memory Access)

 

  在NUMA架構中有多個CPU模塊,每一個CPU模塊由多個CPU組成,而且具備獨立的本地內存、I/O槽口等。因爲其節點之間能夠經過互聯模塊(如稱爲Crossbar Switch)進行鏈接和信息交互,所以每一個CPU能夠訪問整個系統的內存。顯然,訪問本地內存的速度將遠遠高於訪問遠地內存(系統內其它節點的內存)的速度,這也是非一致內存訪問的由來。

  從架構來看,NUMA與MPP具備許多類似之處:它們都由多個節點組成,每一個節點都具備本身的CPU、內存、I/O,節點之間均可以經過節點互聯機制進行信息交互。可是又有很大的不一樣:

(1)節點互聯機制

  NUMA的節點互聯機制是在同一個物理服務器內部實現的,當某個CPU須要進行遠地內存訪問時,它必須等待,這也是NUMA服務器沒法實現CPU增長時性能線性擴展的主要緣由。

(2)內存訪問機制

  在NUMA服務器內部,任何一個CPU能夠訪問整個系統的內存,但遠地訪問的性能遠遠低於本地內存訪問,所以在開發應用程序時應該儘可能避免遠地內存訪問。 

 

 

2、NUMA的優點與侷限性

1. 優點

  利用NUMA技術,能夠較好地解決原來SMP系統的擴展問題,在一個物理服務器內能夠支持上百個CPU。比較典型的NUMA服務器的例子包括HP的Superdome、SUN15K、IBMp690等。

 

2. 侷限性

  在NUMA架構中,因爲訪問遠地內存的延時遠遠超過本地內存,所以當CPU數量增長時,系統性能沒法線性增長。因爲這個特色,爲了更好地發揮系統性能,開發應用程序時須要儘可能減小不一樣CPU模塊之間的信息交互。

  如HP公司發佈Superdome服務器時,曾公佈了它與HP其它UNIX服務器的相對性能值,結果發現,64路CPU的Superdome (NUMA結構)的相對性能值是20,而8路N4000(共享的SMP結構)的相對性能值是6.3。從這個結果能夠看到,8倍數量的CPU換來的只是3倍性能的提高。

 

 

3、處理器組

  NUMA能夠解決手動配置處理器組。

 

 

4、SQL Server中的NUMA

  SQL Server 2000 SP4 開始對NUMA提供有限的 NUMA 支持,SQL Server 2005 有了大量重要的改進。SQL Server 2008對NUMA徹底支持和優化,內存訪問會盡可能使用離CPU最近的內存,以提升性能。

  《SQL Server 如何支持 NUMA》 http://msdn.microsoft.com/zh-cn/library/ms180954(v=SQL.105).aspx

 

1. CPU編號

  2個物理CPU,4核,超線程,總共爲2*4*2=16個邏輯CPU。以下圖所示:

 

2. SSMS中查看NUMA

 

3. 任務管理器中查看CPU負載

  在此實驗中,運行了一個較大負荷的SQL Server查詢,而後在任務管理器中查看,可見大多數的操做都在集中在某一個NumaNode執行。

 

5、SQL Server 中的軟件NUMA

  推薦使用硬件NUMA,因這它是在硬件層面上得以支持。如何才能知道本機是否有硬件NUMA呢? 最好的辦法是問硬件供應商了。

  若是硬件自己不支持NUMA,還能夠在軟件層面上設置NUMA。 http://www。e800。com。cn/articles/2011/1116/498746.shtml

  軟件NUMA只是對CPU進行分組,並不會改變內存。所以對於內存來說,仍是隻有一個節點,因此兩個NUMA節點訪問的都是同一塊內存。而增長軟件NUMA結點的好處在於,SQL Server會針對每個軟件NUMA結點,多一個LazyWriter的線程,若是系統在LazyWriter上是性能瓶頸的話,引入軟件NUMA則能夠有效提高性能。

 

 

本文結語:

  經過NUMA技術,能夠擴展性能,在一個物理服務器內能夠支持上百個CPU。使用硬件NUMA,請諮詢硬件供應商。

相關文章
相關標籤/搜索