天天看點

「計算機基礎」多CPU架構演進

作者:架構思考
昨天和前天通過文章《「計算機基礎」CPU曆史之AMD系列》和《「計算機基礎」CPU曆史之Intel系列》介紹了Intel和AMD的産品,今天圍繞的話題仍然是CPU。

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

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

大家共享同樣的記憶體,是以擴充能力有限,因為CPU數量增加了,記憶體通路沖突也會增加。為了進一步提高CPU數量的同時還能保證效率,NUMA架構出現了,将多個SMP進行松耦合。

「計算機基礎」多CPU架構演進

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

非一緻存儲通路結構:(NUMA,Non-Uniform Memory Access)

NUMA架構中,多個SMP通過Crossbar switch交換矩陣進行互聯。

每個SMP有自己的記憶體,同時還可以通路其他SMP的記憶體,但是需要經過高速交換矩陣,很顯然SMP通路自己的記憶體速度非常高,但是通路遠端的SMP的記憶體還需要經過交換矩陣,延遲增加,可以看出NUMA通過犧牲記憶體的通路時延來達到更高的擴充性。

「計算機基礎」多CPU架構演進

總之,SMP與NUMA架構對軟體程式方面影響擴充性不大,一台主機内都使用單一的作業系統。

缺點是CPU數量增加,通路遠端記憶體的時延也會增加,性能不能線性增加。此時MPP架構就出現了。

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

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

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

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

「計算機基礎」多CPU架構演進
「計算機基礎」多CPU架構演進

存儲系統的演進

存儲系統與伺服器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上來。

「計算機基礎」多CPU架構演進

誰才是真正的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分布式資料庫,這種資料庫主要應對高随機小塊讀的場景,可以獲得非常高的性能。
「計算機基礎」多CPU架構演進

文章來源:dy2903_https://www.cnblogs.com/dy2903/p/8341268.html

繼續閱讀