【大話儲存】多CPU架構變遷, SMP,NUMA,MPP

weixin_34236869發表於2018-01-24

多CPU架構演進

對稱多處理器結構:(SMP,Symmetric Multi-Processor)

伺服器最開始的時候是單CPU,然後才進化到了雙CPU甚至多CPU的SMP架構。所謂SMP架構指的是多路CPU無主次,共享記憶體、匯流排、作業系統等。此時每個CPU訪問記憶體任何地址所耗費的時間是相等的。所以也稱為一致儲存器訪問結構

大家共享同樣的記憶體,所以擴充套件能力有限,因為CPU數量增加了,記憶體訪問衝突也會增加。為了進一步提高CPU數量的同時還能保證效率,NUMA架構出現了,將多個SMP進行鬆耦合。

1323506-65382a30cb30269d.png
image.png

還有一種AMP架構,不同的CPU是做不同的事的,互不干擾。

非一致儲存訪問結構:(NUMA,Non-Uniform Memory Access)

NUMA架構中,多個SMP通過Crossbar switch交換矩陣進行互聯。
每個SMP有自己的記憶體,同時還可以訪問其他SMP的記憶體,但是需要經過高速交換矩陣,很顯然SMP訪問自己的記憶體速度非常高,但是訪問遠端的SMP的記憶體還需要經過交換矩陣,延遲增加,可以看出NUMA通過犧牲記憶體的訪問時延來達到更高的擴充套件性。

1323506-7a05d6a19cdac936.png
image.png

總之,SMP與NUMA架構對軟體程式方面影響擴充套件性不大,一臺主機內都使用單一的作業系統。
缺點是CPU數量增加,訪問遠端記憶體的時延也會增加,效能不能線性增加。此時MPP架構就出現了。

海量並行處理結構:(MPP,Massive Parallel Processing)

MPP說白了就是將多臺獨立的主機組成叢集。顯然在此架構下,每個節點都有各自的CPU、記憶體、IO匯流排、作業系統,完全鬆耦合。最關鍵的是MPP叢集中的軟體架構也相應的改變了,這樣MPP的效率隨節點數量增加就可以線性增加了。

其實如果NUMA架構下,如果通過上層軟體來使得程式儘量少的讀取遠端的記憶體,NUMA效率也會線性增加。但是實際上NUMA作業系統仍然是同一個,記憶體仍然是全域性均勻的,所以訪問遠端記憶體是不可避免的。

那麼MPP相當於把記憶體強制分開,同時又改變了程式架構,這樣就可以保證海量計算下的效率線性增加。

1323506-f864e3c0cb17a5ba.png
image.png
1323506-fb8e9a476cfe23a4.png
image.png

儲存系統的演進

儲存系統與伺服器CPU架構演進相同,控制器就好比CPU,後端磁碟櫃就類似於記憶體。

  • SMP
    縱觀儲存系統的演進,一開始是單控,後來演進到雙控互為備份,此時就類似於AMP,兩個控制器各自處理自己的任務。
    然後進入到雙控並行處理的時代(HDS的AMS2000儲存系統),類似於SMP,兩個控制器可以並行的處理。
    再到後來則有多控並行對稱處理架構,Oracle的RAC叢集就可以視為一種多點SMP,各種共享底層儲存的叢集檔案系統都屬於多點對稱SMP
  • NUMA
    同樣NUMA也出現在了儲存系統中,比如EMC的V-Max相當於多個SMP利用高速交換矩陣來共享訪問每個SMP上的記憶體,其中SMP就是一對控制器組成的Director,高速交換矩陣就是RapidIO
  • MPP
    • 那麼IBM的XIV就屬於鬆耦合MPP架構,每個節點都有自己的CPU、記憶體、IO介面,使用外部的交換機互相通訊。
    • 而HDS的VSP更像是一個緊耦合的MPP。
    • 另一種屬於MPP架構的儲存系統就是分散式檔案系統,比如HDFS等。
      MPP對軟體架構變化很大,所以傳統儲存廠商很難將之前的架構演進到MPP上來。


      1323506-2de85042886ddf49.png
      image.png

誰才是真正的Scale-out

SMP/NUMA/MPP其實都算Scale-out,只不過程度和形態不同。
MPP架構的儲存,比如XIV,在多路大塊連續的IO下,效率反而很差。這是因為單路IO可能導致整個MPP叢集中的磁碟資源全部牽動

但是如果是小塊隨機的IO,多路IO關聯很少,則效能隨節點數增加線性增加,這就好比將一個程式並行分解為多個子任務(類似於隨機小IO),因為子任務之間的關聯很少,節點之間的通訊量很小,則並行執行的效率高。也就是MPP自身是share-Nothing架構,執行在上面的程式也儘可能的是Share-Nothing

SMP、NUMA、MPP各有各的好處,比如

  • SMP適用於擴充套件性要求不高,而又不想程式改變太大的場景。
  • MPP則適用於海量資料下的高擴充套件性需求場景。它需要對程式進行大量的改變,而且多流大塊連續IO場景下效能不佳。所以MPP架構廣泛的應用於網際網路的底層Key-Value分散式資料庫,這種資料庫主要應對高隨機小塊讀的場景,可以獲得非常高的效能。
1323506-6df0d40b60993b14.png
image.png

參考

大話儲存II

相關文章