使用閃存為存儲(chǔ)載體的SSD的讀寫過程與傳統(tǒng)的HDD有著本質(zhì)上的不同,特別是在寫入方面,HDD是可以直接對(duì)存儲(chǔ)在磁碟上的數(shù)據(jù)進(jìn)行覆蓋寫入的,SSD并不能這樣,閃存需要先擦除原來的數(shù)據(jù)再把新的數(shù)據(jù)寫進(jìn)去,不能直接覆寫數(shù)據(jù),使得SSD多了擦除的操作。而寫入單位(Page)與擦除單位(Block)的不統(tǒng)一又讓SSD不停地在各個(gè)Block區(qū)塊之間折騰,SSD用久了需要擦除的區(qū)塊就會(huì)越多,性能自然也會(huì)變慢,然而現(xiàn)在的SSD基本都不會(huì)這樣,為什么會(huì)這樣呢?
SSD為啥這么快?秘密就在這里---浦科特的SSD就以True Speed不掉速
SSD的寫入方式?jīng)Q定了它越用越慢的特性,數(shù)據(jù)寫入的越多性能就會(huì)越差,不過現(xiàn)在的SSD都支持TRIM指令與GC垃圾回收功能,在他們倆的守護(hù)下可以確保你的SSD里面即使寫入得再多東西也不會(huì)輕易掉速,這就是SSD為啥這么快的主要原因。
TRIM指令
TRIM指令是微軟提出的,但是SSD廠商也有支持與不支持TRIM之分,所以還是跟SSD有一定關(guān)系。
TRIM是基于SATA控制器的一個(gè)指令,一旦有文件刪除或者分區(qū)格式化,操作系統(tǒng)就會(huì)發(fā)TRIM指令給SSD主控,告訴它某處的數(shù)據(jù)已經(jīng)刪除了,SSD因而知道哪些數(shù)據(jù)是能動(dòng)哪些不能動(dòng)的,之后就可以進(jìn)行清空操作以恢復(fù)性能了。不過這個(gè)過程不是馬上就完成的,TRIM命令是即時(shí)發(fā)送到SSD主控中的,但是什么時(shí)候開始清空數(shù)據(jù)是主控算法的事兒。
SSD為啥這么快?秘密就在這里---對(duì)TRIM指令的支持是現(xiàn)在SSD主控必備的
之所以有這么一個(gè)溝通過程還是跟SSD與HDD的讀寫方式不同有關(guān),首先操作系統(tǒng)的刪除數(shù)據(jù)并不是真正把數(shù)據(jù)清空了,只是加了刪除的標(biāo)簽而已(就像摘了門牌號(hào),房子還在一樣)。就是說真實(shí)的數(shù)據(jù)還在,不過普通的操作訪問不到了,但是一些專用的數(shù)據(jù)恢復(fù)軟件可以把這些數(shù)據(jù)再找回來。
HDD機(jī)械硬盤是可以直接在原有數(shù)據(jù)上覆蓋,但是SSD不行,必須要清空原有數(shù)據(jù)才能寫入新數(shù)據(jù),而系統(tǒng)并非真正刪除數(shù)據(jù)的特性會(huì)對(duì)SSD的性能造成影響,TRIM指令的存在使得SSD能夠緊緊跟隨OS的操作意圖,擦除已刪除的無用數(shù)據(jù)以恢復(fù)SSD性能。
上圖很好的說明了TRIM指令是如何工作的,前三步分別是空數(shù)據(jù)、寫數(shù)據(jù)和刪除部分?jǐn)?shù)據(jù),在此之后TRIM指令就會(huì)通知SSD主控可以清空紅色區(qū)域的無用數(shù)據(jù),之后SSD的性能就可以恢復(fù)如初了。
TRIM支持與否依賴于操作系統(tǒng)、磁盤控制器驅(qū)動(dòng)以及SSD主控,Win7、
Windows 2008 R2、Linux 2.6.33、MAC OS 10.6.6、Free BSD 8.2及之后的系統(tǒng)都支持
TRIM或者類似指令,Intel 9.6.0.1014及之后的磁盤驅(qū)動(dòng)都可以支持,不過TRIM指令并不強(qiáng)制要求AHCI,IDE模式也可以,只是SSD幾乎沒誰用IDE模式吧。
SSD為啥這么快?秘密就在這里---微軟PPT中專門解釋過TRIM指令的工作方式和優(yōu)點(diǎn)
Intel在RST 11.5之后的驅(qū)動(dòng)中提供RAID模式的TRIM指令支持,還有一些廠商用自己的方式解決了RAID模式下的TRIM指令問題。另外,XP系統(tǒng)下是不支持TRIM指令的,不過三星的工具軟件也可以讓其SSD實(shí)現(xiàn)類似TRIM的功能。
浦科特M8Se有著很高的TRIM效率,這可以提高產(chǎn)品性能的穩(wěn)定性,讓SSD能夠保持較長時(shí)間的高速運(yùn)行,還可以抑制寫入放大,提高閃存的壽命。
用戶可以自行檢查TRIM指令開啟與否,打開CMD窗口定位到“fsutil behavior set DisableDeleteNotify 0”表示啟用TRIM,如果是1就表示禁用狀態(tài)或者不支持。
SSD為啥這么快?秘密就在這里---GC垃圾回收
垃圾回收(garbage collection,簡(jiǎn)稱GC)是SSD恢復(fù)性能的另一大秘籍,這個(gè)主要跟廠商所用的主控有關(guān),其意義就跟字面意思一樣,通過清理無用的垃圾數(shù)據(jù)保持SSD性能如新。
它的存在還是跟SSD的特性有關(guān),空盤下SSD寫入數(shù)據(jù)所需時(shí)間以ns計(jì),但是擦除數(shù)據(jù)的過程則以ms計(jì),寫入的數(shù)據(jù)越多,需要擦除的時(shí)間也越長,SSD的寫入性能就會(huì)嚴(yán)重下降,GC機(jī)制相當(dāng)于”騰籠換鳥”,把原本雜亂無章存放的數(shù)據(jù)整理一遍,然后寫入到新的空白區(qū),之前的區(qū)塊就會(huì)進(jìn)行清除操作以恢復(fù)正常性能。
SSD為啥這么快?秘密就在這里---GC的處理過程
由于各種寫入、刪除操作會(huì)在SSD留下雜亂的數(shù)據(jù),其中有些是還有用的,有些就是無效的,GC功能啟動(dòng)之后就把有用的數(shù)據(jù)拷貝到另外的區(qū)塊,這一步相當(dāng)于“騰籠”,原來存儲(chǔ)數(shù)據(jù)的區(qū)域就會(huì)被清除,恢復(fù)空盤水平以準(zhǔn)備寫入新的數(shù)據(jù),這就是“換鳥”了。
上面只是理論操作過程,具體怎么做還有個(gè)選擇問題,如果在SSD讀寫數(shù)據(jù)的同時(shí)進(jìn)行GC操作,這種實(shí)時(shí)GC(Real Time GC)對(duì)主控的性能是個(gè)考驗(yàn),一方面要往空白區(qū)寫入數(shù)據(jù),同時(shí)還要照顧無效數(shù)據(jù)的“拆遷”工作,這么頻繁折騰SSD的話估計(jì)SSD那有限的讀寫壽命也支撐不住,實(shí)時(shí)GC不可取。
浦科特在2011年的M2P就使用過相當(dāng)激進(jìn)的實(shí)時(shí)GC功能,性能確實(shí)不會(huì)降低,不過那個(gè)時(shí)候的閃存還是32nm的MLC,壽命相當(dāng)有保障,現(xiàn)在無論MLC還是TLC都不夠膽這樣玩了。
目前的GC大都是在SSD閑置時(shí)才開始工作,也就是所謂的“Idle Time GC(閑置GC)”了。廠商會(huì)在主控中設(shè)定一個(gè)條件,比如空白容量達(dá)到某種比例才開始GC處理,這樣就預(yù)先釋放了空白空間,如果達(dá)到設(shè)定條件的上限,那么GC也會(huì)停止,這樣處理比實(shí)時(shí)GC更利于延長SSD壽命。
閑置GC也不是完美無缺的,它會(huì)帶來額外的寫入放大,因?yàn)樵贕C處理開始之前,某些整理過的頁面(page)可能正在變臟,不過閑置GC增加的寫入放大率非常小,OCZ稱其SSD的閑置GC只有額外的1%放大率,影響非常小,整體上依然是利大于弊。
現(xiàn)在的SSD大都是利用TRIM和閑置GC相輔相成工作的,當(dāng)用戶刪除或者修改文件時(shí),系統(tǒng)就會(huì)發(fā)送TRIM指令告訴SSD那部分?jǐn)?shù)據(jù)可以刪掉了,然后SSD在閑置時(shí)就會(huì)對(duì)這部分區(qū)域進(jìn)行GC騰出空白的閃存空間,實(shí)時(shí)GC功能現(xiàn)在在啟用SLC Cache的SSD上會(huì)比較明顯,畢竟它們要快速的騰出SLC Cache空間給后續(xù)的數(shù)據(jù),這樣才能確保SSD擁有高速的寫入。