百度是國(guó)內(nèi)最早大規(guī)模使用SSD/Flash的互聯(lián)網(wǎng)公司之一,早在2007年,就開(kāi)始在搜索引擎中大規(guī)模使用SSD。在過(guò)去的幾年中,百度數(shù)據(jù)中心部署了數(shù)以十萬(wàn)計(jì)的SSD,支撐了每天60億次的搜索請(qǐng)求及其背后的廣告、大數(shù)據(jù)實(shí)時(shí)分析處理、CDN等系統(tǒng)。在百度多年部署使用SSD的過(guò)程中,積累了很多經(jīng)驗(yàn),也發(fā)現(xiàn)了傳統(tǒng)SSD的一些缺陷。在實(shí)際系統(tǒng)中,傳統(tǒng)SSD只能為上層軟件或存儲(chǔ)系統(tǒng)提供硬件裸帶寬(raw bandwidth)的40%左右,甚至更低。因?yàn)镕lash必須先擦除再寫(xiě)入的特性(Out-of-place Update)以及需要7%~50%的預(yù)留空間(over-provisioning space)來(lái)處理隨機(jī)寫(xiě),傳統(tǒng)SSD還需要提供10%左右的空間來(lái)做Flash通道之間的奇偶校驗(yàn),因此,傳統(tǒng)SSD只能提供硬件裸容量(raw capacity)的50%~70%給上層應(yīng)用或存儲(chǔ)系統(tǒng)。另外,傳統(tǒng)SSD的性能往往會(huì)在使用過(guò)程中出現(xiàn)抖動(dòng),或隨著剩余空間變小而降低?紤]到百度大規(guī)模的數(shù)據(jù)中心和大規(guī)模的SSD部署,傳統(tǒng)SSD的不足給我們帶來(lái)了巨大的成本和效率開(kāi)銷。
我們認(rèn)為非常有必要按照大規(guī)模存儲(chǔ)系統(tǒng)的需求重新設(shè)計(jì)SSD的軟硬件架構(gòu),以徹底解決其不足。于是我們提出“軟件定義Flash”(SDF,Software–Defined Flash)的概念。SDF是一個(gè)軟件硬件協(xié)同的系統(tǒng),把底層Flash通道的接口暴露給上層軟件,軟件可以管理數(shù)據(jù)的分布,以充分挖掘硬件的并發(fā)性;同時(shí)針對(duì)大規(guī)模存儲(chǔ)系統(tǒng)的特性設(shè)計(jì)軟硬件架構(gòu),消除了傳統(tǒng)SSD的冗余空間和奇偶校驗(yàn)空間,使得幾乎所有的Flash空間都能提供給上層軟件使用。百度自行實(shí)現(xiàn)了SDF所有的軟件和硬件設(shè)計(jì),并部署在內(nèi)部存儲(chǔ)系統(tǒng)上,實(shí)現(xiàn)了99%的容量利用率和95%的帶寬利用率。相對(duì)于傳統(tǒng)同配置的PCIE SSD,性能提高了3倍,成本降低了50%。
傳統(tǒng)SSD的特性與不足
SSD是采用NAND為介質(zhì)的存儲(chǔ)設(shè)備,與機(jī)械硬盤(pán)不同,它不需要任何機(jī)械操作,因而功耗很低,帶寬比機(jī)械硬盤(pán)高1個(gè)數(shù)量級(jí),IOPS高兩個(gè)數(shù)量級(jí)。隨著NAND顆粒不斷降價(jià),SSD應(yīng)用更加廣泛,基本成為數(shù)據(jù)中心的標(biāo)準(zhǔn)配置之一。但其每GB成本仍然比機(jī)械硬盤(pán)貴1個(gè)量級(jí)以上,因此,充分發(fā)揮SSD的潛能就顯得非常重要。
NAND有如下兩個(gè)特性,決定了SSD的一切設(shè)計(jì)取舍。
先擦除才能寫(xiě)(Out-of-place Update):一個(gè)物理塊必須先擦除才能寫(xiě)入新數(shù)據(jù)。
該特性會(huì)影響隨機(jī)寫(xiě)性能,因?yàn)楦碌臄?shù)據(jù)不能直接覆蓋舊數(shù)據(jù),而是必須先寫(xiě)到一塊已擦除過(guò)的新塊中,等寫(xiě)到一定程度,需要把老的、無(wú)用的數(shù)據(jù)統(tǒng)一刪除,以騰出空間給新數(shù)據(jù)。這個(gè)過(guò)程需要merge操作,非常耗時(shí)。因此傳統(tǒng)SSD必須預(yù)留很大容量(一般為7%~50%),作為寫(xiě)緩存,以降低merge的代價(jià)。一般越高端、性能越好的SSD冗余空間就越大。也就是說(shuō),一個(gè)本來(lái)有1TB空間的SSD,為了確保高效,用戶只能使用500GB。這意味著落到用戶的每GB成本就更高,但如果冗余空間較小,往往性能也沒(méi)法滿足用戶的需求。
我們選擇一款SATA接口的SSD硬盤(pán),通過(guò)調(diào)節(jié)冗余空間,在不同比例下做隨機(jī)寫(xiě)測(cè)試,可以看到,冗余空間為7%時(shí)相對(duì)于0%有接近4倍的性能提升,冗余空間為50%相對(duì)于7%有40%多的性能提升(如圖1所示)。
Out-of-place Update還會(huì)導(dǎo)致一個(gè)問(wèn)題是寫(xiě)放大系數(shù)(Amplification Factor)。SSD在做垃圾回收的過(guò)程中要做merge操作,會(huì)把一些有效數(shù)據(jù)搬移到新塊,并把原來(lái)的塊擦掉,導(dǎo)致了額外的擦除。如果寫(xiě)放大系數(shù)太大,會(huì)大大降低SSD的使用壽命,一般寫(xiě)放大系數(shù)都在2~3之間。
傳統(tǒng)SSD的大部分設(shè)計(jì)努力,都是在保證一定性能的前提下,盡量降低冗余空間的比例和寫(xiě)放大系數(shù)。
單個(gè)NAND的性能非常有限,必須利用多個(gè)NAND并發(fā)操作來(lái)達(dá)到較高的性能。
一般一個(gè)頁(yè)的讀延時(shí)是幾十μs,寫(xiě)延時(shí)是ms量級(jí),一個(gè)NAND芯片內(nèi)部會(huì)有多個(gè)plane,一個(gè)SSD會(huì)有多個(gè)NAND通道。SSD控制器會(huì)把數(shù)據(jù)盡量strip到多個(gè)通道中的多個(gè)plane中,以通過(guò)并發(fā)訪問(wèn)提高總性能。傳統(tǒng)SSD的硬件架構(gòu)如圖2。
一個(gè)SSD控制器包含十個(gè)到幾十個(gè)Flash通道,每個(gè)通道一般包含1~2個(gè)NAND顆粒,每個(gè)NAND顆粒有數(shù)個(gè)到十幾個(gè)Flash plane。如果用戶要寫(xiě)一塊數(shù)據(jù)到SSD,這時(shí)SSD控制器會(huì)負(fù)責(zé)把數(shù)據(jù)拆成小塊,并發(fā)寫(xiě)到多個(gè)通道中,以充分利用硬件的并發(fā)性。如果要讀數(shù)據(jù),SSD也會(huì)根據(jù)之前寫(xiě)的映射關(guān)系找到對(duì)應(yīng)的通道,將數(shù)據(jù)讀出來(lái)。傳統(tǒng)SSD的控制器需要承擔(dān)數(shù)據(jù)stripping、layout和mapping管理等策略,很難針對(duì)不同應(yīng)用需求、不同訪問(wèn)模式做到最優(yōu),而且會(huì)增加硬件復(fù)雜度,提升成本。
NAND還有一些其他特點(diǎn),如讀寫(xiě)以為頁(yè)單位,擦除以塊為單位,數(shù)據(jù)必須經(jīng)過(guò)BCH校驗(yàn),使用過(guò)程中會(huì)出現(xiàn)壞塊,每個(gè)塊都有固定的使用壽命等,這導(dǎo)致了SSD設(shè)計(jì)還有其他一些妥協(xié),如磨損平衡、地址映射等。
軟件定義硬件原則
所謂軟件定義硬件,從系統(tǒng)角度來(lái)看,有兩個(gè)原則。
1.應(yīng)用驅(qū)動(dòng)。
2.軟硬件協(xié)同系統(tǒng)。
從實(shí)現(xiàn)的角度,有如下三個(gè)設(shè)計(jì)原則。
1.硬件要簡(jiǎn)單,可控性大于智能化。
2.盡可能暴露硬件底層接口。
3.軟件從層次化變成豎井化。
軟件定義Flash
基于這樣的設(shè)計(jì)原則,在2011年初,我們開(kāi)始著手設(shè)計(jì)面向大規(guī)模存儲(chǔ)需求的下一代SSD——SDF。
SDF擁有與傳統(tǒng)SSD完全不一樣的架構(gòu)和設(shè)計(jì),我們針對(duì)海量存儲(chǔ)系統(tǒng)的數(shù)據(jù)訪問(wèn)模式設(shè)計(jì),底層硬件接口暴露給上層軟件,取消了傳統(tǒng)的Linux文件系統(tǒng)和I/O棧,主要?jiǎng)?chuàng)新包括以下幾點(diǎn)。
全新的硬件架構(gòu)
底層Flash通道暴露給上層軟件,軟件可直接管理數(shù)據(jù)的layout以充分挖掘硬件的并發(fā)能力。SDF的架構(gòu)如圖3所示,可以看到,其架構(gòu)和SSD有明顯不同。在SDF中,每個(gè)Flash通道對(duì)于上層軟件來(lái)說(shuō)都是一個(gè)獨(dú)立的小SSD,軟件通過(guò)自己定義的調(diào)度器來(lái)管理數(shù)據(jù)的布局,使得多個(gè)通道能比較容易同時(shí)工作,這樣實(shí)際帶寬可以在不同場(chǎng)景下都能達(dá)到硬件裸帶寬的極限。
每個(gè)Flash通道具有一個(gè)獨(dú)立的FTL(Flash Translation Layer)控制器,實(shí)現(xiàn)了簡(jiǎn)單的地址映射、壞塊管理等功能。
全新的軟件架構(gòu)
消除了傳統(tǒng)的Linux文件系統(tǒng)和I/O棧,我們自行研發(fā)了輕量級(jí)的用戶態(tài)文件系統(tǒng),大大降低了I/O請(qǐng)求延時(shí)。SDF的軟件架構(gòu)如圖4所示。
基于從層次到豎井的設(shè)計(jì)原則,我們可以看到,SDF的軟件棧,只保留了最底層的硬件驅(qū)動(dòng),其他層次都沒(méi)有了,Linux的文件系統(tǒng)也變成了用戶態(tài)的一個(gè)輕量級(jí)文件系統(tǒng)。
不對(duì)稱的讀寫(xiě)粒度,寫(xiě)單位是2MB,剛好是一個(gè)擦除塊的大;讀單位是8KB,剛好是一個(gè)頁(yè)的大小。在互聯(lián)網(wǎng)大規(guī)模存儲(chǔ)系統(tǒng)中,為了提高I/O性能,一般都會(huì)在內(nèi)存中把隨機(jī)寫(xiě)合并成順序?qū),典型系統(tǒng)包括Google的LevelDB,F(xiàn)acebook的Haystack,以及百度的新存儲(chǔ)體系。可以把持久化寫(xiě)的粒度設(shè)置成NAND的擦除塊大小,并且硬件不做stripping,這樣就不需要預(yù)留冗余空間,也不需要垃圾回收,因此寫(xiě)放大系數(shù)恒為1。
全新的系統(tǒng)視角
通過(guò)軟硬件結(jié)合的辦法保證系統(tǒng)的可靠性。因?yàn)榇鎯?chǔ)系統(tǒng)本身已對(duì)數(shù)據(jù)進(jìn)行了3副本備份或做了Erasure Code,因此并不需要硬件提供非?量痰目煽啃员U。而傳統(tǒng)SSD除了對(duì)數(shù)據(jù)做了必須的BCH校驗(yàn),還在通道之間做了橫向的奇偶校驗(yàn),奇偶校驗(yàn)數(shù)據(jù)存儲(chǔ)在一個(gè)獨(dú)立的通道,相當(dāng)于消耗了一個(gè)通道的容量。SDF取消通道間的奇偶校驗(yàn),把之前存放奇偶校驗(yàn)數(shù)據(jù)的通道用來(lái)存放數(shù)據(jù),相當(dāng)于多增加了10%的存儲(chǔ)空間。
具體的設(shè)計(jì)細(xì)節(jié)和設(shè)計(jì)原則,可以參考百度發(fā)表在ASPLOS 2014上的論文《SDF: Software-Defined Flash for Web-scale Internet Storage Systems》。
SDF性能數(shù)據(jù)
2011年設(shè)計(jì)的SDF采用25nm的Micron MLC NAND,控制器采用Xilinx的FPGA,硬件板卡由第三方ODM提供,百度自行設(shè)計(jì)了Verilog RTL代碼、驅(qū)動(dòng)代碼和用戶態(tài)文件系統(tǒng)代碼。
在大壓力測(cè)試時(shí),性能數(shù)據(jù)如表1。
百度SDF和“市場(chǎng)某主流PCIE SSD”采用同樣的硬件配置,但性能更好。SDF的讀帶寬達(dá)到1.59GB/s,是PCIE 1.1 x8實(shí)際性能的上限,帶寬利用率99%;寫(xiě)性能達(dá)到0.96GB/s,是44個(gè)Flash通道寫(xiě)聚合性能的上限,寫(xiě)帶寬利用率達(dá)到96%。
我們可以通過(guò)定義不同的軟件調(diào)度策略來(lái)激活不同的Flash通道,通過(guò)不斷增加工作的通道數(shù)量,可以看到,其讀寫(xiě)性能也線性提高(如圖5),可見(jiàn)SDF的設(shè)計(jì)具有非常良好的擴(kuò)展性。
結(jié)論
百度提出軟件定義硬件的概念,并依此原則設(shè)計(jì)了軟件定義Flash(SDF),我們將SDF部署在實(shí)際生產(chǎn)環(huán)境,每GB成本比市場(chǎng)上主流的PCIE SSD降低了50%,性能提高了3倍。同時(shí)在ASPLOS、EUROSYS、ISLPED等全球頂級(jí)計(jì)算機(jī)系統(tǒng)和體系結(jié)構(gòu)會(huì)議發(fā)表論文3篇,發(fā)明專利9個(gè),取得了良好的應(yīng)用效果和學(xué)術(shù)成果。
SDF除了可以應(yīng)用在百度的大規(guī)模存儲(chǔ)系統(tǒng)中,也可以用在其他基于LSM-tree的存儲(chǔ)系統(tǒng),如Haystack、LevelDB等,具有很好的適應(yīng)性。
核心關(guān)注:拓步ERP系統(tǒng)平臺(tái)是覆蓋了眾多的業(yè)務(wù)領(lǐng)域、行業(yè)應(yīng)用,蘊(yùn)涵了豐富的ERP管理思想,集成了ERP軟件業(yè)務(wù)管理理念,功能涉及供應(yīng)鏈、成本、制造、CRM、HR等眾多業(yè)務(wù)領(lǐng)域的管理,全面涵蓋了企業(yè)關(guān)注ERP管理系統(tǒng)的核心領(lǐng)域,是眾多中小企業(yè)信息化建設(shè)首選的ERP管理軟件信賴品牌。
轉(zhuǎn)載請(qǐng)注明出處:拓步ERP資訊網(wǎng)http://www.ezxoed.cn/
本文標(biāo)題:百度面向大規(guī)模存儲(chǔ)系統(tǒng)的軟件定義Flash
本文網(wǎng)址:http://www.ezxoed.cn/html/consultation/10839617296.html