SMP/NUMA/MPP三種系統架構

從平行計算系統的內存架構來看,目前的商用服務器大體可以分爲三類,即對稱多處理器結構(SMP:Symmetric Multi-Processor),非一致存儲訪問結構(NUMA:Non-Uniform Memory Access),以及海量並行處理結構(MPP:Massive Parallel Processing)。它們的特徵分別描述如下:

1. SMP(Symmetric Multi-Processor)

所謂對稱多處理器結構,如下圖所示,是指服務器中多個 CPU 對稱工作,無主次或從屬關係。各 CPU 共享相同的物理內存,每個 CPU 訪問內存中的任何地址所需時間是相同的,因此 SMP 也被稱爲一致存儲器訪問結構(UMA:Uniform Memory Access)。

對 SMP 服務器進行擴展的方式包括增加內存、使用更快的 CPU、增加 CPU、擴充 I/O(槽口數與總線數)以及添加更多的外部設備(通常是磁盤存儲)。SMP 服務器的主要特徵是共享,系統中所有資源(CPU、內存、I/O 等)都是共享的。也正是由於這種特徵,導致了 SMP 服務器的主要問題,那就是它的擴展能力非常有限。對於 SMP 服務器而言,每一個共享的環節都可能造成 SMP 服務器擴展時的瓶頸,而最受限制的則是內存。由於每個 CPU 必須通過相同的內存總線訪問相同的內存資源,因此隨着 CPU 數量的增加,內存訪問衝突將迅速增加,最終會造成 CPU 資源的浪費,使 CPU 性能的有效性大大降低。實驗證明,SMP 服務器 CPU 利用率最好的情況是2至4個 CPU。

2. NUMA(Non-Uniform Memory Access)

由於 SMP 在擴展能力上的限制,人們開始探究如何進行有效地擴展從而構建大型系統的技術,NUMA 就是這種努力下的結果之一。利用 NUMA 技術,可以把幾十個 CPU(甚至上百個 CPU)組合在一個服務器內。其 CPU 模塊結構如下圖所示,NUMA 服務器的基本特徵是具有多個 CPU 模塊,每個 CPU 模塊由多個 CPU(如4個)組成,並且具有獨立的本地內存、I/O 槽口等。

由於其節點之間可以通過互聯模塊(如稱爲 Crossbar Switch 或 Bus Interconnect)進行連接和信息交互,因此每個 CPU 可以訪問整個系統的內存(這是 NUMA 系統與 MPP 系統的重要差別)。顯然,訪問本地內存的速度將遠遠高於訪問遠地內存(系統內其它節點的內存)的速度,這也是非一致存儲訪問 NUMA 的由來。由於這個特點,爲了更好地發揮系統性能,開發應用程序時需要儘量減少不同 CPU 模塊之間的信息交互。利用 NUMA 技術,可以較好地解決原來 SMP 系統的擴展問題,在一個物理服務器內可以支持上百個 CPU。比較典型的 NUMA 服務器的例子包括 HP 的 Superdome、Sun 15K、IBM pSeries 690等。

但 NUMA 技術同樣有一定缺陷,由於訪問遠地內存的延時遠遠超過本地內存,因此當 CPU 數量增加時,系統性能無法線性增加。如 HP 公司發佈 Superdome 服務器時,曾公佈了它與 HP 其它 UNIX 服務器的相對性能值,結果發現,64路 CPU 的 Superdome (NUMA 結構)的相對性能值是20,而8路 N4000(共享的 SMP 結構)的相對性能值是6.3。從這個結果可以看到,8倍數量的 CPU 換來的只是3倍性能的提升。

3. MPP(Massive Parallel Processing)

和 NUMA 不同,MPP 提供了另外一種進行系統擴展的方式,它由多個 SMP 服務器通過一定的節點互聯網絡進行連接,協同工作,完成相同的任務,從用戶的角度來看是一個服務器系統。其基本特徵是由多個 SMP 服務器(每個 SMP 服務器稱節點)通過節點互聯網絡連接而成,每個節點只訪問自己的本地資源(內存、存儲等),是一種完全無共享(Share Nothing)結構,因而擴展能力最好,理論上其擴展無限制,目前的技術可實現512個節點互聯,數千個 CPU。

目前業界對節點互聯網絡暫無標準,如 NCR 的 Bynet,IBM 的 SPSwitch,它們都採用了不同的內部實現機制。但節點互聯網僅供 MPP 服務器內部使用,對用戶而言是透明的。在 MPP 系統中,每個SMP節點也可以運行自己的操作系統、數據庫等。但和 NUMA 不同的是,它不存在異地內存訪問的問題。換言之,每個節點內的CPU不能訪問另一個節點的內存。節點之間的信息交互是通過節點互聯網絡實現的,這個過程一般稱爲數據重分配(Data Redistribution)。但是 MPP 服務器需要一種複雜的機制來調度和平衡各個節點的負載和並行處理過程。目前一些基於 MPP 技術的服務器往往通過系統級軟件(如數據庫)來屏蔽這種複雜性。

舉例來說,我人生的第一份工作做 HP 大型數據倉庫一體機產品 HP Neoview 的技術支持,它就是基於 MPP 架構的,它由多個 Segment 組成,一個 Segment 有8個 Blade,16個 Node, 32個 CPU。每個 Node 都只能訪問自身的內存,所有 Node 之間的通信通過 Fabric 網絡來實現。基於此產品來開發應用時,不管後臺服務器由多少個 Segment 或 Node 組成,開發人員所面對的都是同一個數據倉庫產品,而不需要考慮如何調度其中某幾個節點的負載。

4. NUMA 與 MPP 的區別

從架構來看,NUMA 與 MPP 具有許多相似之處:它們都由多個節點組成,每個節點都具有自己的 CPU、內存、I/O,節點之間都可以通過節點互聯機制進行信息交互。那麼它們的區別在哪裏?首先是節點互聯機制不同,NUMA 的節點互聯機制是在同一個物理服務器內部實現的,當某個 CPU 需要進行遠地內存訪問時,它必須等待,這也是 NUMA 服務器無法實現 CPU 增加時性能線性擴展的主要原因。而 MPP 的節點互聯機制是在不同的 SMP 服務器外部通過 I/O 實現的,每個節點只訪問本地內存和存儲,節點之間的信息交互與節點本身的處理是並行進行的。因此 MPP 在增加節點時性能基本上可以實現線性擴展。其次是內存訪問機制不同。在 NUMA 服務器內部,任何一個 CPU 可以訪問整個系統的內存,但遠地訪問的性能遠遠低於本地內存訪問,因此在開發應用程序時應該儘量避免遠地內存訪問。在 MPP 服務器中,每個節點只訪問本地內存,不存在遠地內存訪問的問題。

5. 數據倉庫的選擇

哪種服務器更加適應數據倉庫環境?這需要從數據倉庫環境本身的負載特徵入手。衆所周知,典型的數據倉庫環境具有大量複雜的數據處理和綜合分析,要求系統具有很高的 I/O 處理能力,並且存儲系統需要提供足夠的 I/O 帶寬與之匹配。而一個典型的 OLTP 系統則以聯機事務處理爲主,每個交易所涉及的數據不多,要求系統具有很高的事務處理能力,能夠在單位時間裏處理儘量多的交易。顯然這兩種應用環境的負載特徵完全不同。

從 NUMA 架構來看,它可以在一個物理服務器內集成許多 CPU,使系統具有較高的事務處理能力,由於遠地內存訪問時延遠長於本地內存訪問,因此需要儘量減少不同 CPU 模塊之間的數據交互。顯然,NUMA 架構更適用於 OLTP 事務處理環境,當用於數據倉庫環境時,由於大量複雜的數據處理必然導致大量的數據交互,將使 CPU 的利用率大大降低。

相對而言,MPP 服務器架構的並行處理能力更優越,更適合於複雜的數據綜合分析與處理環境。當然,它需要藉助於支持 MPP 技術的關係數據庫系統來屏蔽節點之間負載平衡與調度的複雜性。另外,這種並行處理能力也與節點互聯網絡有很大的關係。顯然,適應於數據倉庫環境的 MPP 服務器,其節點互聯網絡的 I/O 性能應該非常突出,才能充分發揮整個系統的性能。但這並不是絕對的,性能的好壞由很多因素組成,比如Oracle Exadata, 它沒有使用 MPP 架構,但性能是相當的優越了。所以單從服務器的一個方面分析性能有一定的片面性,而現在的趨勢是整體的從多方面(包括軟件層面)優化服務器的性能。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章