0
本文作者: 王金許 | 2017-07-29 07:25 |
雷鋒網(wǎng)注:舒繼武,現(xiàn)任清華大學教授、 博士生導師。近年來主要從事網(wǎng)絡(luò)存儲、存儲安全、網(wǎng)絡(luò)服務(wù)器、并行算法、并行處理技術(shù)及并行應(yīng)用軟件技術(shù)等方面的研究工作。他還是清華大學計算機科學與技術(shù)系分學位委員會委員, SNIA China(全球網(wǎng)絡(luò)存儲工業(yè)協(xié)會(中國))專家委員會委員,“高效能服務(wù)器和存儲技術(shù)國家重點實驗室”(浪潮集團)學術(shù)委員會委員。國家863計劃信息技術(shù)領(lǐng)域“海量存儲系統(tǒng)關(guān)鍵技術(shù)”重大項目總體專家組副組長。
6月14-16日,中國計算機學會學科前沿講習班在北京開講。作為數(shù)據(jù)存儲方面的專家,清華大學計算機系教授舒繼武在CCF-ADL第79期講習班上為學術(shù)青年們帶來了現(xiàn)有存儲系統(tǒng)軟件層的一些研究進展。舒繼武教授本次的演講主題為《閃存存儲系統(tǒng)的軟件層優(yōu)化》。
以下為舒繼武演講內(nèi)容,雷鋒網(wǎng)進行了不改變原意的編輯。
磁盤自從2000年以來,帶寬100兆左右,沒有太大的變化,延時也沒有太大的變化,往后我覺得即使有優(yōu)化也不會很大。
另外一個,IBM 2020年要構(gòu)建一個大的存儲系統(tǒng),它有2 GIOP/sec,需要500萬塊磁盤,占地超2000平方米,能耗高達22兆瓦。
現(xiàn)在PCIe的帶寬,它的延遲有一個很大變化。如果基于這種來構(gòu)建IBM2GIOP系統(tǒng),用SCM存儲的話,只需要8000個模塊,占地面積大幅縮減,能耗近1000瓦。
自從1984年日本東芝推出閃存這個東西以來,應(yīng)該來說變化很大,從當時的盤到卡,到現(xiàn)在的各種陣列,再到各種大的分布式系統(tǒng)。
那我們來看看在結(jié)構(gòu)上有什么變化?另外一點我想說明,閃存來構(gòu)建外存儲系統(tǒng)有哪些優(yōu)勢?第一個是低延遲、高帶寬;另外一個是成本優(yōu)勢,IOPS來構(gòu)建的話本身因為它的高帶寬、低延遲,所以它得到的單位IOPS應(yīng)該比磁盤大得多。它從成本上來講應(yīng)該是比磁盤便宜的。
另外一個因為它是電子的,不是機械的,所以可靠性、能耗都不用說了。從早期Flash的擴展卡到現(xiàn)在應(yīng)用的情況下,盤這個東西大家都知道,包括我們現(xiàn)在很多的小卡,那像這種東西它的接口問題,容量問題等得不到解決,所以這個肯定是一個基礎(chǔ)的問題。
后來就發(fā)展到卡,那就是說PCIe的這種閃存卡,把它插到這個主機上來構(gòu)成一個系統(tǒng),它的好處是什么?利用這個本身強大計算能力和超大內(nèi)存,所以這個卡能夠得到很大的發(fā)揮。
還有就是它的很多driver,在這些主機上,它能夠做到很多的異地更新,包括對于系統(tǒng)的開放,能夠做很好的一些針對性的開放。而且在這個發(fā)展過程當中也經(jīng)歷過一個過程,從早期這種卡的應(yīng)用,這種大的盤應(yīng)用,要提供很多層,到后來卡的應(yīng)用當中,它把很多層給跳過去了。
那當然它里面很簡單的一個問題是它容量做不大,你一塊卡現(xiàn)在1T、2T,另外一個,這個卡的散熱非常成問題,我們有早期的,2013年、2014年從華為拿到的卡,可以達到七八十度,把雞蛋放在上面都能夠烤熟,所以這個都是它的一些問題。
那因為它的容量做不大嘛,它的可靠性也有問題。后來就發(fā)展到成為SSD的陣列,這樣它的容量就可以變得很大,可靠性也會做一些提升。那做陣列的話有兩種方式,像SSD這種規(guī)格,就像用磁盤一樣的模式,那這樣的話有很多問題,就是磁盤長大。從工業(yè)化的角度來看它不用做太多的事情,當然它肯定要SSD要做一些優(yōu)化。
當然也存在會發(fā)生那種性能上突然下降等類似的問題,它只是對控制器做了優(yōu)化,但是還遠沒有發(fā)揮SSD本身的一些特點。
后來有一個廠商就說,做一個全新的磁盤陣列控制器,重新設(shè)計這個控制器,完全是面向SSD的,那在這里面要考慮很多東西,它的控制器得考慮到SSD本身的垃圾回收,包括新的一些操作,并發(fā)的一些操作,完全是一個全新的,不像這種只是優(yōu)化的,因為這個還是在磁盤的基礎(chǔ)上做一些改進,像這種就是完全不考慮磁盤,面向SSD的,那它的性能應(yīng)該來說有一個量級的變化。
你要構(gòu)建一個大系統(tǒng)可能還是不夠。磁盤陣列達到幾十T也就了不起了,后來有一個分布式閃存陣列,這一個是CMU,它考慮角度不一樣,前面的磁盤陣列它是考慮IO子系統(tǒng)的性能和可靠性。
它一直考慮的是怎么把性能做一個匹配,所以基本上用的是低主頻的CPU來構(gòu)建分布式的閃存集成系統(tǒng),所以在這方面做了很多的應(yīng)用。
后來UCSD他們也構(gòu)建了一個系統(tǒng),但是這個系統(tǒng)跟前面的不一樣,它主要考慮的是性能和匹配的問題,這個考慮的是能耗問題,就是在單個板子上級成了256GB的Flash和2G的DRAM來構(gòu)建這么一個東西,做了很徹底的一個優(yōu)化和一個重新設(shè)計。在這個重新設(shè)計主要是考慮并發(fā)的。
從結(jié)構(gòu)來看,我們從盤到卡到陣列,到現(xiàn)在構(gòu)建分布式的存儲系統(tǒng),應(yīng)該來說還是有一個很大的并發(fā)的,應(yīng)該來說這個能夠在真正的大型卡上能夠用的東西。
當然這是從結(jié)構(gòu)的并發(fā)來看,但是問題來看是軟件的問題。
我這里舉一個例子,這個是大家都能夠看到UCSD曾經(jīng)在2012年發(fā)布的這么一個東西,我們早期的磁盤因為比較慢嘛,那你這個軟件的話慢一點它顯現(xiàn)不出來。我們認為現(xiàn)在用PCIE這種Flash的話,軟件開銷能夠達到21.9%。
那么我們來看看在這方面,應(yīng)該有很多應(yīng)用,按照層次我簡單畫了一下,當然這不是一個很嚴謹?shù)膱D,就是我們做閃存系統(tǒng),可能下面有一些閃存的硬件的東西,當然這個也可以是陣列,也可以是裸的。
在這之上可能有一些接口,還有包括FTL,當然有的FTL可能在這里面不包含,把它合到上面去了等等,有一些新的轉(zhuǎn)化層,包括上層有一些文件系統(tǒng)還有一些數(shù)據(jù)庫,再上面有一些應(yīng)用。
再一個就是文件系統(tǒng),做得就更好了。再就是這個閃存的KV存儲等等,在這方面應(yīng)該有很多的事情做。我們還在這方面做了一些事情,這個紅色的是我們團隊做的一些事情。
這是大概說一下,這是軟件層的一個變化,需要做一個很革新的變化。我們來看看要做哪些變化。
因為傳統(tǒng)的這種磁盤的模式很慢,CPU給一個信令,CPU就處理(還不能干其他的事情),完了以后再來弄。但是現(xiàn)在你的硬件快了,你還用這種中斷方式的話,上下文切換就很耗時間,所以CPU這么切換,它可以用其他的一些方式,。所以在這種情況下,傳統(tǒng)的這種終端方式代價很高。
另外一個就是存取路徑,那傳統(tǒng)的磁盤結(jié)構(gòu)文件系統(tǒng),包括內(nèi)存拷貝了幾次,兩次拷貝過了等等,那在這個過程當中可能你的路徑要縮短,甚至要把一個層級合并。打個比方,文件系統(tǒng),你的文件系統(tǒng)要做存儲管理,你的FTL也要做存儲管理,你認為就完全是一種重疊的,是不是可以把這一層給處理掉,這樣的話你的IO能夠大大縮短匹配這個命令時間。
另外一個就是軟件接口,因為磁盤和這個SD還是不一樣,包括它還有日志等等這些東西,所以在這方面提出了很多的一些相關(guān)領(lǐng)域軟件接口,這是事務(wù)方面的事情。
下面我就談?wù)勥@個事務(wù)方面處理,閃存的事務(wù)處理這方面有很多研究,它有利用閃存的異地更新特性在存儲設(shè)備中提供原子寫入接口,避免雙重寫入。
這里面有幾個層,這個是PCIE上的一個文章,就是你這個事務(wù),如果說我在這個過程中系統(tǒng)崩潰了,他會去掃描,如果這有一點事務(wù)寫完了,我這個就好弄。這是一種它的指針,我把這個事務(wù)串起來,我最后來解讀這些指針是否是閉環(huán),當然這個是串行,這個可以同時掃描,可以并行來做,那它處理事務(wù)就快。
那按我們的方法就是,我用一個窗口,事務(wù)即使在窗口中崩潰了,也只是回到這個串口里,所以通過這種模式,使得我們這個事務(wù)應(yīng)該比傳統(tǒng)的要快一點。
那么我們這個接口的話,在一致性考慮的情況下,我們這個性能提高20%多左右。
在這個基礎(chǔ)上我們也進一步做了優(yōu)化,對這些做一個差異事務(wù)處理,當然在這里面我們考慮了一些事情,就是說異地更新,在這里面有最早的這種東西,日志管理到事務(wù)本身的一些特性。
那么再就是講一下文件系統(tǒng),剛才講文件系統(tǒng)的問題很大,第一個我剛才講了,文件系統(tǒng)要管理,到了這個FTL,你要在上面做優(yōu)化根本很難,這不是你想象的,是一個很大的危害。
另外就是哪怕它是一個邏輯的東西,你沒有那么容易,所以你在上面做一些優(yōu)化的話很難。
再一個就是我們所有這些東西,都是這個特性的考慮。因為它是異地更新,異地更新既有它不好的地方,好的地方是能夠在這個磁盤上有兩個版本。
我們來看看從FTL,包括單層開始,怎么來用它,實際上FTL這個東西是一個很好的東西,F(xiàn)lash構(gòu)建這種磁盤在系統(tǒng)中用。
那后來就把它用到我們的服務(wù)器上,那服務(wù)器上就相當于用了一個FTL像磁盤來用,那這樣用起來很好、很方便的。但是這個事情我就說存在著幾個問題。
這里面很重要的一個事情就是冷熱(數(shù)據(jù))分組,這是個很關(guān)鍵的基礎(chǔ)。那么在這里面有一個NAT的表,因為在這里面會有不停地更新,這個很耗性能,也是產(chǎn)生很大的一系列延遲型問題。
另外一個就是有地址對齊的這么一個方式,使得它對這個效率能夠得到更高,而且能夠保證它的一致性。那這個現(xiàn)在已經(jīng)開源了,大家可以在上面拓展一下。在這個方面它有一定的性能上的提高,比如說F2FS上面,在SATASD的環(huán)境下,能夠提高2.5倍,在PCIESD的環(huán)境下能夠達到1.8倍的提高。
那這個工作雖然是在這方面,三星做了一些優(yōu)化,但是依舊還有很多問題沒有解決,而剛才說的文件系統(tǒng)那些都還沒有考慮。后來FusionIO做了一個事情,說你現(xiàn)在FTR是在這個磁盤上,后來就有人把這個FTR放到服務(wù)器主機上來做,這還是有差別的。
你想想一個磁盤陣列,它陣列上的內(nèi)存很小,F(xiàn)TRSD上面的內(nèi)存很小,它的計算能力雖然有芯片,但是計算能力很弱。如果我們把FTR放到服務(wù)器上的話,它可以利用主機強大的計算功能和大內(nèi)存,使得這個FTR的能力變得很強,這樣的話,它的性能、很多功能也能夠提升很高。
而其他的設(shè)備,你沒辦法做很多的優(yōu)化,它上面把裸的東西挪上去了,能夠在上面知道下層的一些分布,以及對應(yīng)的通道都能夠識別得出來,包括角度都能夠在這上面做,所以這應(yīng)該來說是一個很大的改進。FusionIO和普林斯頓做了這么一個文件系統(tǒng),就是這個文件系統(tǒng)和和你的FTR功能有一些冗余。另外一個就是它對FTR做了一些簡化。
我們來看看FISHIO提出了DFS這么一個文件系統(tǒng),這里面主要是提到了這么一個接口,使它能夠提供一些原子性。另外一個有底層的log機制,使得不要做額外log機制。另外這個文件系統(tǒng)的塊分配操作,就是文件系統(tǒng)的管理全部交給地層完成,這是FusionIO的一個思想,就是把FTR拿到上層來做,主機層和文件系統(tǒng)融合在一起,這樣的話性能提升還是很明顯的,這使得EST3它的直接讀寫性能夠提高20%左右,緩存性能能力提高1倍多。
但是這個思想的話也存在一定問題,它上面是沒有考慮閃存文件系統(tǒng)壽命。那么我們在這方面曾經(jīng)做了一些工作,包括這三個方面,我們提出了一個對象,就是把每個系統(tǒng)分為兩塊兒,一個是命名空間管理,一個是存儲管理,那這個存儲管理就是像把FTR也拿上來,和文件系統(tǒng)的存儲管理合在一起,提出來一個對象式FTR,是一個對象存儲管理。另外一個對這個文件系統(tǒng)命名空間也做了一些管理,里面一些消息,一些目錄的頻繁更新,我們做了很大一些優(yōu)化。
另外一個我們對這個閃存底層芯片并發(fā)處理我們也做了一些優(yōu)化,這個發(fā)表在FAST13和FAST14,以及ATC16上面做了一些事情,包括怎么考慮它的耐久性,怎么根據(jù)閃存的特征對它設(shè)計新目錄樹管理來做優(yōu)化。
我們來看看這三個步驟里的第一個步驟,就是做了一個對象式的FTL這么一個穩(wěn)定性,把它拿到文件系統(tǒng)里面的管理來,那么在這個里面有一些相關(guān)技術(shù),提出來一個接口,能夠獲得上層更多信息。另外一個我們在這里面做了一些壓縮,能夠減少它的一些寫入量和壽命;還有就是在這個理論的管理上也做了一些優(yōu)化。
我們做了一個測試,在同步的情況下,這個寫入量, OFSS平均寫入數(shù)據(jù)量為ext3的15.1%,ext3的52.6%,btrfs的10.6%;在異步情況下,OFSS平均寫入數(shù)據(jù)量為ext36%,而et2的80.2%,btrfs的15.1%。
那么下一步的工作就是我們怎么來利用優(yōu)化Flash的命名空間管理,在這個里面講這個目錄樹有時候更新一頁或者一塊,這個過程的話很多它都是小寫,也是很頻繁。那么在這里面就是說目錄樹怎么來構(gòu)建,把它做了一個分離,當然這個過程當中為了維護它的一致性,我們用了嵌入式的反向指針。另外一個在這里面做了一些壓縮,使得它能夠很快速地持久化,就是優(yōu)化它的命名空間。那么這個工作的效果是這樣,從性能和壽命跟已有的做了一個比較,在性能、壽命上也得到了一定的提升。
那么下面一個是我們的第三個工作,怎么來感知內(nèi)存內(nèi)部的并發(fā),因為FLASH系統(tǒng)有很多帶、有很多block等等,實際上這些東西都可以并發(fā)的,當然在這方面也做了一些相關(guān)的工作。
另外一個就是我在這個里面考慮到與固定協(xié)同的垃圾回收,就是相當于這里面的并發(fā)感知請求調(diào)度,而且是在這里面做分配的時候,我可以對它做一些調(diào)度,而且能夠優(yōu)化這些調(diào)度,甚至并發(fā)感知來做這么一個事情,這是我們做這個事情的三個思想。
那這個思想的話,我們也做了一些測試,效果還不錯,能夠取得達到1到2倍的最好性能,而且跟三星公司也做了比較性能比較。
好,剛才講的就是文件系統(tǒng),文件系統(tǒng)還不止這些。只是現(xiàn)在我個人認為還沒有說哪個文件系統(tǒng)把這些問題都徹底解決,或者說很成熟地在用,所以在這個方面應(yīng)該還有一些事情在做。
另外一個就是在上面的話,還有一些做KV數(shù)據(jù)庫的一些事情。這個是北大他們做的一個系統(tǒng),能夠給你提供來繞開這個文件系統(tǒng),這樣你的IOlogging就明顯地縮短。另外一個就是它這個是一個基于裸閃存的KV數(shù)據(jù)庫。
那么,這是2016年威斯康星做的一個KV系統(tǒng),它就是把K和V分離出來,傳統(tǒng)的K和V是存在一起的,但是要是K很小,就是4個字節(jié),那你這個東西如果要做一個排期的話,那把KV都這么導進來,一個性能慢,一個是還要里面有壽命的問題,所以就要把K和V來做一些分離,來解決它寫放大的問題。
但是它這種思想就很好地能夠發(fā)揮到閃存隨機讀的特性,而且它的這個效果也不錯。這是它的一個比較,就是傳統(tǒng)的LSM-tree構(gòu)建的KV系統(tǒng),它一般的帶寬也就是2兆到4兆,但是它這種分離了之后,它的性能呈這么一個顯示,1KB它能夠達到100多,所以說這個性能應(yīng)該是有一個很大的變化,威斯康星提出來這個key value還是一個很了不起的一個工作。
ATC有一個工作,就是對閃存的接口來做一些擴展,,傳統(tǒng)的KV系統(tǒng)中有這些東西,你要做這個logging,你甚至還要mapping,還要在這里面做一些垃圾回收、做一些處理,那你的FTR不是也有這些東西嗎?它就把這里面的兩塊兒有重疊的做了一些簡化,做了一個合并,同時還提供了一個接口,使得它的FTR得到一個可擴展的接口,把這個移植到FTR中,這是它的一個思想。
那這也是一個很重要的思想,它的結(jié)構(gòu)是這樣的,所以說這里面的KV的logging就短了很多。那像這種情況下可以看到它結(jié)果的比較,叫做NVMKV的系統(tǒng),它的性能明顯有一個大的變化。
所以這是剛才講的軟件存儲系統(tǒng)里面的工作,主要講的就是里面的這個接口,就是通過這個機制傳到終端,那你現(xiàn)在還能用終端嗎?還是會用更好的方式。再一個就是它的IO logging的層次,再就是接口問題,它的事務(wù)處理問題,主動說了一下它的文件系統(tǒng)和KV系統(tǒng),所以說它的這個軟件還是有很多的優(yōu)化。只是現(xiàn)在來說應(yīng)該還是一個熱點,還有在做。
就我了解,真正的大閃存,在很多的應(yīng)用中還沒有說真的把它用上,這也是作為一個磁盤陣列或者說作為一個緩存,作為它的一個部分,它還真正沒用上,這是因為這些軟件還是不成熟。
那么我們這剛才講了,這些軟件要做,你要構(gòu)成分布式的這種閃存系統(tǒng),分布式的協(xié)議是很重要的。這應(yīng)該是微軟他們提出來的叫做CORFU的這么一個協(xié)議,它把那些閃存作為一個裸閃存,當然這個閃存是經(jīng)過定制的,它有網(wǎng)口接口。
為什么說它有網(wǎng)卡的接口,它不是說把一個陣列或者說一個服務(wù)器弄到網(wǎng)上,一般就是把服務(wù)器上有很多的閃存卡或者說磁盤陣列構(gòu)建這么一個分布式系統(tǒng),它把這些閃存直接放在網(wǎng)上,用一個網(wǎng)連成一個大的存儲池,在這個過程當中它的協(xié)議就不一樣了。那傳統(tǒng)的要經(jīng)過服務(wù)器那些層次,它是將閃存直接連到網(wǎng)絡(luò)上。
另外一個為了保證它的強一致性,在里面也做了一些工作,這是它的一個構(gòu)建,當然優(yōu)點就是很節(jié)能,就是卡嘛,但是你一個服務(wù)器的話達到250瓦。
這是另外一個低延遲,它讀寫延遲低于1ms,而且故障恢復也很快,它保證了一些性能的事情。當然問題就是因為你這個卡是要掛在網(wǎng)上,它做了一些定制,有網(wǎng)卡在這個里面。
當然用起來還是比較受限,它的這個協(xié)議還是性能的問題,所以微軟在這個基礎(chǔ)上又進一步地做了優(yōu)化,那么這種情況下提出了一個in memory的數(shù)據(jù)結(jié)構(gòu),這個結(jié)構(gòu)主要是提供一個接口,使得你這個閃存中間能夠發(fā)揮它,而且底層協(xié)議能夠得到進一步的簡化,它這個就是利用樹結(jié)構(gòu)做了很多的抽象。所以這個協(xié)議開銷是相對于剛才的CORFU來說有一個大的降低,而且他這里面也做了一致性、持久性、原子性、隔離性。
那么,它的問題就是可擴展性的問題,還要受環(huán)境的一些制約,特別是在里面做checkpoint的時候,這個客戶開銷比較大。
實際上在協(xié)議上面我們也做了一定的工作,我在這里面因為做得比較簡單,就沒有放在這里面講。實際上我個人認為,真正的將來要用上,這個協(xié)議應(yīng)該來說是一個很大的變革,現(xiàn)在這個東西應(yīng)該是基本上都認可了它的低延遲。怎么來跟它結(jié)合,我會在下一階段提到這一點,它應(yīng)該來說還有一些值得研究的事情。
剛才講的就是怎么來構(gòu)建外層,我再講一點構(gòu)建外層的一個展望,就是我個人的定義。
第一個就是軟件管理,軟件的問題應(yīng)該來說是里面一個很重要的問題,接入PCIE的SFlash,下面就是磁盤的0.31%,軟件開銷不得不重視,它包括很多方面的內(nèi)容。另外一個,我們傳統(tǒng)磁盤的這種系統(tǒng),軟件經(jīng)歷了幾十年的發(fā)展,有很豐富的一些功能,那這個功能應(yīng)該來說也希望在這種面向閃存的存儲中也應(yīng)該得以保留,而這些功能又存在一些沖突和矛盾,怎么來處理這些東西,然后希望能夠把發(fā)展幾十年的功能在新構(gòu)建的環(huán)境下用得上,在這里面應(yīng)該是一個很大的挑戰(zhàn)。
這里面存在一個軟件的低開銷和這些管理功能之間的矛盾,這是一個值得考慮的事情。
此外,這種系統(tǒng)的變革應(yīng)該來說是顛覆式的,外層的系統(tǒng)怎么來重新審議。那么內(nèi)層的系統(tǒng),現(xiàn)在新的存儲系統(tǒng)除了閃存之外,應(yīng)該發(fā)展了有十多年了?,F(xiàn)在像新的PCM這個東西發(fā)展出來,那它肯定是要去做內(nèi)存,它的性能應(yīng)該更好,更能解決內(nèi)存的一些特性,而怎么來構(gòu)建,應(yīng)該來說也是一個很大的挑戰(zhàn)。
雷鋒網(wǎng)后續(xù)還將發(fā)布后續(xù)演講內(nèi)容,敬請期待。
雷峰網(wǎng)原創(chuàng)文章,未經(jīng)授權(quán)禁止轉(zhuǎn)載。詳情見轉(zhuǎn)載須知。