以下為王勁凱先生的演講實錄整理:

FusionStack公司介紹:2007年成立,公司做分布式存儲。2010年上線首個超融合項目,是國內(nèi)較早做超融合項目的企業(yè)。

我們先通過英特爾官網(wǎng)數(shù)據(jù)畫出的一張圖來分析過去十年閃存的動態(tài)。紅線是閃存的性能增長曲線,從2008年開始到2013年,閃存性能變化并不大。從4萬IOPS達到10萬IOPS,2013年之后突然爆發(fā),目前可以看到將近百萬級別的IOPS的閃存成為主流。另外就是CPU性能增長曲線,CPU性能過去在十年變化也不是很大。這里我們發(fā)現(xiàn)一個非常明顯的問題,存儲軟件性能逐漸跟不上閃存的發(fā)展,閃存性能繼續(xù)提升,存儲成了整個軟件定義存儲和超融合的瓶頸。

12282

高性能存儲技術(shù)演進觸發(fā)的裸金屬架構(gòu)

在過去的十年里,陣列時代的高性能是高速緩存技術(shù)。磁盤性能比較低,一個磁盤一秒鐘處理100IO。數(shù)據(jù)量相對不是很大,熱點比較集中。用內(nèi)存來做緩存,實際IO落到內(nèi)存里面,這種方式是過去十多年來一直用的方式。

分布式時代,谷歌領(lǐng)先分布式互聯(lián)網(wǎng)架構(gòu)時代,大家用的是并行IO。這時的時代特點是什么?磁盤性能低,數(shù)據(jù)量大,熱點不明顯。大量磁盤,用軟件把IO聚合起來,一個分析業(yè)務(wù)我們把它拆散到數(shù)百塊磁盤甚至上千塊磁盤處理,這是分布式時代的一個做法。

現(xiàn)在已然進入了閃存時代,閃存性能高,延遲低不再需要你去優(yōu)化。但幾乎所有軟件都落后于閃存的性能,用戶可能在買超融合的時候,購買多塊閃存,一塊100萬IOPS,3塊就是300萬IOPS,你的軟件能跑300萬嗎?通常不能。用非常高配英特爾至強2699的CPU跑到30萬IOPS,一個節(jié)點。

在2013年前后,我們注意這到個問題,然后進行了深入研究,最終提出了一個裸金屬架構(gòu)概念。

裸金屬架構(gòu)實現(xiàn)應(yīng)當(dāng)注意的問題

這個架構(gòu)首先我們要注意幾點,第一intterupt是什么?過去編程通常會使用中斷,你第一件事情就是避免中斷。原子操作,用來實現(xiàn)鎖,無鎖隊列。我們有CPU原子指令可以實現(xiàn)。過去那個時代,這個東西比較高效。閃存實現(xiàn)這個東西變得比較低效,帶來核之間的互斥。TLB miss(TLB是頁表緩沖,就是負責(zé)將虛擬內(nèi)存地址翻譯成實際的物理內(nèi)存地址,而CPU尋址時會優(yōu)先在TLB中進行尋址。TLB miss則表示TLB中沒有所需頁表),而處理器的性能和尋址的命中率有很大的關(guān)系。還有NUMA的問題,你在一個CPU訪問另外一個CPU內(nèi)存會發(fā)現(xiàn)非常之慢。可能延遲增大一兩倍,一般場景沒有問題,閃存場景不可用。

這個是CPU內(nèi)部的照片,八個核,中間紅色部分是CPU核之間的鏈接。有一個比較有意思的現(xiàn)象,每一個核會帶一個L2 Cache,核與核之間通過內(nèi)部高速聯(lián)接連起來。你會發(fā)現(xiàn)一個問題,如果你一個核訪問數(shù)據(jù),它所帶的L2會很快。但跨一個核,在另外一個核上訪問數(shù)據(jù)就會出現(xiàn)性能下降問題。我們提出一個理念就是Core as a compute,你跨一個,哪怕另外一個節(jié)點也是遠程訪問,帶來的代價可能會導(dǎo)致軟件性能急劇下降。因此設(shè)計的時候盡可能的避免遠程訪問,做到每一個核處理自己的事情,核與核要盡量壓縮。

12283

總體架構(gòu)要進行哪些改進?首先傳統(tǒng)編程模型里用到生產(chǎn)的模型在閃存時代是不可用的。我們用的是Producer-consumer模型,現(xiàn)在用的分時操作系統(tǒng),出現(xiàn)之前采用的就是批處理的Producer-consumer玩法。任務(wù)調(diào)度,調(diào)度器導(dǎo)致你性能下降,會反復(fù)去影響你的寄存器。我們在這上面設(shè)立了協(xié)作式調(diào)度器。事件處理,傳統(tǒng)模型采用event,event延遲很高,會達到10微妙,對閃存來說非常長了。我們用的是Polling模型。過去采用多核共同處理一件事情,我們用lock/lock-free。其它就是關(guān)于硬件訪問,你采用訪問網(wǎng)卡或者硬盤都會把它交給操作系統(tǒng)。這些我們都避開了。

Run-to-completion,采用polling和recv,exec,send四步。采用這個模型基本上就避免了我們剛才所說得幾乎所有問題。我們要把VM的訪問,根據(jù)不同數(shù)據(jù)的位置放到不同的核上。避免核和核之間的交互。那么,coroutine(協(xié)程)能不能提升性能?答案是不能。調(diào)試困難,gdb不可用。Swapcontext開銷大(150萬次每秒),需要改進。我們目前的測算是每秒能測算150萬次的切換,這個對我們來說太慢了,我們自己來寫,但如果計算器的拷貝遺漏了不該遺漏的東西,后果很嚴重。

Stack-bypass是繞過操作系統(tǒng)訪問硬件的部分。首先紅色部分是操作系統(tǒng)的對站,通常無法繞開紅色部分對站,已經(jīng)有很成熟的方法已經(jīng)列出來了,可以讓你繞過這些東西,我們把這些東西徹底解決掉了。

12287

另外,我們知道ceph,ceph我們目前看到的數(shù)據(jù)比較快,能夠跑出15萬IOPS。到了今天我們延遲已經(jīng)壓縮到300微秒以下。我們單個IO延遲是軟件對站里面延遲,目前是3微秒, NVME設(shè)備是90微秒。英特爾下一代的處理器延遲是10微秒,我們只需要3微秒完成它軟件層的處理。未來把這個壓縮到更低,有可能壓縮到2微秒。

雖然FusionStack是初創(chuàng)公司,但產(chǎn)品卻不是基于某個開源軟件改的。因為在2007年的時候沒有任何東西可以用。其產(chǎn)品是一個分布式元數(shù)據(jù)的加工,是有元數(shù)據(jù)的。比較有意思是社區(qū)的開源版本軟件定義存儲絕大部分都是采用某種改進的模型,沒有元數(shù)據(jù)。我們看到比較多的商業(yè)軟件帶元數(shù)據(jù)比較多一些。為什么有這個分歧,我們認為在2007年前后Hadoop主導(dǎo)分布式的時候,大家對一些數(shù)據(jù)不滿意,紛紛設(shè)計新的模型。就FusionStack的角度來看,對于一個分布式塊存儲來說,分布式元數(shù)據(jù)足以應(yīng)對生產(chǎn)需求,分布式元數(shù)據(jù)帶來一些好處,比如說本地化。

之前是邏輯布局,這是物理布局,物理布局與很多存儲廠商交流的時候,都說與傳統(tǒng)架構(gòu)有一致性,其實就是這樣。FusionStack的設(shè)計是介于分布式存儲和傳統(tǒng)存儲之間的模型。首先我們考慮的是保證你能夠滿足傳統(tǒng)存儲模型的一致性的性能,然后才是分布式問題。我們有一個微控制器,每一個卷會有一個控制器,因為它有控制器管理的元數(shù)據(jù)。這個控制器記錄了它的副本位置,我們的副本是分成1兆大小的塊,打散存放在集群中。每卷一個控制器,這個控制器的位置隨著你的虛擬機的遷移進行遷移。

分享到

崔歡歡

相關(guān)推薦