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

多CPU架構演進

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

服務器最開始的時候是單CPU,而後才進化到了雙CPU甚至多CPU的SMP架構。所謂SMP架構指的是多路CPU無主次,共享內存、總線、操做系統等。此時每一個CPU訪問內存任何地址所耗費的時間是相等的。因此也稱爲一致存儲器訪問結構數據庫

你們共享一樣的內存,因此擴展能力有限,由於CPU數量增長了,內存訪問衝突也會增長。爲了進一步提升CPU數量的同時還能保證效率,NUMA架構出現了,將多個SMP進行鬆耦合。後端

image.png

還有一種AMP架構,不一樣的CPU是作不一樣的事的,互不干擾。api

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

NUMA架構中,多個SMP經過Crossbar switch交換矩陣進行互聯。
每一個SMP有本身的內存,同時還能夠訪問其餘SMP的內存,可是須要通過高速交換矩陣,很顯然SMP訪問本身的內存速度很是高,可是訪問遠端的SMP的內存還須要通過交換矩陣,延遲增長,能夠看出NUMA經過犧牲內存的訪問時延來達到更高的擴展性。服務器

image.png

總之,SMP與NUMA架構對軟件程序方面影響擴展性不大,一臺主機內都使用單一的操做系統。
缺點是CPU數量增長,訪問遠端內存的時延也會增長,性能不能線性增長。此時MPP架構就出現了。架構

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

MPP說白了就是將多臺獨立的主機組成集羣。顯然在此架構下,每一個節點都有各自的CPU、內存、IO總線、操做系統,徹底鬆耦合。最關鍵的是MPP集羣中的軟件架構也相應的改變了,這樣MPP的效率隨節點數量增長就能夠線性增長了。分佈式

其實若是NUMA架構下,若是經過上層軟件來使得程序儘可能少的讀取遠端的內存,NUMA效率也會線性增長。可是實際上NUMA操做系統仍然是同一個,內存仍然是全局均勻的,因此訪問遠端內存是不可避免的。性能

那麼MPP至關於把內存強制分開,同時又改變了程序架構,這樣就能夠保證海量計算下的效率線性增長。操作系統

image.png

image.png

存儲系統的演進

存儲系統與服務器CPU架構演進相同,控制器就比如CPU,後端磁盤櫃就相似於內存。code

  • 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上來。
      image.png

誰纔是真正的Scale-out

SMP/NUMA/MPP其實都算Scale-out,只不過程度和形態不一樣。
MPP架構的存儲,好比XIV,在多路大塊連續的IO下,效率反而不好。這是由於單路IO可能致使整個MPP集羣中的磁盤資源所有牽動orm

可是若是是小塊隨機的IO,多路IO關聯不多,則性能隨節點數增長線性增長,這就比如將一個程序並行分解爲多個子任務(相似於隨機小IO),由於子任務之間的關聯不多,節點之間的通訊量很小,則並行執行的效率高。也就是MPP自身是share-Nothing架構,運行在上面的程序也儘量的是Share-Nothing

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

  • SMP適用於擴展性要求不高,而又不想程序改變太大的場景。
  • MPP則適用於海量數據下的高擴展性需求場景。它須要對程序進行大量的改變,並且多流大塊連續IO場景下性能不佳。因此MPP架構普遍的應用於互聯網的底層Key-Value分佈式數據庫,這種數據庫主要應對高隨機小塊讀的場景,能夠得到很是高的性能。

image.png

參考

大話存儲II

相關文章
相關標籤/搜索