全面解析閃存技術(shù)大餐 架構(gòu)/顆粒/接口/可靠性
閃存最明顯特點就是穩(wěn)定性能,低時延和高隨機IOPS。對于閃存,在評估性能時,我們一般主要關(guān)注90% IO落入規(guī)定的時延范圍(性能是一個線性范圍,而不是某一個點)。數(shù)據(jù)保護等追求所有軟件特性都基于Inline實現(xiàn),如Inline重刪、壓縮、Thin-Provisioning(尤其是重刪,一方面SSD價格還是偏高,重刪壓縮可以節(jié)約投入成本;另一方面也減少了IO下盤次數(shù)提高SSD壽命)。但對于閃存,我們所關(guān)注的特性和技術(shù)指標(biāo)遠遠不止這些。
本文引用地址:http://m.butianyuan.cn/article/201808/384905.htm閃存架構(gòu)
閃存的Scale out能力:橫向擴展能力是應(yīng)對并發(fā)訪問和提升性能容量的最基本特性,所以閃存是必須具備的功能。目前XtremIO支持16控,solidfire已經(jīng)支持但100個控制器節(jié)點。
控制器對稱A/A 能力:閃存的主要應(yīng)用場景如OLTP等,傳統(tǒng)的A/P、ALUA陣列在主控制器故障切換時都需要時間切換,并導(dǎo)致IO歸零;并且在閃存陣列下,一般系統(tǒng)CPU是瓶頸,所以只有無歸屬、性能均衡的A/A對稱架構(gòu)才能更好應(yīng)對。目前傳統(tǒng)存儲(如EMC VMAX/VNX,HP 3PAR, HDS USP/VSP)都已經(jīng)支持,但是閃存陣列還沒看見宣傳;好多閃存產(chǎn)品,如 PureStorage還是 A/P模式。
元數(shù)據(jù)管理
閃存的設(shè)計主要是考慮如何發(fā)揮出SSD的隨機訪問性能,不像HDD那樣,需要通過預(yù)取、IO聚合技術(shù)來提高下盤的順序性,減少對機械盤的操作來提升性能。所以閃存在設(shè)計上要考慮如何優(yōu)化元數(shù)據(jù)(系統(tǒng)元數(shù)據(jù)、重刪壓縮指紋、FTL映射等)管理,IO調(diào)度策略,垃圾回收和磨損均衡等設(shè)計。
兩層元數(shù)據(jù)管理架構(gòu)是實現(xiàn)元數(shù)據(jù)管理的趨勢,其基本思想是元數(shù)據(jù)映射基于LBA->塊ID->Block位置的Map形式,卷的數(shù)據(jù)LBA映射到塊ID,而不是磁盤上的物理Block地址;數(shù)據(jù)變化后只需改變對應(yīng)塊ID映射關(guān)系,塊ID就可以映射到新的物理空間,這樣相比單層方式就簡化重刪壓縮實現(xiàn)和效率。
SolidFire采用兩層元數(shù)據(jù)管理架構(gòu)實現(xiàn)元數(shù)管理,元數(shù)據(jù)管理采用Key-Value方式;元數(shù)據(jù)映射基于LBA->塊ID->位置的Map形式,卷的數(shù)據(jù)LBA對應(yīng)塊ID,而不是磁盤上的物理地址;所以數(shù)據(jù)變化后計算指紋只需改變對應(yīng)塊ID映射關(guān)系,天然就支持重刪。在垃圾回收時,是采用塊標(biāo)記法實現(xiàn)對未使用塊的清除。
GFTL功能
GFTL稱作Global FTL,閃存陣列可以配合SSD控制器(需要SSD開放內(nèi)部接口給陣列),通過陣列完成一些如ROW寫滿條帶下盤,全局負載均衡,整塊對齊擦除、垃圾回收等高級優(yōu)化功能。另外,GFLT也可記錄重刪壓縮數(shù)據(jù)庫,指紋元數(shù)據(jù)管理,實現(xiàn)RAID功能,進行IO聚合,通過元數(shù)據(jù)記錄實現(xiàn)RAID滿條帶下盤,從而規(guī)避讀、修改、寫放大操作,解決Write-Hole問題等。
SSD自身的FTL只能完成數(shù)據(jù)LAB/重刪后數(shù)據(jù)塊、到真實顆粒塊(block)的影射,只能實現(xiàn)簡單的垃圾回收和ROW數(shù)據(jù)寫,內(nèi)部把不同Block組織在一起組成RAID。很多外購SSD磁盤的閃存廠商都還不支持GFTL技術(shù),但是該技術(shù)是提高閃存效率和競爭力的有力武器。
重刪特性
重刪是閃存最基本特性之一,分為Inline和Postline,但對閃存Inline才能體現(xiàn)真正價值。重刪一般分為HASH指紋算法(以SHA-1為例說明,存在碰撞問題)和按字節(jié)對比法兩種,逐字節(jié)對比可靠性高,但會嚴(yán)重影響閃存性能,所以很少使用,只在數(shù)據(jù)一致性要求非常嚴(yán)格的場景下使用。
SHA-1算法會有Hash沖突的概率,Hash輸出長度一般為160字節(jié)的數(shù)字,對不同數(shù)據(jù)塊(大小可設(shè)置)其輸出是隨機的,在0-2^(160-1)間分布,不同數(shù)據(jù)產(chǎn)生相同Hash值的概率2^(-160),只有數(shù)據(jù)量(固定數(shù)據(jù)塊大小)超過這些數(shù)字能表示的值時,才會發(fā)生Hash沖突,但到目前位置,所有產(chǎn)生的數(shù)據(jù)量總和都不至于產(chǎn)生Hash沖突。
所以Hash方式在產(chǎn)品中最為常見。場見的強Hash算法有SHA-1, SHA-256等;常見的弱Hash算法有Murmur3, CRC, MD5等;強Hash發(fā)生沖突的概率低。
但是在某些場景,如在8K業(yè)務(wù)數(shù)據(jù)塊大小的數(shù)據(jù)庫場景下,Key值基本上是唯一的,如果重刪粒度也是8K則根本起不到重刪的效果,可以讓客戶選擇關(guān)閉該功能(XtremIO的Inline重刪功能是無法關(guān)閉的),只開啟壓縮。
IO基本流程
數(shù)據(jù)從主機下發(fā)到閃存陣列控制器,對于非A/A架構(gòu)的閃存來說,首先盤判斷IO對應(yīng)LUN的歸屬,如果LUN歸屬在在本地控制器,IO就寫到到對應(yīng)Cache并鏡像,否則轉(zhuǎn)發(fā)給LUN歸屬控制器處理。Cache到水位時再切分塊LBA為相應(yīng)大小后,交給增值模塊(如重刪壓縮模塊)處理,計算出指紋后,將指紋和數(shù)據(jù)(重復(fù)數(shù)據(jù)只保留指紋)交給歸屬控制器來完成下盤,相關(guān)模塊下盤時分配分條,湊滿條帶后順序?qū)懭氪疟P,記錄真實地址和指紋關(guān)系,保存指紋到指紋數(shù)據(jù)庫。
Block磨損均衡
Block磨損均衡是為了讓數(shù)據(jù)均勻分布在SSD的所有Block中,從而能達到冷熱點均勻分布提高SSD壽命的目的。閃存必須提供磨損均衡來實現(xiàn),磨損均衡分為動態(tài)磨損均衡和靜態(tài)磨損均衡;動態(tài)磨損均衡是由主機更新數(shù)據(jù)觸發(fā)的,通過主機讀寫保證數(shù)據(jù)的擦寫平均分布到所有的Block上,因為每種應(yīng)用都有冷熱數(shù)據(jù),所以靜態(tài)磨損均衡并不能保證冷熱度均勻分布。
靜態(tài)磨損均衡是由SSD內(nèi)部機制實現(xiàn),將冷Block上的數(shù)據(jù)進行轉(zhuǎn)移(不同于垃圾回收),擦寫冷Block上面的數(shù)據(jù)來接受經(jīng)常變化的熱點數(shù)據(jù),使冷Block有機會成為熱Block,從而使SSD中所有Block的冷熱度達到平衡。
SSD掉電保護
為了防止SSD磁盤中緩存數(shù)據(jù)由于掉電丟失,SSD還需要提供掉電保護功能。一般SSD會設(shè)計電壓檢測模塊來實時檢測電壓值,當(dāng)電壓低于設(shè)置閾值時,SSD電壓檢測模塊會通知SSD控制器進入掉電數(shù)據(jù)刷寫流程,此時會有超級電容作為備電源供電,把磁盤緩存數(shù)據(jù)刷到Flash顆粒中,防止數(shù)據(jù)丟失。
另一方面,閃存陣列也應(yīng)該提供一種機制,當(dāng)陣列主動下電或升級維護時,下發(fā)命令給SSD,讓SSD進入掉電緩存數(shù)據(jù)刷新流程,保證數(shù)據(jù)一致性。
閃存(Flash)是相對于HDD而言的一種非易失性存儲器,F(xiàn)lash分為NOR Flash和NANDFlash,NOR Flash可以當(dāng)作內(nèi)存使用直接執(zhí)行程序,相比DDR 、 SDRAM 或者 RDRAM具有掉電數(shù)據(jù)不丟失等特點,所以在嵌入式設(shè)備(ARM/MIPS等體系架構(gòu))中,一般采用NOR Flash存儲BootLoader和OS程序。但今天我們的重點是NAND Flash。
Flash顆粒解析
學(xué)習(xí)過模擬電路的同學(xué)都知道,在模電原理里三極管分兩種,一種是雙極性三極管,主要基于載流子用來做電流放大,另一種叫做CMOS場效應(yīng)三極管,通過電場控制的金屬氧化物半導(dǎo)體。NAND Flash就是基于場效應(yīng)P/N溝道和漏極、柵極技術(shù)通過浮柵Mosfet對柵極充電實現(xiàn)數(shù)非易失據(jù)儲存的。一個晶體單元稱作一個Cell,向Cell中充電就是編程或?qū)懭霐?shù)據(jù),通過電平的高低來判斷數(shù)據(jù)是0還是1。在SLC顆粒類型的Flash中,沖入電荷讀取到閾值電平為高電平,一般表示數(shù)據(jù)0。
評論