服務器CPU系統架構

深入理解服務器CPU三大體系結構--SMP、NUMA、MPP

image

從系統架構來看,目前的商用服務器大體可以分爲三類:

  1. 對稱多處理器結構 SMP:Symmetric Multi-Processor
  2. 非一致存儲訪問結構 NUMA:Non-Uniform Memory Access
  3. 海量並行處理結構 MPP:Massive Parallel Processing

它們的特徵分別描述如下:

1. SMP(Symmetric Multi-Processor)

     SMP (Symmetric Multi Processing),對稱多處理系統內有許多緊耦合多處理器,在這樣的系統中,所有的CPU共享全部資源,如總線,內存和I/O系統等,操作系統或管理數據庫的複本只有一個,這種系統有一個最大的特點就是共享所有資源。多個CPU之間沒有區別,平等地訪問內存、外設、一個操作系統。操作系統管理着一個隊列,每個處理器依次處理隊列中的進程。如果兩個處理器同時請求訪問一個資源(例如同一段內存地址),由硬件、軟件的鎖機制去解決資源爭用問題。Access to RAM is serialized; this and cache coherency issues causes performance to lag slightly behind the number of additional processors in the system.
image

     所謂對稱多處理器結構,是指服務器中多個 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。

image
圖1. SMP 服務器 CPU 利用率狀態

     8路服務器是服務器產業的分水嶺。因爲4路及以下服務器都採用SMP架構(Symmetric Multi-Processor,對稱多處理結構),實驗證明,SMP服務器CPU利用率最好的情況是2至4個CPU。8是這種架構支持的處理器數量的極限,要支持8顆以上的處理器須採用另外的NUMA架構(Non-Uniform Memory Access,非一致性內存訪問)。利用NUMA技術,可以較好地解決原來SMP系統的擴展問題,在一個物理服務器內可以支持上百個CPU。

2. NUMA(Non-Uniform Memory Access)

     由於 SMP 在擴展能力上的限制,人們開始探究如何進行有效地擴展從而構建大型系統的技術, NUMA 就是這種努力下的結果之一。利用 NUMA 技術,可以把幾十個 CPU( 甚至上百個 CPU) 組合在一個服務器內。其 CPU 模塊結構如圖 2 所示:

image
圖2. NUMA 服務器 CPU 模塊結構

     NUMA 服務器的基本特徵是具有多個 CPU 模塊,每個 CPU 模塊由多個 CPU( 如 4 個 ) 組成,並且具有獨立的本地內存、 I/O 槽口等。由於其節點之間可以通過互聯模塊 ( 如稱爲 Crossbar Switch) 進行連接和信息交互,因此每個 CPU 可以訪問整個系統的內存 ( 這是 NUMA 系統與 MPP 系統的重要差別 ) 。顯然,訪問本地內存的速度將遠遠高於訪問遠地內存 ( 系統內其它節點的內存 ) 的速度,這也是非一致存儲訪問 NUMA 的由來。由於這個特點,爲了更好地發揮系統性能,開發應用程序時需要儘量減少不同 CPU 模塊之間的信息交互。

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

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

     2008年intel發佈了Nehalem構架處理器,CPU內集成了內存控制器。當多CPU時任何一顆CPU都能訪問全部內存。但CPU0訪問本地內存(CPU0控制器直接控制的內存)消耗小,CPU0訪問遠地內存(CPU1內存控制器控制的內存)消耗大,NUMA功能的開啓變成了必須了。

     默認的NUMA功能是將計算和內存資源分配在一個NUMA內,有可能導致SWAP問題,即:NUMA0內存已經用完都開始用SWAP空間了,NUMA1還有很大的內存free。在數據庫服務器上NUMA可能導致非常嚴重的性能問題,甚至有很多數據庫死機的問題。就下圖這個熊樣。

image

     在虛擬化情況下,KVM虛機的CPU數量儘量不超過一個NUMA區域內的CPU數量,如果超過,則會出現一個KVM虛機使用了兩個NUMA的情況,導致CPU等待內存時間過長,系統性能下降,此時需要手動調整KVM的配置纔可以提高性能。

  • Ubuntu 12.02自身帶有Automatic NUMA balancing,可以支持NUMA自平衡,具體情況未測試。SUSE12也支持Automatic NUMA balancing
  • JUNO版的Openstack中,KVM的CPU的拓撲可以通過image或者flavor進行元數據傳遞來定義,如果沒有特別的定義此類元數據,則模擬的CPU將是多Socket單Core單NUMA節點的CPU,這樣的CPU與物理CPU完全不同。

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 技術的服務器往往通過系統級軟件 ( 如數據庫 ) 來屏蔽這種複雜性。舉例來說, NCR 的 Teradata 就是基於 MPP 技術的一個關係數據庫軟件,基於此數據庫來開發應用時,不管後臺服務器由多少個節點組成,開發人員所面對的都是同一個數據庫系統,而不需要考慮如何調度其中某幾個節點的負載。

     MPP (Massively Parallel Processing),大規模並行處理系統,這樣的系統是由許多松耦合的處理單元組成的,要注意的是這裏指的是處理單元而不是處理器。每個單元內的CPU都有自己私有的資源,如總線,內存,硬盤等。在每個單元內都有操作系統和管理數據庫的實例複本。這種結構最大的特點在於不共享資源。

image

4. 三種體系架構之間的差異

4.1 SMP系統與MPP系統比較

     既然有兩種結構,那它們各有什麼特點呢?採用什麼結構比較合適呢?通常情況下,MPP系統因爲要在不同處理單元之間傳送信息(請注意上圖),所以它的效率要比SMP要差一點,但是這也不是絕對的,因爲MPP系統不共享資源,因此對它而言,資源比SMP要多,當需要處理的事務達到一定規模時,MPP的效率要比SMP好。這就是看通信時間佔用計算時間的比例而定,如果通信時間比較多,那MPP系統就不佔優勢了,相反,如果通信時間比較少,那MPP系統可以充分發揮資源的優勢,達到高效率。當前使用的OTLP程序中,用戶訪問一箇中心數據庫,如果採用SMP系統結構,它的效率要比採用MPP結構要快得多。而MPP系統在決策支持和數據挖掘方面顯示了優勢,可以這樣說,如果操作相互之間沒有什麼關係,處理單元之間需要進行的通信比較少,那採用MPP系統就要好,相反就不合適了。

     通過上面兩個圖我們可以看到,對於SMP來說,制約它速度的一個關鍵因素就是那個共享的總線,因此對於DSS程序來說,只能選擇MPP,而不能選擇SMP,當大型程序的處理要求大於共享總線時,總線就沒有能力進行處理了,這時SMP系統就不行了。當然了,兩個結構互有優缺點,如果能夠將兩種結合起來取長補短,當然最好了。

4.2 NUMA 與 MPP 的區別

     從架構來看, NUMA 與 MPP 具有許多相似之處:它們都由多個節點組成,每個節點都具有自己的 CPU 、內存、 I/O ,節點之間都可以通過節點互聯機制進行信息交互。那麼它們的區別在哪裏?通過分析下面 NUMA 和 MPP 服務器的內部架構和工作原理不難發現其差異所在。

     首先是節點互聯機制不同, NUMA 的節點互聯機制是在同一個物理服務器內部實現的,當某個 CPU 需要進行遠地內存訪問時,它必須等待,這也是 NUMA 服務器無法實現 CPU 增加時性能線性擴展的主要原因。而 MPP 的節點互聯機制是在不同的 SMP 服務器外部通過 I/O 實現的,每個節點只訪問本地內存和存儲,節點之間的信息交互與節點本身的處理是並行進行的。因此 MPP 在增加節點時性能基本上可以實現線性擴展。

     其次是內存訪問機制不同。在 NUMA 服務器內部,任何一個 CPU 可以訪問整個系統的內存,但遠地訪問的性能遠遠低於本地內存訪問,因此在開發應用程序時應該儘量避免遠地內存訪問。在 MPP 服務器中,每個節點只訪問本地內存,不存在遠地內存訪問的問題。

4.3 NUMA、MPP、SMP 之間性能的區別

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

     MPP的節點互聯機制是在不同的SMP服務器外部通過I/O實現的,每個節點只訪問本地內存和存儲,節點之間的信息交互與節點本身的處理是並行進行的。因此MPP在增加節點時性能基本上可以實現線性擴展。

     SMP所有的CPU資源是共享的,因此完全實現線性擴展。

4.4 NUMA、MPP、SMP之間擴展的區別

NUMA理論上可以無限擴展,目前技術比較成熟的能夠支持上百個CPU進行擴展。如HP的SUPERDOME。

MPP理論上也可以實現無限擴展,目前技術比較成熟的能夠支持512個節點,數千個CPU進行擴展。

SMP擴展能力很差,目前2個到4個CPU的利用率最好,但是IBM的BOOK技術,能夠將CPU擴展到8個。

MPP是由多個SMP構成,多個SMP服務器通過一定的節點互聯網絡進行連接,協同工作,完成相同的任務。

4.5 MPP 和 SMP、NUMA 應用之間的區別
  • MPP 的優勢:
         MPP系統不共享資源,因此對它而言,資源比SMP要多,當需要處理的事務達到一定規模時,MPP的效率要比SMP好。由於MPP系統因爲要在不同處理單元之間傳送信息,在通訊時間少的時候,那MPP系統可以充分發揮資源的優勢,達到高效率。也就是說:操作相互之間沒有什麼關係,處理單元之間需要進行的通信比較少,那採用MPP系統就要好。因此,MPP 系統在決策支持和數據挖掘方面顯示了優勢。

  • SMP 的優勢:
         MPP系統因爲要在不同處理單元之間傳送信息,所以它的效率要比SMP要差一點。在通訊時間多的時候,那MPP系統可以充分發揮資源的優勢。因此當前使用的OTLP程序中,用戶訪問一箇中心數據庫,如果採用SMP系統結構,它的效率要比採用MPP結構要快得多。

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

Reference

深入理解服務器CPU三大體系結構--SMP、NUMA、MPP

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