【大话存储】多CPU架构变迁, SMP,NUMA,MPP
多CPU架構演進
對稱多處理器結構:(SMP,Symmetric Multi-Processor)
服務器最開始的時候是單CPU,然后才進化到了雙CPU甚至多CPU的SMP架構。所謂SMP架構指的是多路CPU無主次,共享內存、總線、操作系統等。此時每個CPU訪問內存任何地址所耗費的時間是相等的。所以也稱為一致存儲器訪問結構
大家共享同樣的內存,所以擴展能力有限,因為CPU數量增加了,內存訪問沖突也會增加。為了進一步提高CPU數量的同時還能保證效率,NUMA架構出現了,將多個SMP進行松耦合。
還有一種AMP架構,不同的CPU是做不同的事的,互不干擾。
非一致存儲訪問結構:(NUMA,Non-Uniform Memory Access)
NUMA架構中,多個SMP通過Crossbar switch交換矩陣進行互聯。
每個SMP有自己的內存,同時還可以訪問其他SMP的內存,但是需要經過高速交換矩陣,很顯然SMP訪問自己的內存速度非常高,但是訪問遠端的SMP的內存還需要經過交換矩陣,延遲增加,可以看出NUMA通過犧牲內存的訪問時延來達到更高的擴展性。
總之,SMP與NUMA架構對軟件程序方面影響擴展性不大,一臺主機內都使用單一的操作系統。
缺點是CPU數量增加,訪問遠端內存的時延也會增加,性能不能線性增加。此時MPP架構就出現了。
海量并行處理結構:(MPP,Massive Parallel Processing)
MPP說白了就是將多臺獨立的主機組成集群。顯然在此架構下,每個節點都有各自的CPU、內存、IO總線、操作系統,完全松耦合。最關鍵的是MPP集群中的軟件架構也相應的改變了,這樣MPP的效率隨節點數量增加就可以線性增加了。
其實如果NUMA架構下,如果通過上層軟件來使得程序盡量少的讀取遠端的內存,NUMA效率也會線性增加。但是實際上NUMA操作系統仍然是同一個,內存仍然是全局均勻的,所以訪問遠端內存是不可避免的。
那么MPP相當于把內存強制分開,同時又改變了程序架構,這樣就可以保證海量計算下的效率線性增加。
存儲系統的演進
存儲系統與服務器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上來。
誰才是真正的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分布式數據庫,這種數據庫主要應對高隨機小塊讀的場景,可以獲得非常高的性能。
參考
大話存儲II
轉載于:https://www.cnblogs.com/dy2903/p/8341268.html
總結
以上是生活随笔為你收集整理的【大话存储】多CPU架构变迁, SMP,NUMA,MPP的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux系统中/etc/syslog.
- 下一篇: SpringBoot实战 之 异常处理篇