HPC高性能計算知識:計算架構演進
HPC系統實際上就是一個並行計算系統,很多初學者剛接觸並行計算的時候會對MPI、OpenMPI和OpenMP產生非常大的疑惑,主要原因是對這幾個概念本身理解的不清晰以及這幾個縮寫的字母確實是如此的近似。下面先通過一張圖來看看MPI、OpenMPI和OpenMP的區別。
MPI(Message Passing Interface)是信息傳遞介面,是獨立於語言的通信協議(標準),是一個庫。MPI的實現有MPICH、MPI-1、MPI-2、OpenMPI、IntelMPI、platformMPI等等,OpenMPI(open Message Passing Interface)是MPI的一種實現,也是一種庫項目。
OpenMP(Open Multiprocessing)是一種應用程序界面(即Application Program Interface),是一種並行的實現和方法,也可以認為是共享存儲結構上的一種編程模型。
在當前的並行計算系統中,OpenMP和OpenMPI都是需要的(從上面的各自概念可以看出),OpenMP用於本地的並行計算(共享內存內存架構),支持目前所有平台上的程序共享內存式並行計算,它相當於是給出了一個讓並行編程更加容易實現的模型,而OpenMPI則是用於機器之間的通信(分散式內存架構)。
從系統架構來看,目前的商用伺服器大體可以分為三類,即對稱多處理器結構SMP(SymmetricMulti-Processor) ,非一致存儲訪問結構 NUMA(Non-Uniform MemoryAccess) ,以及海量並行處理結構MPP(Massive ParallelProcessing) 。
它們的特徵分別是共享存儲型多處理機有兩種模型,即均勻存儲器存取(Uniform-Memory-Access,簡稱UMA)模型和非均勻存儲器存取(Nonuniform-Memory-Access,簡稱NUMA)模型。而COMA和ccNUMA都是NUMA結構的改進。
SMP (SymmetricMulti-Processor)
SMP對稱多處理系統內有許多緊耦合多處理器,在這樣的系統中,所有的CPU共享全部資源,如匯流排,內存和I/O系統等,操作系統或管理資料庫的複本只有一個,這種系統有一個最大的特點就是共享所有資源。多個CPU之間沒有區別,平等地訪問內存、外設、一個操作系統。操作系統管理著一個隊列,每個處理器依次處理隊列中的進程。如果兩個處理器同時請求訪問一個資源(例如同一段內存地址),由硬體、軟體的鎖機制去解決資源爭用問題,SMP伺服器CPU利用率狀態如下。
所謂對稱多處理器結構,是指伺服器中多個CPU對稱工作,無主次或從屬關係。各CPU共享相同的物理內存,每個CPU訪問內存中的任何地址所需時間是相同的,因此 SMP 也被稱為一致存儲器訪問結構 (UMA:Uniform Memory Access) 。對 SMP 伺服器進行擴展的方式包括增加內存、使用更快的 CPU 、增加 CPU 、擴充 I/O(槽口數與匯流排數) 以及添加更多的外部設備 (通常是磁碟存儲) 。
SMP伺服器的主要特徵是共享,系統中所有資源(CPU 、內存、 I/O 等)都是共享的。也正是由於這種特徵,導致了SMP 伺服器的主要問題,那就是它的擴展能力非常有限。對於SMP伺服器而言,每一個共享的環節都可能造成SMP伺服器擴展時的瓶頸,而最受限制的則是內存。由於每個 CPU 必須通過相同的內存匯流排訪問相同的內存資源,因此隨著 CPU 數量的增加,內存訪問衝突將迅速增加,最終會造成CPU資源的浪費。實驗證明,SMP伺服器CPU利用率最好的情況是2至4個CPU 。
NUMA(Non-UniformMemory Access)
NUMA技術可以把幾十個 CPU( 甚至上百個 CPU) 組合在一個伺服器內,彌補了SMP 在擴展能力上的限制,NUMA 伺服器 CPU 模塊結構如下。
NUMA伺服器的基本特徵是具有多個 CPU模塊,每個CPU模塊由多個CPU(如4個)組成,並且具有獨立的本地內存、 I/O槽口等。由於其節點之間可以通過互聯模塊(如稱為Crossbar Switch) 進行連接和信息交互,因此每個CPU可以訪問整個系統的內存(這是NUMA系統與MPP系統的重要差別) 。顯然,訪問本地內存的速度將遠遠高於訪問遠地內存(系統內其它節點的內存)的速度,這也是非一致存儲訪問NUMA的由來。由於這個特點,為了更好地發揮系統性能,開發應用程序時需要盡量減少不同CPU模塊之間的信息交互。
利用NUMA技術,可以較好地解決原來SMP系統的擴展問題,在一個物理伺服器內可以支持上百個CPU。
但NUMA技術同樣有一定缺陷,由於訪問遠地內存的延時遠遠超過本地內存,因此當CPU 數量增加時,系統性能無法線性增加。如HP公司發布Superdome伺服器時,曾公布了它與HP其它UNIX伺服器的相對性能值,結果發現,64路CPU的Superdome (NUMA結構)的相對性能值是20,而8路N4000( 共享的SMP結構)的相對性能值是6.3。從這個結果可以看到,8倍數量的CPU換來的只是3倍性能的提升。
MPP(MassiveParallel Processing)
MPP和NUMA有所不同, MPP提供了另外一種進行系統擴展的方式,它由多個 SMP 伺服器通過一定的節點互聯網路進行連接,協同工作,完成相同的任務,從用戶的角度來看是一個伺服器系統。其基本特徵是由多個 SMP 伺服器(每個 SMP 伺服器稱節點)通過節點互聯網路連接而成,每個節點只訪問自己的本地資源(內存、存儲等),是一種完全無共享(Share Nothing) 結構,因而擴展能力最好,理論上其擴展無限制,目前的技術可實現 512 個節點互聯,數千個CPU。
在MPP系統中,每個SMP節點也可以運行自己的操作系統、資料庫等。但和NUMA不同的是,它不存在異地內存訪問的問題。換言之,每個節點內的CPU不能訪問另一個節點的內存。節點之間的信息交互是通過節點互聯網路實現的,這個過程一般稱為數據重分配(Data Redistribution) 。
但是MPP伺服器需要一種複雜的機制來調度和平衡各個節點的負載和並行處理過程。目前一些基於MPP技術的伺服器往往通過系統級軟體(如資料庫)來屏蔽這種複雜性。舉例來說,Teradata就是基於MPP技術的一個關係資料庫軟體,基於此資料庫來開發應用時,不管後台伺服器由多少個節點組成,開發人員所面對的都是同一個資料庫系統,而不需要考慮如何調度其中某幾個節點的負載。
MPP大規模並行處理系統是由許多松耦合的處理單元組成的,要注意的是這裡指的是處理單元而不是處理器。每個單元內的 CPU都有自己私有的資源,如匯流排,內存,硬碟等。在每個單元內都有操作系統和管理資料庫的實例複本。這種結構最大的特點在於不共享資源。
NUMA、MPP和SMP之間性能的區別
NUMA的節點互聯機制是在同一個物理伺服器內部實現的,當某個CPU需要進行遠地內存訪問時,它必須等待,這也是NUMA伺服器無法實現CPU增加時性能線性擴展。
MPP的節點互聯機制是在不同的SMP伺服器外部通過I/O實現的,每個節點只訪問本地內存和存儲,節點之間的信息交互與節點本身的處理是並行進行的。因此MPP在增加節點時性能基本上可以實現線性擴展。
SMP所有的CPU資源是共享的,因此完全實現線性擴展。
MPP、SMP和NUMA應用的區別
NUMA架構可以在一個物理伺服器內集成許多CPU,使系統具有較高的事務處理能力,由於遠地內存訪問時延遠長於本地內存訪問,因此需要盡量減少不同 CPU模塊之間的數據交互。顯然,NUMA架構更適用於OLTP事務處理環境,當用於數據倉庫環境時,由於大量複雜的數據處理必然導致大量的數據交互,將使CPU的利用率降低。
MPP系統不共享資源,因此對它而言,資源比SMP要多,當需要處理的事務達到一定規模時,MPP的效率要比SMP好。
由於MPP系統因為要在不同處理單元之間 傳送信息,在通訊時間少的時候,那MPP系統可以充分發揮資源的優勢,達到高效率。也就是說:操作相互之間沒有什麼關係,處理單元之間需要進行的通信比較少,那採用MPP系統就要好。因此,MPP系統在決策支持和數據挖掘方面顯示了優勢。
MPP系統因為要在不同處理單元之間傳送信息,所以它的效率要比SMP要差一點。在通訊時間多的時候,那MPP系統可以充分發揮資源的優勢。因此當前使用的OTLP程序中,用戶訪問一個中心資料庫,如果採用SMP系統結構,它的效率要比採用MPP結構要快得多。
※詳解Oracle AWR運行日誌分析工具
※時代和技術在變,但數控分離的架構設計理念未曾改變
TAG:架構師技術聯盟 |