一是SSD失敗并不是單純地隨閃存芯片磨損增加。它們歷經(jīng)幾個(gè)明顯的時(shí)期,與失敗如何出現(xiàn)和隨后如何被檢測(cè)到相一致。
 
二是讀干擾錯(cuò)誤并不普遍。但寫(xiě)一般會(huì)有影響的,因?yàn)閷?xiě)是要重新加電,要把電激發(fā)到cell,但讀不是,讀是電位感應(yīng)。
 
三是跨SSD物理地址空間的稀疏邏輯數(shù)據(jù)布局(如不連續(xù)數(shù)據(jù)),需要通過(guò)大量的存 儲(chǔ)在SSD內(nèi)部DRAM緩存的metadata來(lái)跟蹤邏輯地址翻譯,會(huì)極大地影響SSD 失敗率。“如果說(shuō)你的數(shù)據(jù)布局和物理的區(qū)域布局非常分散,就是說(shuō)本來(lái)我在邏輯上是連續(xù)的數(shù)值,但是在物理上是分散布局,這對(duì)損害值會(huì)大。這和我們磁盤(pán)是完全不一樣的,磁盤(pán)是說(shuō)我一個(gè)邏輯上連續(xù)的文件最好是分散的布局。”
 
四是高溫會(huì)帶來(lái)高的失敗率,通過(guò)截流SSD操作看來(lái)可以極大地減少高溫帶來(lái)的可靠性負(fù)面影響,會(huì)帶來(lái)潛在的性能下降。對(duì)此,李炫輝指出,“閃存并不是溫度越低性能越高,實(shí)際上溫度越低由于電子驅(qū)動(dòng)性能會(huì)下降因此還需要合適的工作溫度,50到55攝氏度是比較好的工作環(huán)境。既比較流暢,又沒(méi)有那么高的激發(fā)態(tài)會(huì)出現(xiàn)電子流失。如果說(shuō)太高了,可能電子流失會(huì)比較多一點(diǎn)。如果太低了,對(duì)于電子操作性能會(huì)下降了,所以說(shuō)還不能太低。”,不過(guò)對(duì)于這個(gè)問(wèn)題,“所謂限流,直接對(duì)供電進(jìn)行限制,相對(duì)來(lái)講就是降低散熱,降低散熱實(shí)際上就變相地降低溫度了。通過(guò)限流可以降低溫度、提高可靠性,但問(wèn)題是這樣又影響到了性能,實(shí)際上這是一個(gè)矛盾體。這個(gè)問(wèn)題就需要在板卡的設(shè)計(jì)過(guò)程中,怎么去這個(gè)給分?jǐn)偟?,防止出現(xiàn)熱點(diǎn)。熱點(diǎn)就是真正的熱點(diǎn)了,就是溫度高點(diǎn),一個(gè)地方的溫度高會(huì)造成整個(gè)系統(tǒng)溫度高。這就是之所以用分布式架構(gòu)的原因,防止出現(xiàn)集中式的熱點(diǎn)。”
 
五是由于SSD控制器的優(yōu)化以及系統(tǒng)軟件的緩存機(jī)制,操作系統(tǒng)寫(xiě)到閃存SSD的數(shù)量 并不能精確地反映閃存Cell上的擦寫(xiě)數(shù)量。
 
基于這樣的發(fā)現(xiàn),業(yè)界同仁希望在真實(shí)工作負(fù)載以及真實(shí)系統(tǒng)中有所新發(fā)現(xiàn),然后需要了解各種不同因素對(duì)閃存可靠性的影響,包括系統(tǒng)軟件、應(yīng)用以及SSD控制器;更需要設(shè)計(jì)更加可靠的閃存架構(gòu)和系統(tǒng);同時(shí)為今后閃存可靠性研究改善評(píng)估方法。
 
穩(wěn)定性測(cè)試帶來(lái)什么啟示?
 
不過(guò),在閃存層面,可靠性大家探討比較多,但穩(wěn)定性幾乎很少有人探討,原因在于使用磁盤(pán)時(shí),一個(gè)15000轉(zhuǎn)的磁盤(pán),性能是200 IOPS,用上十年還是200個(gè)IOPS。但是閃存就完全不一樣了,實(shí)際上閃存顆粒在使用過(guò)程中會(huì)越寫(xiě)越慢,由于bad Block問(wèn)題,實(shí)際的性能會(huì)隨著使用時(shí)間和頻率逐漸下降,出現(xiàn)性能衰減的問(wèn)題。常理來(lái)說(shuō),板卡廠商要有一些數(shù)據(jù)來(lái)幫助用戶了解這個(gè)方面的情況,當(dāng)然需要做一系列的測(cè)試、評(píng)估。
 
對(duì)于穩(wěn)定性方面,一個(gè)產(chǎn)品應(yīng)該在整個(gè)生命周期里面所定標(biāo)準(zhǔn)應(yīng)該是99.9%的時(shí)間里面性能不低于90%。李炫輝介紹說(shuō),對(duì)于穩(wěn)定性,Greenliant有一組測(cè)試數(shù)據(jù),使用閃存卡一直在做測(cè)試擦寫(xiě),全盤(pán)擦寫(xiě)了差不多18000次,性能衰減基本上控制良好,像寫(xiě)的性能衰減值只有3-4%,讀的性能衰減稍大一點(diǎn),接近7-8%。這樣的性能表現(xiàn)是在5年的閃存生命周期最后一段時(shí)間里面,意味著如果人的壽命是100歲,他已經(jīng)99歲、100歲了,他的承受能力和20歲時(shí)基本上是一樣。作為閃存專(zhuān)業(yè)廠商,這就是做產(chǎn)品化必須考慮的,這樣的跑卡測(cè)試一直在進(jìn)行著。
 
 
由于閃存設(shè)備在長(zhǎng)期擦寫(xiě)情況下,壞塊會(huì)逐漸 增多,故障率上升,由此會(huì)帶來(lái)潛在的性能大幅下降。
 
Greenliant對(duì)產(chǎn)品進(jìn)行長(zhǎng)期擦寫(xiě)以及性能測(cè)試 。在疲勞測(cè)試環(huán)境中,每天全盤(pán)擦寫(xiě)50次, 超過(guò)18000次擦寫(xiě)后,性能衰減不超過(guò)10%。
 
DWPD是每天全盤(pán)擦寫(xiě)的縮寫(xiě)(Disk Write Per Day),10 DWPD就是每天全盤(pán)擦寫(xiě)10次,為什么會(huì)有這樣的數(shù)據(jù)呢?因?yàn)槲覀冎篱W存顆粒有擦寫(xiě)次數(shù)的限制,如3000次,我們通過(guò)架構(gòu)設(shè)計(jì)、磨損平衡算法以及配置冗余的顆粒,來(lái)延長(zhǎng)閃存卡的壽命,通過(guò)全盤(pán)擦寫(xiě)這個(gè)數(shù)值,就可以推算出閃存卡的使用壽命。每天擦寫(xiě)次數(shù)越高,其實(shí)對(duì)閃存卡的壽命影響就越大,因?yàn)殚W存還有一個(gè)特點(diǎn),就是它需要有一個(gè)relax時(shí)間,叫放松時(shí)間。原因是什么呢?因?yàn)殚W存是電子器件,當(dāng)進(jìn)行數(shù)據(jù)操作的時(shí)候,實(shí)際上是要釋放電子調(diào)整電位,當(dāng)電子隧道突然打通之后,電子泄漏到規(guī)定的閥值馬上就關(guān)閉隧道,實(shí)際上里面的電子仍然處于不穩(wěn)的抖動(dòng)狀態(tài),需要一個(gè)放松時(shí)間。這個(gè)放松時(shí)間越長(zhǎng),有利于閃存持久性。這就好像我們搬東西,一小時(shí)搬50塊磚和五天搬50塊磚的感覺(jué)是不一樣的。
    
Greenliant測(cè)試在55度的恒溫環(huán)境下,每天50次擦寫(xiě), 并且現(xiàn)在還再繼續(xù)跑,已經(jīng)跑了一年。最終計(jì)劃要把這幾塊卡全部跑到最后不能用, 到底可以到什么程度。Greenliant當(dāng)時(shí)設(shè)計(jì)目標(biāo)是每天10次全盤(pán)擦寫(xiě),壽命可以用不少于5年。實(shí)際上已經(jīng)測(cè)到了,10DWPD是保守值,但Greenliant想看實(shí)際值究竟能撐到多少?
 
做閃存卡設(shè)計(jì)的時(shí)候,GreenLiant每做一次具有軟件功能的固件firmware的升級(jí),就要把整個(gè)板卡的測(cè)試跑一遍。從開(kāi)發(fā)完新的firmware到這個(gè)新的firmware能正式通過(guò)至少一個(gè)月。原因是什么呢?閃存的Firmware升級(jí),可能會(huì)對(duì)設(shè)備運(yùn)行帶來(lái)不確定因素。如新的算法帶來(lái)組件發(fā)熱量或功耗的升高,底層設(shè)備訪問(wèn)的機(jī)制變化與其它代碼和接口的兼容性等等,可能會(huì)影響板卡的穩(wěn)定性。并且對(duì)于一些BUG修改,也許會(huì)帶來(lái)一些新的BUG,所以要把整個(gè)卡的都要跑一遍。例如以前其它廠商閃存產(chǎn)品曾經(jīng)出現(xiàn)的意外掉電容量丟失,錯(cuò)誤的指令造成數(shù)據(jù)丟失等等,都是由于測(cè)試不完整造成。
 
因此,Greenliant每一次Firmware的更新,從高溫耐受到整個(gè)的功能性能測(cè)試都要跑一遍,并且同時(shí)在異地兩個(gè)實(shí)驗(yàn)室同時(shí)做測(cè)試,只有兩個(gè)實(shí)驗(yàn)室均通過(guò)測(cè)試后,才會(huì)發(fā)布新的Firmware版本。
 
因此,對(duì)于一個(gè)專(zhuān)業(yè)閃存廠商來(lái)說(shuō),閃存的可靠性設(shè)計(jì),實(shí)際上必須要將整個(gè)的設(shè)計(jì)和生產(chǎn)流程考慮進(jìn)去。
 
為什么分布式ECC可以帶來(lái)更好的穩(wěn)定性與可靠性?
 
穩(wěn)定性測(cè)試只是啟示我們對(duì)于閃存卡穩(wěn)定性和可靠性的驗(yàn)證還是有所不同,如何做到閃存卡架構(gòu)上更好的穩(wěn)定性與可靠性,不得不提到散熱問(wèn)題,這也是Facebook論文研究最為關(guān)注的第四個(gè)方面。
 
如何消除性能衰減和可靠性下降的問(wèn)題,這就需要在架構(gòu)設(shè)計(jì)方面進(jìn)行創(chuàng)新。Greenliant在閃存設(shè)備架構(gòu)上實(shí)現(xiàn)了分布式ECC 設(shè)計(jì)架構(gòu), 在每一個(gè)NAND Package中都封裝一個(gè)閃存控制器里面。這樣就避免了前面所講的性能衰減和可靠性下降的問(wèn)題。同時(shí)為了防止閃存顆粒故障造成數(shù)據(jù)丟失,在架構(gòu)上還實(shí)現(xiàn)了板載硬件RAID的功能。
 
當(dāng)然,目前大家都明白了:散熱對(duì)穩(wěn)定性和可靠性影響很大。過(guò)熱的話會(huì)造成系統(tǒng)不穩(wěn)定,現(xiàn)在閃存卡都采用FPGA,F(xiàn)PGA在高溫情況下可能會(huì)算出錯(cuò)誤的值,系統(tǒng)就會(huì)出問(wèn)題。Greenliant采用分布式的架構(gòu),因?yàn)樵谡麄€(gè)閃存卡控制里面主要存在幾個(gè)高性能計(jì)算的環(huán)境,一是ECC校驗(yàn),ECC校驗(yàn)是計(jì)算密集型的;二是XOR RAID也是高計(jì)算型的。過(guò)去的情況下,一般來(lái)講在一個(gè)控制器里面,一個(gè)ECC校驗(yàn)碼處理整個(gè)板卡芯片上的ECC請(qǐng)求,一個(gè)XOR芯片處理整個(gè)板卡上的所有RAID的請(qǐng)求。這就意味著這兩個(gè)芯片是計(jì)算量非常高的芯片,就會(huì)產(chǎn)生過(guò)熱,高密集計(jì)算過(guò)程中會(huì)過(guò)熱,這就可能產(chǎn)生穩(wěn)定性問(wèn)題。
 
Greenliant的思路就是:把ECC引擎封裝在顆粒里面做分布式ECC,一個(gè)板卡上可能做40個(gè)ECC的引擎,這樣把計(jì)算給分開(kāi)了。原來(lái)是1個(gè),現(xiàn)在是40個(gè)了。XOR的RAID根據(jù)分組是8個(gè)芯片,也把計(jì)算量分開(kāi)了,就意味著總發(fā)熱量不變,分?jǐn)偠嗔司透?,散熱面更大,所以性能更穩(wěn)定。并且閃存卡散熱不能靠風(fēng)扇,要靠熱傳導(dǎo),最多在控制器上加一個(gè)散熱片,而里面的閃存顆粒全是靠熱傳導(dǎo)出來(lái)。如果能降低每一個(gè)顆粒的發(fā)熱量,那么實(shí)際上就使系統(tǒng)會(huì)更加穩(wěn)定、更低,可靠性就更高。這就是為什么測(cè)完之后Greenliant數(shù)值穩(wěn)定性會(huì)很高,這是這個(gè)分布式ECC架構(gòu)帶來(lái)的好處。
 
怎么理解閃存中最關(guān)鍵的底層?xùn)|西,比如Cell?
 
在談?wù)摿诉@么對(duì)針對(duì)《Facebook閃存失效大規(guī)模研究》論文的話題,相信大家對(duì)SSD包括閃存的技術(shù)架構(gòu)和特點(diǎn)有了很多了解了,不過(guò),這還不夠深入。比如你了解閃存中最關(guān)鍵的Cell嗎?你對(duì)閃存中最底層的東西有多少了解呢?
 
在日常對(duì)于閃存的討論中,經(jīng)常會(huì)提到Cell,Cell是什么,怎么串起來(lái)的?這些都是一些常識(shí)問(wèn)題,其底層到底什么樣子?《大話存儲(chǔ)1&2》作者冬瓜哥(張冬)給出了深入淺出的詮釋。
 
一個(gè)Cell就是一個(gè)晶體管,現(xiàn)在叫晶體管不太合適,叫半導(dǎo)體長(zhǎng)效應(yīng)管。這就是兩個(gè)電極,給個(gè)電壓,這是控制芯片,給了電壓就會(huì)產(chǎn)生電場(chǎng)。一旦通電的話,本來(lái)是絕緣的,加電壓之后就打通了,電子就流動(dòng)起來(lái)。通電開(kāi)關(guān)打通之后,這就是晶體管。所有的數(shù)字電路都是拿開(kāi)關(guān)去堆起來(lái)的,包括加法器、計(jì)數(shù)器等等堆成一個(gè)CPU。
 
但是這個(gè)東西讓Flash用作存儲(chǔ)了,是把中間這個(gè)地方加了一個(gè)floating Gate浮動(dòng)?xùn)诺臇|西,內(nèi)部是能儲(chǔ)電的電容。DDRAM也是這么干的,但是里面的電容外面是沒(méi)有絕緣體的,充電馬上就漏掉了,漏得非???,所以要不斷刷新。但是Flash充進(jìn)去能夠保存一部分電,而且能保存一段時(shí)間。不過(guò),其外面也是一個(gè)絕緣體,意味著充電時(shí)間就長(zhǎng),所以Flash性能不如DDARM。
     
這是一個(gè)Cell,儲(chǔ)存一個(gè)bite,怎么把Cell連起來(lái)呢?把正負(fù)極串聯(lián),把控制器并聯(lián),有32768個(gè)列。為什么72768?就是除以8之后是4K,這就是一個(gè)Page。
    
32768列,然后一行一個(gè)Page,具體多少行每個(gè)廠商設(shè)定也不一樣。比如一個(gè)Block設(shè)定512k,那么里有多少行。
    
要讀寫(xiě)Page的話,需要把Block里面所有其他的Page控制極都加一個(gè)電壓。正負(fù)級(jí)會(huì)打通, 開(kāi)關(guān)串聯(lián)起來(lái),如果把其他開(kāi)關(guān)都打通,然后加一個(gè)信號(hào),在另一邊考察信號(hào)能不能從上面透下來(lái),如果透不下來(lái)證明里面是斷開(kāi)的。這就證明里面存了電,或者說(shuō)不存電。
    
其里面是很復(fù)雜的,里面存了電。給里面加正電壓,導(dǎo)通性增強(qiáng)了,如果加負(fù)電壓,導(dǎo)通性就降低,絕緣性就更強(qiáng)了。
    
其實(shí)把所有打通之后,還要比擬器,需要在旁邊有預(yù)充電的比較電壓,再加一個(gè)基準(zhǔn)電壓,基準(zhǔn)電壓跟比較電壓一樣值,看你這邊漏電的速度有多快。如果多少納秒以后,基本不漏電證明里面是斷開(kāi)的。導(dǎo)通性基本不導(dǎo)通的,絕緣性增強(qiáng)了,證明里面是有電的。
    
如果比較的時(shí)候發(fā)現(xiàn)漏電很快,證明這里面沒(méi)有電。沒(méi)有電也會(huì)漏電,這個(gè)開(kāi)關(guān)都是漏電的,所以功耗大,而漏電占了很大一部分。
 
如何讀寫(xiě)?寫(xiě)是充電,往Cell里面充,充電是代表0,沒(méi)電代表1。正常是充電表示1,這里為什么是充電代表0呢?因?yàn)橛蠸enseAMP放大器,放大器的邏輯就是對(duì)充了電反而輸出高電壓是1,所以最后是不穩(wěn)定了。問(wèn)題是不能同時(shí)對(duì)Cell放電又充電,不能寫(xiě)1又寫(xiě)0,如果對(duì)它進(jìn)行放電的話,這一塊就是要加一個(gè)高電壓。比如說(shuō)起碼要20伏的壓差,當(dāng)然實(shí)際上不會(huì)這么高,在這里只是舉個(gè)例子。這里起碼要加40伏,40減10等于30,那只能充電,但不能同時(shí)充滿電。
 
NAND Flash最大的罪魁禍?zhǔn)资遣荒芡瑫r(shí)充滿電,但是DDARM可以對(duì)每個(gè)Cell同時(shí)充滿電,可以對(duì)每個(gè)Cell里面根據(jù)一大堆電路充滿電,正因?yàn)槿绱穗娐访娣e變大了。Flash比DDR密度要高,不用每個(gè)Cell都充電,這就是拿價(jià)錢(qián)、拿密度來(lái)?yè)Q性能。
    
再就是寫(xiě)放大,正因?yàn)椴荒芡瑫r(shí)寫(xiě),所以每次都寫(xiě)到擦好的Block,每次只寫(xiě)0就可以了,1已經(jīng)寫(xiě)好了。
 
如果出現(xiàn)寫(xiě)放大沒(méi)有辦法,把整個(gè)Block讀出來(lái)擦成1再寫(xiě)回去,這樣的性能就非常差了。
 
對(duì)于用戶采購(gòu)閃存的最佳建議?
 
閃存是由核心的顆粒組成,電子總會(huì)有問(wèn)題的時(shí)候。誠(chéng)然,它和磁盤(pán)不一樣,閃存隨著使用時(shí)間延長(zhǎng),性能出現(xiàn)下降。好顆粒更需要好的架構(gòu)。但是,我們?cè)诹私馔暧伞禙acebook閃存失效大規(guī)模研究》論文引發(fā)的多個(gè)方面思考后,是否對(duì)采購(gòu)SSD或閃存卡存在疑慮了呢?
 
當(dāng)然不是。
 
美光相關(guān)人士在出差途中也參與了微群技術(shù)會(huì)——閃存夏日清涼聊活動(dòng),他指出了幾個(gè)方面的比較理性和積極的認(rèn)知。這里阿明將他非常精辟入理的觀點(diǎn)分享給各位:
 
一是,SSD使用上大致分消費(fèi)級(jí)應(yīng)用和企業(yè)級(jí)應(yīng)用兩種應(yīng)用場(chǎng)景。消費(fèi)級(jí)應(yīng)用的特點(diǎn):a.不會(huì)滿盤(pán)使用; b.不會(huì)隨時(shí)隨刻使用; c.幾乎大部分操作都是讀操作、順序地址操作。
 
企業(yè)級(jí)應(yīng)用的特點(diǎn):a.滿盤(pán)使用; b.要求隨時(shí)隨刻都在讀寫(xiě); c.讀寫(xiě)比例有要求,很多系統(tǒng)要求更高的隨機(jī)地址性能。
 
二是,針對(duì)這兩種應(yīng)用場(chǎng)景,消費(fèi)級(jí)SSD更多關(guān)注于FOB性能,即新開(kāi)封狀態(tài),或出廠狀態(tài)  (FOB) fresh out of box;企業(yè)級(jí)SSD更多關(guān)注于穩(wěn)態(tài)性能Steady state。
 
三是,關(guān)于穩(wěn)態(tài)性能測(cè)試,大家可以搜索SNIA,有一套成熟可靠和穩(wěn)定的測(cè)試方法。
 
四是,所有的SSD都有冗余即OP的存在(over provisioning),只不過(guò)有多有少,因?yàn)榛贜AND結(jié)構(gòu)的容量是1024*1024*1024=1GB,而廠商的SSD標(biāo)稱(chēng)容量1G基于1000*1000*1000,所以,就算是消費(fèi)級(jí)的SSD,也至少有1024*1024*1024-1000*1000*1000,即~7%的OP。
 
五是,再來(lái)討論溫度,SSD廠商一般在SSD內(nèi)部都有temp senser,SMART信息中也有溫度監(jiān)控,溫度高了一般做法是SSD自主降速。
 
六是,個(gè)人認(rèn)為,由于NAND晶體構(gòu)造,bit錯(cuò)誤更多的是浮柵層的charge loss或charge gain,更低的溫度讓charge更難自主在能級(jí)中躍遷。所以,溫度越低,基于NAND的出錯(cuò)的概率越低。 
 
Greenliant李炫輝也補(bǔ)充了一點(diǎn),閃存可靠性問(wèn)題對(duì)于客戶、行業(yè)以及產(chǎn)業(yè)有著重大的影響 ,業(yè)界廠商都有相對(duì)應(yīng)的應(yīng)對(duì)措施。但對(duì)于要采購(gòu)SSD或閃存卡的用戶來(lái)說(shuō),性能、可靠性和成本都顯得很重要,這三者卻很難同時(shí)獲得,客戶需要根據(jù)應(yīng)用的特點(diǎn),根據(jù)最重要的特性選取最合適的產(chǎn)品。(阿明)
 
 
分享到

aming

相關(guān)推薦