我們知道閃存磁盤是在HDD以后出現(xiàn)的,由于SSD優(yōu)異的隨機(jī)性能、越來越大的容量和越來越低的成本等優(yōu)勢,使得閃存熱度上升、乃至大有替換HDD的趨勢。由于歷史繼承性等原因,SSD在設(shè)計(jì)是也是借鑒了部分HDD技術(shù),包含接口技術(shù)。
現(xiàn)在絕大多數(shù)SSD都是采用SATA/SAS接口,但是通用的SATA/SAS接口是針對HDD設(shè)計(jì),但面對閃存速度上百倍的提升,接口的帶寬就成為了I/O的最大瓶頸;隨后PCIe接口的SSD也得到廣泛應(yīng)用來應(yīng)對高性能要求;美光也開始探索串行NOR閃存接口。
到目前為止,大部分存儲廠商都推出了對應(yīng)的PCIe閃存卡(如 EMC XtremSF PCIe SSD卡 )和磁盤。
PCIe-SSD架構(gòu)解析
PCIe作為CPU的局部總線,最大的特點(diǎn)在于數(shù)據(jù)傳輸吞吐量大和延遲低。對于NandFlash固態(tài)存儲而言,傳統(tǒng)磁盤存儲領(lǐng)域存在的隨機(jī)讀寫問題將不復(fù)存在,因此,整個(gè)存儲系統(tǒng)的瓶頸從存儲介質(zhì)轉(zhuǎn)移到了傳輸接口上來了。為存儲而生的SATA/SAS接口在SSD上的表現(xiàn)不是那么理想了,非常影響IO的傳輸延遲。為此,顯而易見,存儲接口應(yīng)該從傳統(tǒng)的SATA/SAS往離CPU更近的系統(tǒng)總線PCIe或者DIMM方向發(fā)展。
大家其實(shí)很早就認(rèn)識到了這一點(diǎn),當(dāng)年Fusion-io推出基于PCIe的閃存卡時(shí),讓整個(gè)業(yè)界為此眼前一亮,原來閃存也可以這么玩?為此,F(xiàn)usion-io在前幾年都一直非常的紅火。NandFlash本身不是一個(gè)新東西,基于NandFlash的存儲在電子設(shè)計(jì)領(lǐng)域,以及移動(dòng)存儲領(lǐng)域早就開始應(yīng)用了。但是,將NandFlash作為數(shù)據(jù)中心的存儲介質(zhì)、在消費(fèi)電子領(lǐng)域替代磁盤,也就發(fā)展了沒有多少年。作為磁盤存儲的第二選擇,很多芯片廠商提供了基于SATA、SAS接口的NandFlash控制器,例如Marvell、LSI都有類似的芯片。
但是,為了能夠充分利用NandFlash存儲介質(zhì)的特性,SATA、SAS接口本身就是一個(gè)性能瓶頸點(diǎn)。這兩年基于PCIe接口的SSD存儲一直在蓬勃發(fā)展,由于整個(gè)行業(yè)處于軍閥混戰(zhàn)的年代,nvme標(biāo)準(zhǔn)還沒有充分的得到落實(shí),所以,這方面的接口控制器也就五花八門,個(gè)具特色。
在市場早期,很多廠商為了能夠快速進(jìn)入市場,利用現(xiàn)有技術(shù)很快構(gòu)建出了PCIe接口的閃存卡。典型的產(chǎn)品如上圖所示,這是一款Oracle(SUN)的PCIe Flash卡,采用4個(gè)Marvell閃存控制器的SATA閃存模塊,通過LSISAS1068E控制器連接到PCIe總線上。這種結(jié)構(gòu)將已經(jīng)成熟的HBA控制器和基于SATA/SAS接口的NandFlash控制器技術(shù)結(jié)合了起來,具體如下所示:
從技術(shù)的角度來看,采用這種方案顯然引入了延遲,中間多了一層SATA/SAS接口的轉(zhuǎn)換。所以,這種卡的性能往往會比Fusion-IO的性能要差。原因在于Fusion-IO沒有采用這種簡單的技術(shù)堆疊,而是采用FPGA自己做了一個(gè)基于PCIe的NandFlash控制器。采用這種技術(shù)方案的結(jié)構(gòu)如下圖所示:
上述方案最大的好處是降低了IO延遲,去除了無謂的SAS/SATA接口層,使NandFlash直接連到了PCI總線上。這種直接基于PCI總線的技術(shù)方案也被稱之為Native PCIe方案,并且已經(jīng)成為各個(gè)廠商公認(rèn)的未來閃存存儲的技術(shù)路線之一。所以,從芯片廠商的角度出發(fā),急需需要研制基于PCI接口的閃存控制器,替代現(xiàn)有的接口轉(zhuǎn)換方式。
如今以Intel為首的Nvme標(biāo)準(zhǔn)如火如荼的推進(jìn),并且慢慢的被各大廠商接受。一旦Nvme標(biāo)準(zhǔn)大范圍的應(yīng)用,基于該標(biāo)準(zhǔn)的控制器將會大量涌現(xiàn),到那時(shí),基于PCI總線的閃存存儲將會和現(xiàn)在的SATA/SAS存儲一樣,成為應(yīng)用主流。有時(shí)候在想,F(xiàn)usion-IO為什么當(dāng)年沒有和Intel進(jìn)行合作?或者為什么Fusion-IO沒有自己來推動(dòng)閃存控制器的變革,讓更多的廠商一起加入到這個(gè)游戲圈中來?從短期來看,F(xiàn)usion-IO的產(chǎn)品有很大的價(jià)值,但是,從長期來看,更大的價(jià)值在于控制器、基于Nandflash存儲軟件的標(biāo)準(zhǔn)化。Flash存儲的市場空間巨大,標(biāo)準(zhǔn)化會是大勢所趨。雖然Fusion-IO發(fā)展很早,但是,沒有趕上標(biāo)準(zhǔn)化的快車,因此,標(biāo)準(zhǔn)化的集團(tuán)軍會對Fusion-IO進(jìn)行圍剿,從而導(dǎo)致Fusion-IO發(fā)展困難。
分析閃存控制器的架構(gòu),首先得了解SSD。一般來說SSD的存儲介質(zhì)分為兩種,一種是采用閃存(Flash芯片)作為存儲介質(zhì),另外一種是采用DRAM作為存儲介質(zhì)。我們通常所說的SSD就是基于閃存的固態(tài)硬盤,其采用FLASH芯片作為存儲介質(zhì)。SSD的基本組成結(jié)構(gòu)包括Flash顆粒和Flash控制器,F(xiàn)lash控制器中有芯片,負(fù)責(zé)Flash的讀寫、磨損均衡、壽命監(jiān)控等等。
Flash控制器的主要的工作任務(wù)包括三大方面:一是后端訪問Flash,管理后端Flash顆粒,包括各種參數(shù)控制和數(shù)據(jù)IO; 二是前端提供訪問接口和協(xié)議:實(shí)現(xiàn)對應(yīng)的SAS/SATA target協(xié)議端或者NVMe協(xié)議端, 獲取Host發(fā)出的IO指令并解碼和生成內(nèi)部私有數(shù)據(jù)結(jié)果等待執(zhí)行;三是FTL層核心處理。下面我們具體來介紹一下Flash 控制器是怎樣做這幾件事的。
第一,后端訪問Flash的操作內(nèi)容
后端訪問Flash首先必須提到的是閃存通道控制器。這個(gè)控制器里面有多個(gè)通道,每個(gè)通道掛多片F(xiàn)lash。它與后端Flash顆粒之間存在托管協(xié)議。數(shù)據(jù)寫入Flash的時(shí)候,除了主機(jī)發(fā)送的數(shù)據(jù)或者原始數(shù)據(jù),其他數(shù)據(jù)都必須進(jìn)行ECC校驗(yàn)。ECC是通用的稱謂,里面有多種算法,其中包括糾錯(cuò)率較低的BCH算法,LAPC低密度校驗(yàn)碼等。數(shù)據(jù)讀出的時(shí)候,通過擾碼,加擾,解擾,看ECC是否出現(xiàn)錯(cuò)誤,若有錯(cuò)則在糾錯(cuò)后將芯片發(fā)到內(nèi)部,供后續(xù)的程序處理。因此,后端訪問Flash的主要任務(wù)即是管理后端Flash顆粒,包括各種參數(shù)控制和數(shù)據(jù)IO。
第二,前端提供訪問接口和協(xié)議
前端提供訪問接口和協(xié)議,跟主機(jī)驅(qū)動(dòng)通信,利用標(biāo)準(zhǔn)格式輸配到系統(tǒng)里面,接收主機(jī)端發(fā)過來的指令,即完成、實(shí)現(xiàn)對應(yīng)的SAS/SATA target協(xié)議端或者NVMe協(xié)議端,獲取Host發(fā)出的IO指令并解碼和生成內(nèi)部私有數(shù)據(jù)結(jié)構(gòu)等待執(zhí)行。如果遵從NVMe標(biāo)準(zhǔn),包括提交命令的方法、完成命令的處理方法等都定好了,包括各種隊(duì)列、隊(duì)列深度,Queue Pair的總體數(shù)量最大可以達(dá)到64K個(gè),隊(duì)列深度也可達(dá)64K個(gè),所以,系統(tǒng)里同時(shí)可能存在64K×64K IO排著,但是目前的系統(tǒng)是用不到這么多Queue的,因?yàn)榈紫碌慕橘|(zhì)速度還不足以支撐。
第三,F(xiàn)TL層——核心層處理
核心層FTL層,是一款Flash控制器的關(guān)鍵競爭力所在。它既可以是純軟件算法,包括元數(shù)據(jù)管理,數(shù)據(jù)布局影射、磨損均衡、垃圾回收、緩存策略、片間RAID和掉電元數(shù)據(jù)一致性保障等內(nèi)容。同時(shí),它也可以在進(jìn)行重復(fù)性工作時(shí)輔以硬加速引擎。這是非純軟件的,輔有硬加速的成分在里面。硬加速涉及到所使用的芯片。有的芯片支持硬加速,比如說鏈表的維護(hù)。這是因?yàn)樽隼厥諘r(shí)需要要用到鏈表,拿傳統(tǒng)的軟件算法,插入一個(gè)或者追加一些項(xiàng)目,所耗費(fèi)的CPU周期較大,此時(shí)用硬加速并行,再加上一些硬邏輯的加速,則可節(jié)省開銷。
Flash控制器的兩種策略和方式:
現(xiàn)有的Flash控制器可采用兩種方式:一種是少量的強(qiáng)核心加少量硬件加速。所謂強(qiáng)核心就是一個(gè)核心的性能高、頻率高,分支預(yù)判、并行度、單元數(shù)量、執(zhí)行管道,各種參數(shù)都高于一般水平。核心強(qiáng)了以后,硬加速就不需要這么多了,可以用少量的硬加速。
另一種方式則是大量弱核心+大量硬加速。比如說16個(gè)核心,每個(gè)核心比較弱,但是能夠增加執(zhí)行的并行度,有16個(gè)并發(fā)核心執(zhí)行,跑16套處理程序,這是兩種架構(gòu)。這是一種多核心協(xié)作架構(gòu)模式,其協(xié)作方式可以是同構(gòu)協(xié)作也可以是異構(gòu)協(xié)作
1. 同構(gòu)協(xié)作就是每個(gè)核心做的事都是完全一樣的,處理的步驟完全一樣。如果你的控制器陣列里面有16個(gè)IO,有16個(gè)核心,每個(gè)核心都能處理一個(gè)IO,這是同構(gòu)協(xié)作。
2. 異構(gòu)協(xié)作則是多個(gè)核心做不同的事情。處理同一個(gè)IO,第一個(gè)IO第一步,第一個(gè)核心處理,這個(gè)核心處理完以后,把這個(gè)IO扔到下一個(gè)核心,再處理下一步,等這個(gè)核心空出來以后,處理下一個(gè)IO的第一步,這就是所謂的流水線了,所謂的異構(gòu)就是如此。
不管怎么樣,總體看一下基于PCIe的閃存架構(gòu),有些PCIe Flash廠商直接采用FPGA自定義閃存控制器;有些PCIe Flash廠商采用現(xiàn)有SATA/SAS閃存模塊結(jié)合HBA控制器;有些PCIe Flash廠商直接采用最新的PCIe閃存控制器。個(gè)人認(rèn)為第三種方案是未來的趨勢,雖然,目前能夠提供這種Native PCIe閃存控制器的廠商不多,但是,最近幾年此類芯片將會被大量研發(fā),并且符合Nvme標(biāo)準(zhǔn)的控制器將會成為發(fā)展趨勢。下面對目前市場上出現(xiàn)的幾款Native PCIe閃存控制器進(jìn)行介紹。
Marvell PCIe閃存控制器
Marvell可以說是第一個(gè)(2012年初)推出PCIe閃存控制器的廠商。該閃存控制器可以支持4通道NandFlash芯片,并且可以外擴(kuò)DRAM,內(nèi)置ARM處理器??雌饋?,這款控制器的能力不是很強(qiáng),管理的NandFlash數(shù)量有限。在個(gè)人電腦領(lǐng)域,基于這款控制器的存儲卡可以替代現(xiàn)有SSD盤。但是,如何利用這款芯片構(gòu)建存儲容量更大的PCIe卡呢?
其實(shí),采用一個(gè)PCI橋就可以將多個(gè)基于Marvell控制器的Flash模塊組合在一起,從而形成一塊容量巨大的PCIe存儲卡。Marvell控制器88NV9145內(nèi)部結(jié)構(gòu)和PCIe卡結(jié)構(gòu)如下圖所示:
通??梢圆捎?個(gè)存儲模塊來構(gòu)建一個(gè)PCIe板卡,每個(gè)存儲模塊采用Marvell控制器管理4個(gè)閃存芯片,然后通過一個(gè)PCIe switch將所有閃存模塊連接起來。采用該方案實(shí)現(xiàn)的板卡如下圖所示:
這種方案的優(yōu)點(diǎn)是去除了SATA/SAS轉(zhuǎn)換接口,將NandFlash連接到了PCIe總線上。缺點(diǎn)是Marvell的控制器管理能力有限,存儲容量將會很受限制。另外,這種方案還增加一層PCIe總線。在控制器模式下,Marvell控制器能夠提供的性能為9.3萬隨機(jī)讀的IOPS和7萬隨機(jī)寫IOPS。
另一個(gè)問題需要討論的是FTL在何處實(shí)現(xiàn)?從理論上來講,F(xiàn)TL可以在Marvell的控制器內(nèi)部實(shí)現(xiàn)。但是,該控制器內(nèi)部的只提供了一個(gè)ARM處理器和ECC校驗(yàn)引擎,處理能力似乎有限。因此,個(gè)人認(rèn)為,采用該控制實(shí)現(xiàn)的Flash卡,F(xiàn)TL在host端實(shí)現(xiàn)最佳。在Host端的驅(qū)動(dòng)程序中實(shí)現(xiàn)FTL,可以對板卡上的存儲模塊統(tǒng)一管理,從數(shù)據(jù)冗余角度來看,數(shù)據(jù)會更加安全,另外,F(xiàn)TL所管理的資源塊也會更多,優(yōu)化空間更大。
LSI PCIe閃存控制器
2013年年底的時(shí)候,LSI收購Sandforce,獲得了閃存控制器芯片。收購后不久推出了Native PCIe控制器SF3700系列。該控制器的內(nèi)部結(jié)構(gòu)如下圖所示:
和Marvell閃存控制器相比,LSI控制器顯得更加的高端、大氣、上檔次。該芯片不僅可以支持傳統(tǒng)的SATA接口,而且可以支持PCIe接口。因此如下圖所示,采用該系列控制器,可以實(shí)現(xiàn)SATA或者PCIe SSD盤。特別在一些筆記本電腦中,可以直接采用PCIe接口的存儲卡替代SATA-SSD盤。在企業(yè)存儲領(lǐng)域,可以采用該芯片實(shí)現(xiàn)Native PCIe存儲卡。
LSI控制器內(nèi)部分成三大部分:第一部分是SATA/PCIe接口,包括一個(gè)前端處理器,實(shí)現(xiàn)PCIe和SATA數(shù)據(jù)傳輸?shù)墓δ?;第二部分是SSD控制器的核心,解決NandFlash的寫放大、數(shù)據(jù)映射、數(shù)據(jù)加密以及垃圾回收(Garbage collection)功能;第三部分后端NandFlash控制器,包含一個(gè)后端處理器。該控制器內(nèi)部的數(shù)據(jù)壓縮算法可以減少NandFlash數(shù)據(jù)寫入量,提高使用壽命。另外,其內(nèi)部還提供了RAISE(Redundant Array of Independent Silicon Elements)技術(shù),通過該技術(shù)增強(qiáng)數(shù)據(jù)可靠性。RAISE技術(shù)類似于RAID,因此會降低空間使用率,每個(gè)NandFlash芯片內(nèi)部都會預(yù)留一些資源塊作為數(shù)據(jù)冗余空間。另外,在單個(gè)NandFlash芯片內(nèi)部采用了Shield錯(cuò)誤糾正技術(shù),該技術(shù)采用了LDPC(Low-Density Parity Check)編解碼方式。Shield技術(shù)有意思的地方是自適應(yīng)動(dòng)態(tài)編解碼。在正常情況下,采用少量的ECC碼,當(dāng)NandFlash內(nèi)部的出錯(cuò)達(dá)到一定情況后,增加ECC冗余度。增加冗余度之后,IO延遲將會增大。所以,Shield技術(shù)是一種性能和可靠性的動(dòng)態(tài)平衡技術(shù)。
LSI閃存控制器在性能表現(xiàn)方面也不錯(cuò),其公布的數(shù)據(jù)如下:
PMC閃存控制器
2013年中旬的時(shí)候PMC收購IDT公司的閃存控制器部門。使得PMC開始進(jìn)攻閃存控制器市場。IDT公司推出的閃存控制器是業(yè)界第一款符合Nvme標(biāo)準(zhǔn)的PCIe閃存控制器?;谠摽刂破餮兄频腜CIe閃存卡如下圖所示:
通過IDT的控制器89HF32P08可以將Nand Flash芯片直接接入PCIe總線。和Marvell、LSI的控制器不同,PMC(IDT)的控制器顯得更加強(qiáng)悍,其可以管理很多NandFlash芯片顆粒,即單芯片最多可以支持32通道NandFlash芯片。PMC的這款芯片主要的特點(diǎn)如下:
1,可訂制的固件程序(Firmware)
2,支持SLC、MLC閃存芯片
3,支持第三代PCIe接口
4,標(biāo)準(zhǔn)的NVM Express控制接口
5,支持XTS-AES-256加密算法
6,防止電源故障、突然斷電情況下的數(shù)據(jù)丟失或者損壞
7,數(shù)據(jù)完整性和可靠性:ECC數(shù)據(jù)糾錯(cuò)、閃存通道間RAID保護(hù)、端到端的數(shù)據(jù)保護(hù)
采用該控制器可以構(gòu)建基于PCIe的存儲卡和PCIe設(shè)備。一個(gè)Demo卡演示如下:
和LSI和Marvell的控制器相比,PMC的控制器很具競爭力。
產(chǎn)品實(shí)例:PMC的FlashtecTM NVMe 控制器
這是PMC的控制器,首先它有一個(gè)片上網(wǎng)絡(luò),網(wǎng)絡(luò)承載16個(gè)CPU核心,每個(gè)核心里面有一個(gè)類似網(wǎng)卡的控制器,網(wǎng)卡連到網(wǎng)絡(luò)上,多個(gè)CPU之間連起來。簡單說就是4口路由器或者交換機(jī)連起來的網(wǎng)絡(luò),多個(gè)CPU之間連起來,此外還有硬加速模塊。另外還包括以下幾部分:
RAM控制器,因?yàn)樾酒闲枰幸欢康腞AM放臨時(shí)數(shù)據(jù),寫放大,讀出來寫進(jìn)去,都要走RAM;
PCIe控制器,這個(gè)是跟前端PCIe對等的控制器,IO指令從這兒接收過來;
后端Flash控制器,通過一定數(shù)量的通道連Flash顆粒,
加速器(包括緩沖加速器),每做一個(gè)操作,都需要有相應(yīng)的內(nèi)存,把數(shù)據(jù)拷到內(nèi)存里面,內(nèi)存的維護(hù)很費(fèi)時(shí)費(fèi)力。比如在X86上運(yùn)行的Linux,其管理內(nèi)存時(shí)需要耗費(fèi)很多的計(jì)算量。對于閃存,精打細(xì)算,必須把性能做到極致,因此需用到硬加速。
鏈表加速器,用鏈表來記錄一些信息,哪塊空著,哪塊被應(yīng)用,這塊用軟件維護(hù)很費(fèi)力,所以需要在這里作加速;
XOR加速器,XOR要用硬加速
最后,來看一下軟件的并行度。16個(gè)核心,PMC提供的參考的固件,當(dāng)然SSD廠商會開發(fā)自己的固件,把自己優(yōu)化的東西放進(jìn)去,優(yōu)化的算法放進(jìn)去?;旧习诉@么一些程序,每個(gè)IO讀的地址可能有重疊,重疊就需要有一個(gè)鎖定協(xié)調(diào),有管命令解析的,有管啟動(dòng)的,有管日志的,有管磨損均衡的,有管查表的,有管寫數(shù)據(jù)的,管前端的PCIe Manager,還有負(fù)責(zé)boot loader的核心,初始化的配置,需要由它處理,data manager,這是主程序,分析IO指令需要干什么,生成一堆的后續(xù)步驟下發(fā)下去。其實(shí)每一塊都可以跑在一個(gè)核心上,同一個(gè)角色可以復(fù)制多份,充分并行。16個(gè)核心,達(dá)到16份程序并行的運(yùn)行,16個(gè)流水線的Stage,這樣就可以屏蔽處理過程中的時(shí)延。
基于PCIe總線的閃存控制器是Flash存儲的關(guān)鍵器件,也是未來的發(fā)展方向。個(gè)人認(rèn)為基于Nvme標(biāo)準(zhǔn)的PCIe閃存控制器會是市場主力。
評論
查看更多