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