全面理解SSD和NAND Flash
Flash Memory又叫做閃存,是一種非易失性存儲器。非易失性是指斷電之后數(shù)據(jù)不會丟失,這里就涉及到斷電保護(后面詳細講解)。
總體思路
1.NAND Flash的用途。
2.NAND Flash規(guī)則介紹。
3.SSD固件(Firmware,F(xiàn)W)包括:映射表(Mapping Table)、垃圾回收(Garbage Collection)、磨損平衡(Wear Leveling,WL)等。
4.補充概念:寫入放大(Write Application)、預(yù)留空間(Over Provisioning)、Flash壽命(Program/Erase Count,P/E)等。
5.斷電保護機制。
6.對SSD的評價標(biāo)準(zhǔn):穩(wěn)定性、性能、壽命。
1、NAND Flash的用途
HDD是指機械硬盤,是傳統(tǒng)普通的硬盤,包括:盤片、磁頭、磁盤旋轉(zhuǎn)軸及控制電機、磁頭控制器、數(shù)據(jù)轉(zhuǎn)接器、接口、緩存。
SDD(Solid State Drives)是固態(tài)硬盤,包括:控制單元、存儲單元(DRAM芯片/FLASH芯片)。
區(qū)別:HDD是機械式尋找數(shù)據(jù),所以防震遠低于SSD,數(shù)據(jù)尋找時間也遠低于SSD。SSD(左圖)和HDD(右圖)的模樣區(qū)別如下:
(圖片來自百度)
Flash又分NAND Flash和NOR Flash:NOR型存儲內(nèi)容以編碼為主,其功能多與運算相關(guān);NAND型主要功能是存儲資料,如數(shù)碼相機中所用的記憶卡。
現(xiàn)在大部分的SSD都是用來存儲不易丟失的資料,所以SSD存儲單元會選擇NAND Flash芯片。這里我們講的就是SSD中的NAND Flash芯片。
2、NAND Flash的規(guī)則
(1)Flash都不支持覆蓋,即寫入操作只能在空或已擦除的單元內(nèi)進行。
更改數(shù)據(jù)時,將整頁拷貝到緩存(Cache)中修改對應(yīng)頁,再把更改后的數(shù)據(jù)挪到新的頁中保存,將原來位置的頁標(biāo)記為無效頁;
指定在已有無效數(shù)據(jù)的位置寫入時,需要先擦除無效頁才能在該位置寫入新數(shù)據(jù)。
(2)以page為單位寫入,以Block為單位擦除;擦除Block前需要先對里面的有效頁進行搬遷。
(3)每個Block都有擦除次數(shù)限制(有壽命),擦除次數(shù)過多會成為壞塊(bad block)。
3、SSD固件內(nèi)容
(1)映射表 Mapping Table
邏輯地址:用戶程序中使用的相對地址;
物理地址:實際存儲單元的絕對地址;
所以,映射表里面存儲的內(nèi)容是邏輯地址到物理地址的映射信息,利用邏輯地址查詢映射表,找到對應(yīng)的物理地址,再對實際存儲單元做讀寫訪問。
SSD內(nèi)部就維護了一張映射表;一般SSD內(nèi)部會板載DRAM,用于存儲程序運行的臨時數(shù)據(jù),斷電會丟失;映射表存放在SDRAM中(方便快速訪問),同時NAND Flash中會存儲幾份映射表(防止斷電后映射關(guān)系丟失),而且會定期對NAND Flash中的映射便進行更新。
(2)垃圾回收 Garbage Collection
垃圾回收就是把幾個Block中的有效數(shù)據(jù)集中搬移到新的Block上去, 然后再把這幾個Block擦除掉。
垃圾回收機制有很多,都是根據(jù)不同的側(cè)重點提出的,所以沒有***的算法,就像伴侶一樣只有適不適合之說。如:Greedy算法,每次選擇包含最少有效頁的Block來回收,也就是對垃圾的貪心,每次盡可能回收最多的垃圾。還有Cost-Benefit算法(考慮Block的擦除次數(shù))、Cat回收算法、CICL算法等。
另外有兩種回收策略:
被動回收策略:當(dāng)有寫入請求的時候,首先判斷當(dāng)前可用空間大小與臨界值大小的比較;如果空間足夠,直接寫入空閑空間;如果空間不夠了,首先啟用垃圾回收,再往空閑區(qū)域完成寫入請求。
不足之處:當(dāng)空間不夠的時候?qū)懻埱髸谎舆t。
主動回收策略:通過固件設(shè)定周期性任務(wù),定時檢查可用空間大小,如果需要就執(zhí)行垃圾回收。
巧妙之處:利用空閑時間提前進行垃圾回收,避免對請求造成不必要的延時。
不足之處:倘若系統(tǒng)一直沒有空閑時間,垃圾回收依舊無法有效執(zhí)行。
(3)磨損平衡 Wear Leveling
每個Block都是有壽命(Program/Erase Count,P/E值)的,他們的擦除次數(shù)是有限的。NAND Flash的壽命類似“木桶原理”,取決于所有Block中的最小壽命。如果拼命對某一塊進行擦除,NAND Flash的壽命將會被縮減到最小。所以引入了磨損平衡,平衡所有Block的擦除次數(shù)。
有很多不同的磨損平衡機制,大體可以分為兩大類:動態(tài)WL、靜態(tài)WL。
動態(tài)WL:使用Block進行擦寫時,優(yōu)先挑選P/E值低的Block。
動態(tài)WL:把P/E值低的Block中的數(shù)據(jù)挪到P/E值高的Block中存放。
4、補充概念
(1)寫入放大 Write Application
寫入放大倍數(shù) = 閃存寫入數(shù)據(jù)量 / 主控寫入數(shù)據(jù)量 = 實際寫入數(shù)據(jù)量 / 要求寫入數(shù)據(jù)量
例如,現(xiàn)在有一個寫入一頁的請求;即主控寫入數(shù)據(jù)量為1;
然而這個一頁請求觸發(fā)了垃圾回收,當(dāng)前的寫請求會被延遲,直到垃圾回收完畢后再執(zhí)行寫入操作;
如果垃圾回收只挪了5頁有效數(shù)據(jù),那么實際的寫入量應(yīng)該為6頁(1頁寫請求,5頁挪動);即閃存寫入數(shù)據(jù)量為5;
所以寫放大為5/1 = 5。
理想的寫放大為1,但是Sandforce的數(shù)據(jù)寫入時會進行壓縮寫入,***情況下,寫放大可以為0.5,打破了Intel的“寫放大不可能小于1”之說。
(2)預(yù)留空間 Over Provisioning
通過垃圾回收的過程,不難知道,垃圾回收的前提是要提供空閑區(qū)域來拷貝,如果連空閑區(qū)域都沒有,垃圾回收將無法執(zhí)行,這時將不再支持任何數(shù)據(jù)的寫入。為了避免這種情況的發(fā)生,提出了預(yù)留空間。
預(yù)留空間不僅僅只是用來保證垃圾回收的正常完成,還存儲著SSD內(nèi)部的系統(tǒng)數(shù)據(jù)(包括:出廠壞塊信息、SSD固件、Mapping Table等)。
所以如果說明存儲大小為256GB,實際上的存儲空間可能只有238GB(一般預(yù)留空間為7%)。
另外,OP越大,垃圾回收就會越快,相應(yīng)寫放大會變小,所以讀寫性能就會越好;但用戶能使用的空間會被縮小。
(3)Flash壽命 Program/Erase Count
前面也已經(jīng)提及到了,每個Block都是有擦除次數(shù)限制的,所以引入了壽命這個說法。
5、斷電保護機制
中控里板載的SDRAM是非易失性存儲器,斷電之后數(shù)據(jù)會丟失,這個時候SDRAM中的數(shù)據(jù)主要包括:用戶數(shù)據(jù)、映射表;
如果沒有斷電保護機制,再次上電時,先去NAND Flash中找上次更新時的映射表,這時拿到的信息并不是***的,是上次更新NAND Flash中映射表時的數(shù)據(jù)信息,所以發(fā)生了大部分?jǐn)?shù)據(jù)丟失。
因此SSD板上會加上鉭電容或者超級電容,當(dāng)檢測到非法斷電時,首先停止數(shù)據(jù)操作,鉭電容或超級電容開始放電,以保證SDRAM中的數(shù)據(jù)能夠?qū)懭氲絅AND Flash中。
至于是用鉭電容還是超級電容,得看具體要保護的數(shù)據(jù)量;不是電容的容量越大越好,因為只要電容開始放電,就要等待它的電放完之后才可以進行其他操作。假如電容容量過大,用戶只是點了個電腦重啟,這時候SSD的電容會開始放電,放電還沒完成的時候,電腦已經(jīng)重新上電,這時無法認(rèn)盤。所以電容電量應(yīng)該選最時候的。
基于SDRAM中的內(nèi)容,斷電保護機制主要分為3種:
(1)保存SDRAM中所有數(shù)據(jù)
再次上電后,相當(dāng)于斷電前的操作被中斷,重新上電后就可立馬進入待命狀態(tài)。
(2)只保存SDRAM中的用戶數(shù)據(jù)
再次上電后,需要先把上次NAND Flash中保存的映射表提取到SDRAM中,再將保存的用戶數(shù)據(jù)提取出來,兩者結(jié)合更新映射信息,更新完之后才進入待命狀態(tài)。
(3)只保存SDRAM中的映射表
再次上電后,需要先把上次NAND Flash中保存的映射表提取到SDRAM中,只是丟掉了用戶斷電前正在操作的數(shù)據(jù),無法更新。
6、SSD的評價標(biāo)準(zhǔn)
(1)穩(wěn)定性:SSD是否穩(wěn)定,***的影響因素是垃圾回收機制的選擇,恰當(dāng)?shù)睦厥湛梢蕴峁┓€(wěn)定的讀寫速率;例如主動垃圾回收機制,在空閑的時候做垃圾回收,讀寫速度不會因為延時而波動不定。
(2)性能:預(yù)留空間的大小主要決定了SSD的性能,OP大,垃圾回收快,相應(yīng)寫放大小,讀寫性能就越好。
(3)壽命:所有Block的P/E值越趨近于均衡,SSD的壽命就越趨近于***。