固態(tài)硬盤(pán)能用多久?談閃存品質(zhì)和LDPC糾錯(cuò)
今天我們來(lái)談?wù)勯W存品質(zhì)如何影響固態(tài)硬盤(pán),今天的討論將不再局限于寫(xiě)入壽命或可以擦寫(xiě)多少次這樣簡(jiǎn)單的層面。
閃存的品質(zhì)
過(guò)去我們經(jīng)常談原片和白片。這種非此即彼的二分法比較容易被大家理解,原片的高品質(zhì)被所有人認(rèn)同,而對(duì)于白片的爭(zhēng)論就比較多。其實(shí)白片和原片一樣,都有等級(jí)之分。
并不是所有白片都是原廠篩剩下的次品,有些情況下原廠可能會(huì)直接出售晶圓。這些晶圓在出廠時(shí)就包含了一張map,將晶圓上每個(gè)晶粒的情況做出了標(biāo)記。
第三方的封測(cè)廠根據(jù)Map摘取芯片進(jìn)行封裝,閃存芯片的分級(jí)篩選還需要結(jié)合主控一起進(jìn)行,最終制造出符合特定使用條件的合格閃存顆粒。
跟晶圓制造階段是相比,芯片封裝相對(duì)簡(jiǎn)單的工藝流程,相關(guān)技術(shù)已經(jīng)被很多第三方企業(yè)掌握,還能根據(jù)需要實(shí)現(xiàn)MCP多芯片封裝。下圖是江波龍將Marvell 88NV1160主控與美光3D TLC閃存融合封裝的單顆粒NVMe固態(tài)硬盤(pán)——FORESEE P900。
閃存原廠數(shù)量畢竟有限,采購(gòu)晶圓后摘取合格晶粒(Good Die)自行封裝,可以發(fā)揮封裝階段的成本優(yōu)勢(shì),起到了豐富市場(chǎng)選擇的作用,同時(shí)也促使固態(tài)硬盤(pán)價(jià)格能夠覆蓋到各種人群的偏好范圍。
針尖上跳舞:一步都不允許出錯(cuò)
雖然公版方案使得制造固態(tài)硬盤(pán)的入門(mén)門(mén)檻降低了需多,但固態(tài)硬盤(pán)對(duì)閃存品質(zhì)的要求并沒(méi)有降低。由于閃存自身的工作特點(diǎn),固態(tài)硬盤(pán)主控對(duì)閃存的使用受到種種制約。從最簡(jiǎn)單的來(lái)說(shuō),閃存必須先擦除才能進(jìn)行寫(xiě)入,所以固態(tài)硬盤(pán)中沒(méi)有真正的覆蓋寫(xiě)入,所有針對(duì)原有數(shù)據(jù)的修改都將被重定向到新的閃存位置上。由FTL管理邏輯地址與閃存物理地址的對(duì)應(yīng)關(guān)系。
這就像酒店房間管理,下午2點(diǎn)之前就到達(dá)酒店辦理入住,這時(shí)給你預(yù)留的房間還沒(méi)有打掃,所以前臺(tái)給你安排新的房間,并在系統(tǒng)中做了記錄。
原有數(shù)據(jù)因?yàn)榘l(fā)生變化而成為無(wú)效的"垃圾"內(nèi)容,但主控卻不能命令閃存直接將這個(gè)存儲(chǔ)單元擦除掉——閃存的最小擦除單位Block塊要比最小寫(xiě)入單位Page頁(yè)大數(shù)千倍。隨著已使用和已變成垃圾的位置越來(lái)越多,主控所能輾轉(zhuǎn)騰挪的空間變得越來(lái)越小,所以必須要有垃圾回收來(lái)整理出足夠數(shù)量的、可用于直接寫(xiě)入的空白塊。
在讀取原來(lái)block中有效塊、寫(xiě)入新位置、擦除原來(lái)Block的垃圾回收過(guò)程中,不能有一絲一毫的錯(cuò)誤發(fā)生。
機(jī)械盤(pán)異常斷電丟失的可能僅僅是未保存的文件,而固態(tài)硬盤(pán)遇到異常斷電或運(yùn)行異常,丟失的還可能包括到恰好跟正寫(xiě)入的數(shù)據(jù)處于同個(gè)page或block的老數(shù)據(jù)——即便那些老數(shù)據(jù)早就正常寫(xiě)入進(jìn)去,依然有可能在這次異常中被破壞。
通過(guò)篩選的閃存顆粒在制成SSD之后,對(duì)于成品還需要進(jìn)行高溫老化測(cè)試。下圖是浦科特介紹的老化測(cè)試。使用Flexstar專(zhuān)用設(shè)備能夠?qū)SD進(jìn)行溫度、電源循環(huán)、數(shù)據(jù)讀寫(xiě)、極限電壓等方面的測(cè)試,驗(yàn)證SSD在磨損均衡、數(shù)據(jù)錯(cuò)誤率、組件失效率、寫(xiě)入耐久與數(shù)據(jù)保持時(shí)間等方面的表現(xiàn)。
并非萬(wàn)能的LDPC糾錯(cuò)
固態(tài)硬盤(pán)對(duì)可靠性的要求極高,閃存寫(xiě)入和讀出數(shù)據(jù)的過(guò)程,都有糾錯(cuò)引擎的參與來(lái)確保數(shù)據(jù)無(wú)誤。LDPC糾錯(cuò)近幾年才應(yīng)用都固態(tài)硬盤(pán)當(dāng)中,被稱(chēng)為拯救TLC閃存的功臣。借此機(jī)會(huì)簡(jiǎn)單聊聊大家眼中神秘的LDPC。
LDPC是一種迭代算法。如果你不明白迭代的含義,推薦看一部名為"明日邊緣"的電影,它講述的是男主有機(jī)會(huì)一次次回到前一天,通過(guò)反復(fù)嘗試各種可能,試圖救下必將死在明天的女主。小編覺(jué)得這部2014年的電影很有意思,即便不是為了理解迭代的含義,如果有沒(méi)看過(guò)的朋友也可以回去看一看。
好了扯遠(yuǎn)了,言歸正傳,LDPC是通過(guò)迭代的方式反復(fù)嘗試解碼,在這個(gè)過(guò)程中通過(guò)軟數(shù)據(jù)(Soft Data,SD)的幫助一步步接近正確的讀取結(jié)果。
這里又出現(xiàn)一個(gè)叫"軟數(shù)據(jù)"的名詞。所謂軟數(shù)據(jù),可以理解成瞎子摸象——手感。得到的信息量很大,但并不直觀,需要經(jīng)過(guò)進(jìn)一步綜合判斷才能分析出結(jié)果。
閃存單元內(nèi)存儲(chǔ)的是電子,根據(jù)電子的多寡來(lái)表達(dá)不同的數(shù)據(jù)?,F(xiàn)在還做不到直接數(shù)閃存單元中電子的數(shù)目,只能通過(guò)位線上的電流來(lái)感知和判斷,并將它們轉(zhuǎn)換為0和1的二進(jìn)制數(shù)據(jù)。下圖是最簡(jiǎn)單的SLC閃存模型:
SLC閃存的一個(gè)單元只需要表達(dá)0或1兩種狀態(tài),到了MLC之后要表達(dá)的狀態(tài)數(shù)量就增加到了4個(gè)(00,01,10,11),TLC時(shí)代更是增加到8個(gè)狀態(tài)。后邊還要16種狀態(tài)的QLC閃存。沒(méi)有LDPC這種強(qiáng)大的糾錯(cuò)算法是萬(wàn)萬(wàn)不行的。
LDPC糾錯(cuò)在軟糾錯(cuò)階段可以通過(guò)不同的讀取參數(shù)去獲得關(guān)于閃存的更多數(shù)據(jù),根據(jù)自己的經(jīng)驗(yàn)去嘗試判讀,如果ECC驗(yàn)證不通過(guò),就換個(gè)"姿勢(shì)"進(jìn)行更多的嘗試。這里判讀所依據(jù)的經(jīng)驗(yàn)是"Log-likelihood ratio(LLR)",中文名叫對(duì)數(shù)似然比。
對(duì)數(shù)似然比是一個(gè)經(jīng)驗(yàn)豐富的老司機(jī),能夠僅憑一個(gè)模糊的畫(huà)面就能把車(chē)牌號(hào)猜個(gè)八九不離十。當(dāng)然經(jīng)驗(yàn)再豐富也有翻車(chē)的時(shí)候,不要緊,LDPC糾錯(cuò)可以繼續(xù)迭代,接著嘗試,直到得出正確答案,或者因迭代次數(shù)達(dá)到限制而糾錯(cuò)失敗。
SSD的閃存品質(zhì)不好會(huì)容易翻車(chē):壞就壞在對(duì)數(shù)似然比這個(gè)老司機(jī)身上。對(duì)數(shù)似然比與閃存的特性有關(guān),可以想象只開(kāi)美系車(chē)的老司機(jī),讓他猜日本的車(chē)牌號(hào)是很難猜對(duì)的。
對(duì)數(shù)似然比這些經(jīng)驗(yàn)性的信息,是在主控及固件的設(shè)計(jì)階段就預(yù)設(shè)好的,需要根據(jù)閃存的不同進(jìn)行適配。這是一個(gè)經(jīng)驗(yàn)活兒。天下閃存制造商雖然只有寥寥數(shù)家,但即便是同一家閃存廠的產(chǎn)品,不同品質(zhì)等級(jí)的脾氣秉性也很難料。這里邊的問(wèn)題就復(fù)雜了,我就放張龍生九子的圖片吧。
現(xiàn)在我們知道,閃存的品質(zhì)不是簡(jiǎn)單的PE次數(shù),它會(huì)影響到LDPC糾錯(cuò)的效果,反過(guò)來(lái)影響到閃存能夠用多久。即便神如LDPC,如果閃存品質(zhì)不佳,也可能因偏離固件的設(shè)計(jì)而失控。
閃存出錯(cuò)的累加效應(yīng)
通常的情況下,每一筆寫(xiě)入和讀取的數(shù)據(jù)都會(huì)經(jīng)過(guò)糾錯(cuò)引擎的檢查。
但某些時(shí)候?yàn)榱烁玫男阅芤矔?huì)有無(wú)主控糾錯(cuò)引擎參與的數(shù)據(jù)遷移發(fā)生,譬如說(shuō)使用到Copy Back(閃迪稱(chēng)為On Chip Copy)的磨損均衡或者SLC緩存釋放過(guò)程。
因?yàn)镃opy Back的數(shù)據(jù)遷移過(guò)程只局限在芯片內(nèi)部,不需要主控的過(guò)多參與,所以釋放了主控壓力,提升了SSD的效能表現(xiàn),但也因此失去了檢查錯(cuò)誤的機(jī)會(huì),有可能導(dǎo)致閃存錯(cuò)誤的逐漸累加,直到下次主控要求讀取時(shí)才發(fā)現(xiàn)已經(jīng)超出了糾錯(cuò)能力范圍。
為了兼顧性能與數(shù)據(jù)安全,一些固態(tài)硬盤(pán)會(huì)采用適時(shí)切換的方式,在閃存較新的時(shí)候采用Copy Back模式提升性能表現(xiàn),當(dāng)閃存磨損達(dá)到一定程度后改回傳統(tǒng)模式保護(hù)數(shù)據(jù)安全。PCEVA之前在饑餓鯊TR150固態(tài)硬盤(pán)的耐久度測(cè)試中就發(fā)現(xiàn),該固態(tài)硬盤(pán)在主機(jī)寫(xiě)入量超過(guò)標(biāo)定TBW之后,就會(huì)關(guān)閉Copy Back模式。
如果閃存品質(zhì)不確定,沒(méi)有辦法找到一個(gè)合理的均衡點(diǎn),就有可能無(wú)法發(fā)揮出閃存的全部壽命潛力。
總結(jié):因?yàn)镹AND塊擦除的特性,必須要有很多復(fù)雜的算法與糾錯(cuò)輔助來(lái)保證運(yùn)行時(shí)的效能與穩(wěn)定性。NAND閃存雖然是非易失性存儲(chǔ)器,但在記錄數(shù)據(jù)的過(guò)程中依然充滿(mǎn)風(fēng)險(xiǎn),除了用戶(hù)直接請(qǐng)求的寫(xiě)入之外,SSD內(nèi)部的磨損均衡、垃圾回收以及基于數(shù)據(jù)保持目的的刷新都會(huì)產(chǎn)生背景寫(xiě)入。SSD作為一個(gè)精密的整體,主控的先進(jìn)糾錯(cuò)技術(shù)只是一個(gè)輔助,關(guān)鍵還是要看閃存品質(zhì)以及固件的成熟度。
打個(gè)比方,師太親身經(jīng)歷的事情:朋友開(kāi)了個(gè)烤串店,大家都去捧場(chǎng),但越吃越咸,老板解釋說(shuō):肉不新鮮,多放點(diǎn)鹽遮遮味……大家以為就是個(gè)玩笑沒(méi)當(dāng)真,但回家全都拉了肚子……劣質(zhì)的NAND就像這個(gè)不新鮮的肉串,雖然有各種算法與糾錯(cuò)輔助能一定程度遮蓋不新鮮的味道,但你吃下去還是要拉肚子的。
以上是小編多年測(cè)試SSD后的心得。水平有限,文中若有錯(cuò)誤歡迎大牛指正。那么結(jié)尾部分再說(shuō)些大白話(huà)吧,目的是讓沒(méi)有專(zhuān)業(yè)知識(shí)的人也都能看懂:
我們還能得到幾個(gè)延伸的結(jié)論:
1、SSD跑分其實(shí)很扯淡,跑的不過(guò)是緩存在極短時(shí)間內(nèi)的爆發(fā)力,無(wú)法真實(shí)體現(xiàn)SSD在實(shí)際工作中的狀態(tài)。這也是AS SSD的測(cè)試結(jié)果不靠譜的原因之一。
2、家用固態(tài)硬盤(pán)沒(méi)事別瞎折騰,一邊刪除一邊寫(xiě)入的事盡量少干,如果寫(xiě)入時(shí)候有卡頓,千萬(wàn)不要著急的按重啟,多等會(huì),因?yàn)閴K擦除延遲是比較高的。想騙保的同學(xué)看到這里會(huì)有所領(lǐng)悟吧,不過(guò)這僅針對(duì)使用劣質(zhì)NAND的SSD,優(yōu)質(zhì)NAND+健壯度高的固件,這么做也很難搞壞。
3、如果非要買(mǎi)低端的SSD,也盡量選有芯片sorting能力的工廠出的產(chǎn)品。已知大陸工廠有這個(gè)能力的包括江波龍,臺(tái)灣的華泰電子等也給很多品牌提供封測(cè)服務(wù)。我們把這個(gè)能力當(dāng)做一個(gè)最基本的及格線,凡是及格線之下的都是不推薦的,比如那些使用拆板、降級(jí)顆粒不做sorting卻成天自稱(chēng)一線原廠顆粒的品牌……