前言——
在前段時(shí)間小編曾經(jīng)發(fā)布了:固態(tài)硬盤知識(shí)進(jìn)階:專業(yè)名詞篇。文內(nèi)介紹了各類固態(tài)硬盤中可能會(huì)出現(xiàn)的比較晦澀和深入的名詞,而很多朋友可能沒(méi)聽(tīng)說(shuō)過(guò)這些名詞。如FTL、LBA、GC等。。。今天我們將剩下的一些名詞再來(lái)說(shuō)一下,給大家解讀一下。
下面就來(lái)為大家解讀這些名詞。
目錄:
一、預(yù)留空間(Over-provisioning,OP)
二、Trim
三、寫(xiě)入放大(Write amplification,WA)
四、壞塊管理(Bad block management,BBM)
五、ECC - 校驗(yàn)和糾錯(cuò)
六、Interleaving - NAND 交叉存取技術(shù)
正文開(kāi)場(chǎng):
一、 預(yù)留空間(Over-provisioning,OP)
預(yù)留空間一般是指用戶不可操作的容量,為實(shí)際物理閃存容量減去用戶可用容量。這塊區(qū)域一般被用來(lái)做優(yōu)化,包括磨損均衡,GC和壞塊映射。
第一層為固定的7.37%,這個(gè)數(shù)字是如何得出的哪?我們知道機(jī)械硬盤和SSD的廠商容量是這樣算的,1GB是1,000,000,000字節(jié)(10的9 次方),但是閃存的實(shí)際容量是每GB=1,073,741,824,(2的30次方) ,2者相差7.37%。所以說(shuō)假設(shè)1塊128GB的SSD,用戶得到的容量是128,000,000,000字節(jié),多出來(lái)的那個(gè)7.37%就被主控固件用做OP了。
第二層來(lái)自制造商的設(shè)置,通常為0%,7%和28%等,打個(gè)比方,對(duì)于128G顆粒的SandForce主控SSD,市場(chǎng)上會(huì)有120G和100G兩種型號(hào)賣,這個(gè)取決于廠商的固件設(shè)置,這個(gè)容量不包括之前的第一層7.37%。
第三層是用戶在日常使用中可以分配的預(yù)留空間,像Fusion-IO公司還給用戶工具自己調(diào)節(jié)大小來(lái)滿足不同的耐用度和性能,而用戶也可以自己在分區(qū)的時(shí)候,不分到完全的SSD容量來(lái)達(dá)到同樣的目的。
預(yù)留空間雖然讓SSD的可用容量小了,但是帶來(lái)了減少寫(xiě)入放大,提高耐久,提高性能的效果。
二、 Trim
TRIM是一個(gè)ATA指令,由操作系統(tǒng)發(fā)送給SSD主控制器,告訴它哪些數(shù)據(jù)占的地址是”無(wú)效“的。
要明白什么是Trim和為什么它很重要,需要先知道一點(diǎn)文件系統(tǒng)的知識(shí)。
當(dāng)你在電腦里刪除一個(gè)文件的時(shí)候,操作系統(tǒng)并不會(huì)真正的去刪除它。操作系統(tǒng)只是把這個(gè)文件地址標(biāo)記為“空”,可以被再次使用,這意味著這個(gè)文件占的地址已經(jīng)是“無(wú)效”的了。這就會(huì)帶來(lái)一個(gè)問(wèn)題,硬盤并不知道操作系統(tǒng)把這個(gè)地址標(biāo)記為”空“了,機(jī)械盤的話無(wú)所謂,因?yàn)榭梢灾苯釉谶@個(gè)地址上重新覆蓋寫(xiě)入,但是到了SSD上問(wèn)題就來(lái)了。
NAND需要先擦除才能再次寫(xiě)入數(shù)據(jù),要得到空閑的NAND空間,SSD必須復(fù)制所有的有效頁(yè)到新的空閑塊里,并擦除舊塊(垃圾回收)。如果沒(méi)有Trim,意味著SSD主控制器不知道這個(gè)頁(yè)是”無(wú)效“的,除非再次被操作系統(tǒng)要求覆蓋上去。
這里要強(qiáng)調(diào)下,Trim只是條指令,讓操作系統(tǒng)告訴SSD主控制器這個(gè)頁(yè)已經(jīng)“無(wú)效”就算完了,并沒(méi)有任何其它多余的操作,對(duì)Trim后的優(yōu)化其實(shí)是垃圾回收在干活。Trim能夠減少寫(xiě)入放大,因?yàn)橹骺刂破鞑恍枰獜?fù)制已經(jīng)被操作系統(tǒng)定義為“無(wú)效”的頁(yè)(沒(méi)Trim的話,主控就因?yàn)椴恢?,而認(rèn)為這個(gè)頁(yè)“有效”)到“空白塊”里,這同時(shí)代表復(fù)制的“有效”頁(yè)變少了,垃圾回收的效率提高了,SSD性能下降的問(wèn)題也減弱了。
所以說(shuō)Trim的奧秘在于它能大量減少“有效”頁(yè)的數(shù)量,大大提升垃圾回收的效率。
相對(duì)于企業(yè)級(jí)市場(chǎng),在消費(fèi)級(jí)的SSD里,Trim顯得更為重要,企業(yè)級(jí)的SSD大部分都帶有相當(dāng)大的OP(備用空間)空間,能夠提升一部分的垃圾回收效率。而消費(fèi)級(jí)SSD一般OP都比較小,所以需要Trim來(lái)保證垃圾回收的效率。
Trim指令只有在操作系統(tǒng)進(jìn)行刪除、格式化等操作時(shí)候才會(huì)發(fā)送。Trim指令目前還不支持發(fā)送給RAID陣列中的SSD。(操作系統(tǒng)下進(jìn)行的軟件RAID可以支持)。
Trim的支持需要3個(gè)要素:
1.SSD主控制器和當(dāng)前搭配的固件需要支持Trim命令接收。
2.當(dāng)前操作系統(tǒng)需要支持Trim指令發(fā)送。(Win7/2008R2及后續(xù)版本)
3.當(dāng)前使用的磁盤驅(qū)動(dòng)程序必須支持Trim命令傳輸。
只有同時(shí)滿足以上3個(gè)條件,才能做到系統(tǒng)Trim命令發(fā)送,驅(qū)動(dòng)傳輸Trim命令,SSD固件接收到傳輸來(lái)的Trim命令。
Trim目前不支持以下幾種情況:(可能還有更多)
1. Trim目前不支持RAID陣列中的SSD。(操作系統(tǒng)下進(jìn)行軟件RAID除外)
2. Trim目前不支持磁盤鏡像文件內(nèi)操作。(VM等虛擬機(jī)軟件使用的虛擬磁盤文件)
3. Trim目前不支持加密的文件系統(tǒng)。(以防止暴露加密文件系統(tǒng)信息)
三、 寫(xiě)入放大(Write amplification,WA)
因?yàn)殚W存必須先擦除才能寫(xiě)入(我們也叫“編程“),在執(zhí)行這些操作的時(shí)候,移動(dòng)(或覆蓋)用戶數(shù)據(jù)和元數(shù)據(jù)(metadata)不止一次。這些多次的操作,不但增加了寫(xiě)入數(shù)據(jù)量,減少了SSD的使用壽命,而且還吃光了閃存的帶寬(間接地影響了隨機(jī)寫(xiě)入性能)。
早在2008年,Intel公司和Silicon Systems公司(2009 年被西部數(shù)字收購(gòu))第一次提出了寫(xiě)入放大并在公開(kāi)稿件里用到這個(gè)術(shù)語(yǔ)。他們當(dāng)時(shí)的說(shuō)法是,寫(xiě)入算法不可能低于1,但是這種說(shuō)法在2009年被 SandForce打破,SandForce說(shuō)他們的寫(xiě)入放大是0.55。
最簡(jiǎn)單的例子,比如我要寫(xiě)入一個(gè)4KB的數(shù)據(jù),最壞的情況就是,一個(gè)塊里已經(jīng)沒(méi)有干凈空間了,但是有無(wú)效數(shù)據(jù)可以擦除,所以主控就把所有的數(shù)據(jù)讀到緩存,擦除塊,緩存里更新整個(gè)塊的數(shù)據(jù),再把新數(shù)據(jù)寫(xiě)回去,這個(gè)操作帶來(lái)的寫(xiě)入放大就是: 我實(shí)際寫(xiě)4K的數(shù)據(jù),造成了整個(gè)塊(1024KB)的寫(xiě)入操作,那就是256倍放大。同時(shí)帶來(lái)了原本只需要簡(jiǎn)單的寫(xiě)4KB的操作變成閃存讀取 (1024KB),緩存改(4KB),閃存擦(1024KB),閃存寫(xiě)(1024KB),造成了延遲大大增加,速度慢是自然了。所以說(shuō)寫(xiě)入放大是影響 SSD隨機(jī)寫(xiě)入性能和壽命的關(guān)鍵因素。
用100%隨機(jī)4KB來(lái)寫(xiě)入SSD,目前的大多數(shù)SSD主控,在最壞的情況下寫(xiě)入放大可以達(dá)到20以上。如果是100%持續(xù)的從低LBA寫(xiě)到高LBA的話,寫(xiě)入放大可以做到1,實(shí)際使用中寫(xiě)入放大會(huì)介于2者之間。用戶還可以設(shè)置一定的預(yù)留空間來(lái)減少寫(xiě)入放大,假設(shè)你有個(gè)128G的SSD,你只分了64G 的區(qū)使用,那么最壞情況下的寫(xiě)入放大就能減少約3倍。
影響寫(xiě)入放大的因素
許多因素影響SSD的寫(xiě)入放大。下面我列出了主要因素,以及它們?nèi)绾斡绊憣?xiě)放大。
1. 垃圾回收(GC) Garbage collection ---
雖然增加了寫(xiě)入放大(被動(dòng)垃圾回收不影響,閑置垃圾回收影響),但是速度有提升。這個(gè)比較特殊的算法用來(lái)整理,移動(dòng),合并,擦除閃存塊來(lái)提升效率。
2. 預(yù)留空間(OP) Over-provisioning ---
減少寫(xiě)入放大,好。(預(yù)留空間越大,寫(xiě)入放大越低)在SSD的閃存上劃出一部分空間留給主控做優(yōu)化,用戶不能操作的空間。
3. TRIM ---
開(kāi)啟后可以減少寫(xiě)入放大,好。一個(gè)ATA指令,由操作系統(tǒng)發(fā)送給SSD主控,告訴主控哪些數(shù)據(jù)是無(wú)效的并且可以不用做垃圾回收操作。
4. 可用容量 ---
減少寫(xiě)入放大,好。(可用空間越大,寫(xiě)入放大越低)用戶使用中沒(méi)有用到的空間,需要有Trim支持,不然不會(huì)影響寫(xiě)入放大。 (某些主控制器算法只支持對(duì)OP區(qū)垃圾回收,這樣就不會(huì)影響)
5. 安全擦除Secure Erase ---
減少寫(xiě)入放大,好。清除所有用戶數(shù)據(jù)和相關(guān)元數(shù)據(jù),讓SSD重置到初始性能。
6. 持續(xù)寫(xiě)入Sequential write ---
減少寫(xiě)入放大,好。理論上來(lái)說(shuō),持續(xù)寫(xiě)入的寫(xiě)入放大為1,但是某些因素還是會(huì)影響這個(gè)數(shù)值。
7. 隨機(jī)寫(xiě)入Random writes ---
提高寫(xiě)入放大,不好。隨機(jī)寫(xiě)入會(huì)寫(xiě)入很多非連續(xù)的LBA,將會(huì)大大提升寫(xiě)入放大。
8. 磨損平衡(WL) Wear Leveling ---
直接提高寫(xiě)入放大,不好。確保閃存的每個(gè)塊被寫(xiě)入的次數(shù)相等的一種機(jī)制。
四、 壞塊管理(Bad block management,BBM)
不管磨損平衡算法如何聰明,在運(yùn)作中都會(huì)碰到一個(gè)頭痛的問(wèn)題,那就是壞塊,所以一個(gè)SSD必須要有壞塊管理機(jī)制。何謂壞塊?
一個(gè)NAND塊里包含有不穩(wěn)定的地址,不能保證讀/寫(xiě)/擦的時(shí)候數(shù)據(jù)的準(zhǔn)確性。壞塊分出廠壞塊和使用過(guò)程中出現(xiàn)的壞塊,和機(jī)械盤的壞塊表一樣(P表和G表),SSD也有壞塊表。
出廠壞塊的話,在壞塊上會(huì)有標(biāo)記,所以很容易就能被識(shí)別,后期使用中出現(xiàn)的壞塊就要靠主控制器的能力了,一般來(lái)說(shuō),越到NAND生命的后期(P/E數(shù)開(kāi)始接近理論最大值),壞塊就會(huì)開(kāi)始大量出現(xiàn)了。
一般來(lái)說(shuō)NAND出廠都包含壞塊,不過(guò)廠商有個(gè)最小有效塊值(NvB-minimum number of valid blocks),拿Intel的34nm MLC L63B來(lái)說(shuō),1個(gè)die上4,096個(gè)塊里至少要有3,936個(gè)塊是好的,從這上面可以知道,雖然出廠的NAND可能有壞塊,但是廠商保證在正常生命周期里,好塊數(shù)不會(huì)低于3936個(gè)塊。而且每個(gè)die的第一個(gè)塊地址(00h)在出廠時(shí)是必須保證好的(ECC后,這個(gè)塊必須有效)。
NAND出廠前都會(huì)被執(zhí)行擦除操作,廠商會(huì)在出貨前會(huì)把壞塊標(biāo)記出來(lái)(廠商會(huì)在壞塊的第一個(gè)頁(yè)的SA區(qū)上打上標(biāo)記。) 這樣壞塊管理軟件就能靠監(jiān)測(cè)SA區(qū)標(biāo)記來(lái)制作壞塊表。
SA區(qū)(頁(yè)中4096~4319的區(qū)域,用戶不可訪問(wèn),主要用來(lái)存放ECC算法,壞塊信息,文件系統(tǒng)資料等。)由于在使用中會(huì)產(chǎn)生壞塊,所以SSD的每次編程/擦除/復(fù)制等操作后都要檢查塊的狀態(tài)。對(duì)顆粒的ECC要求也要達(dá)到廠商的標(biāo)準(zhǔn)以上(主控強(qiáng)不強(qiáng),看ECC能力也是一個(gè)參考)。壞塊管理和平衡磨損算法是必須的。
五、 ECC - 校驗(yàn)和糾錯(cuò)
ECC的全稱是Error Checking and Correction,是一種用于Nand的差錯(cuò)檢測(cè)和修正算法。由于NAND Flash的工藝不能保證NAND在其生命周期中保持性能的可靠,因此,在NAND的生產(chǎn)中及使用過(guò)程中會(huì)產(chǎn)生壞塊。
為了檢測(cè)數(shù)據(jù)的可靠性,在應(yīng)用 NAND Flash的系統(tǒng)中一般都會(huì)采用一定的壞區(qū)管理機(jī)制,而管理壞區(qū)的前提是能比較可靠的進(jìn)行壞區(qū)檢測(cè)。
如果操作時(shí)序和電路穩(wěn)定性不存在問(wèn)題的話,NAND Flash出錯(cuò)的時(shí)候一般不會(huì)造成整個(gè)Block或是Page不能讀取或是全部出錯(cuò),而是整個(gè)Page中只有一個(gè)或幾個(gè)bit出錯(cuò),這時(shí)候ECC就能發(fā)揮作用了。
不同顆粒有不同的基本ECC要求,不同主控制器支持的ECC能力也不同,理論上說(shuō)主控越強(qiáng)ECC能力越強(qiáng)。
六、 Interleaving - NAND 交叉存取技術(shù)
Nand Flash的訪問(wèn)操作過(guò)程包括三項(xiàng):
訪問(wèn)操作 = 命令輸入操作+I/O操作+Array傳輸操作
第一項(xiàng)的操作時(shí)間所占比例很小,在性能估算中可以忽略。
所以,通常認(rèn)為:訪問(wèn)時(shí)間 = I/O時(shí)間+ Array傳輸時(shí)間
在上一代NANDFlash中,第一項(xiàng)占的比例最大,是第二項(xiàng)的4-5倍。
每一個(gè)Plane對(duì)應(yīng)一個(gè)Page大小的緩沖(dataregister)和一個(gè)Page大小的緩存(cacheregister)。數(shù)據(jù)寫(xiě)入的順序是:I/O-> cache register -> data register ->Plane(數(shù)據(jù)讀出的順序剛好相反)。
緩沖(dataregister)與緩存(cacheregister)之間的數(shù)據(jù)傳輸速度很快,dataregister可以把I/O操作和Array操作分隔開(kāi),形成I/O操作和Array操作的“兩級(jí)流水線”。
4個(gè)Plane對(duì)應(yīng)4組緩沖與緩存,每一組可以分別操作。2個(gè)Plane交替操作,可以實(shí)現(xiàn)“乒乓操作”,達(dá)到2倍的Array訪問(wèn)帶寬。4個(gè)Plane交替操作,可以實(shí)現(xiàn)“乒乒乓乓操作”,達(dá)到4倍的Array訪問(wèn)帶寬。
交錯(cuò)操作可以成倍提升NAND的傳輸率,因?yàn)镹AND顆粒封裝時(shí)候可能有多Die,多Plane(每個(gè)plane都有4KB寄存器),Plane操作時(shí)候可以交叉操作(第一個(gè)plane接到指令后,在操作的同時(shí)第二個(gè)指令已經(jīng)發(fā)送給了第二個(gè)plane,以此類推),達(dá)到接近雙倍甚至4倍的傳輸能力。
結(jié)語(yǔ):
這里小編介紹了一部分的專有名詞解釋,后面小編還會(huì)為大家介紹更多的專業(yè)名詞,敬請(qǐng)期待哦~!
對(duì)于本文你有什么看法或建議呢?歡迎留言哦~!
評(píng)論