SSD已經日漸流行,現在買電腦不挑帶SSD的,都不好意思說自己真懂用戶體驗。和傳統HDD相比,SSD由閃存構成,閃存低延遲的特性,令SSD在隨機讀寫性能方面大幅超越HDD,這也是SSD能帶來流暢操作體驗的關鍵。但是,SSD又不僅僅只是閃存的簡單組裝,僅僅把閃存堆砌起來,并不能稱作是SSD。
調用閃存的軟件算法,同樣對SSD的壽命、穩定性、性能等方方面面起著重大作用。SSD中的軟件算法你都了解嗎?今天,就一起來談談SSD中有哪些軟件算法吧!
SSD可不是把閃存焊在一起就能做出來的
FTL:沒它SSD就無法識別
我們都知道SSD的硬件構成和HDD完全不同,因此操作系統識別HDD的很多機制,并不適用于SSD。例如,硬盤是由盤片來構成的,盤片是同心圓,把圓分成一個個小小的扇形,數據在這些扇形中儲存,這些扇形就被稱之為扇區。操作系統把扇區組織起來,構成FAT32、NTFS等文件系統,用戶才得以訪問文件/文件夾而不是一個個的扇區物理地址。基本上,操作系統建立文件系統的基礎就是扇區。
HDD硬盤盤片上的扇區,SSD沒有這個結構
SSD由閃存構成,沒有盤片,自然也沒有扇區。SSD的閃存顆粒基礎單位是數據容量4KB的Page(頁),Page組成Block(區),Block組成Plane(平面),最后Plane組成Die(晶片),這就是閃存的硬件架構。可見SSD沒有扇區,怎么辦?這就得靠一些算法來進行轉換了。
SSD使用的是閃存,閃存結構和HDD不同,需要FTL層和文件系統對話
把SSD的架構虛擬成HDD的算法,叫做“FTL”(Flash Translation Lay)。FTL算法是由SSD主控提供的,比操作系統更加底層。FTL作為一個軟件中間層,可以把SSD基于Page的硬件架構映射成HDD基于扇區的硬件架構。操作系統為SSD建立文件系統的時候,有了FTL,操作系統看到的東西和HDD沒啥兩樣,就可以用傳統的方法對SSD進行分區、格式化等操作,不需要使用專為SSD而生的文件系統。得益于FTL軟件算法,SSD才能無縫接班HDD,沒它SSD就無法識別。
GC垃圾回收:沒它SSD就巨慢無比
閃存的機制是比較獨特的,當你向閃存寫入數據的時候,必須先把閃存中的數據擦除掉,才能寫入。同時,閃存的最小讀寫單位是Page,但最小的擦除單位是Block。一個Block中包含了多個Page,SSD工作一段時間后,就沒有哪個Block中的Page都是空白的了。如果要擦除某個Block,就必須先把這個Block中存在有效數據的Page復制備份到其他地方,接而進行擦除,這樣一來才不會丟數據。
每個Page都可以寫入數據,但覆蓋寫入需要先擦除原先的數據,一擦除整個Block都會被擦除
有效數據的Page要復制到什么地方進行備份呢?一些比較爛的產品,會把這些Page的數據復制到緩存,待到Block擦除后,再把數據寫回去,這樣一來SSD的寫入速度就更加悲劇了——既要寫原來的數據,又要寫新數據。解決這個問題的,就是SSD中的GC(Gabage Collection),也就是垃圾回收算法。
GC垃圾回收算法看著有點類似碎片整理,它可以把某個Block中的存在有效數據的Page,移動到其他Block中,從而讓操作系統得以擦除這整一個Block。接著再往該Block寫數據,就不需要把備份到其他地方的Page也寫回去了。CG發生在FTL層,不同的SSD的GC算法是不一樣的,GC算法的不同,深切影響著SSD的性能。
Trim:大大提高垃圾回收效率
Trim是一種用來增加GC垃圾回收效率的算法。沒有Trim的話,會出現這樣一種情況:在操作系統刪除一個文件,實際上數據在物理層面上并沒有被刪除。于是,SSD的某個Block所有Page都會被填滿,待到真正寫入數據的時候,才被迫進行GC垃圾回收,主控才開始把有效數據的Page移動到其他Block上,進而擦除該Block。如此一來,速度就很慢,SSD用久了每次寫入數據都得先GC,用戶體驗非常不好。
CMD中查詢“fsutil behavior QUERY DisableDeleteNotify”,如圖顯示就是開啟了Trim
Trim就可以大大緩解這種情況。操作系統刪除數據后,Trim會告訴SSD主控哪些Page的數據對應著刪除的數據,這些Page會被標記成為無效Page。接著,在閑暇時段,SSD主控就會主動進行CG,把有效數據的Page移走,然后擦除這些Block的數據,提前為操作系統的數據寫入準備好足夠多的Block。如此一來,就算是長期使用,只要SSD不是裝得太滿,性能都不會有太過明顯的下滑,大大提升了用戶體驗。Trim算法是由操作系統提供的,Win7、Android 4.3以后的操作系統都支持Trim。
磨損平衡:保證閃存壽命被均勻消耗
我們知道閃存是有擦寫壽命的,例如MLC閃存只能夠擦寫數千次,TLC閃存只能夠擦寫數百次等等。其實以現在的SSD容量,總擦寫數據量是非常驚人的,例如256G的SSD,壽命是500次擦寫(P/E)的話,那么就需要寫入125TB的數據,閃存才壽終正寢——就算你每天寫入10G數據,也需要用三十多年才能把閃存給寫掛,更何況很少人每天往SSD中寫10G數據。
TLC的擦寫次數不盡如人意,但正常使用其實也很難掛掉
但是很多朋友仍不信任SSD的壽命,理由是SSD的這個壽命,是根據全盤容量來估算的。有的朋友認為,平時讀寫數據,會集中讀寫SSD的其中一部分閃存,這部分的閃存壽命就會損耗得特別快。一旦這部分閃存掛了,那么整塊SSD也就掛了。然而事實真的是這樣嗎?
事實當然并非如此。實際上,SSD擁有磨損平衡(Wear Leveling)算法,令所有閃存磨損度盡可能保持一致。SSD的磨損平衡算法大致分為動態和靜態兩種。動態的算法就是當寫入新數據的時候,會自動往比較新的Block中去寫,老的閃存就放在一旁歇歇;而靜態的算法就更加先進,就算沒有數據寫入,SSD監測到某些閃存Block比較老,會自動進行數據分配,讓比較老的閃存Block承擔不需要寫數據的儲存任務,同時讓較新的閃存Block騰出空間,平日的數據讀寫就在比較新的Block中進行——如此一來,各個Block的壽命損耗,就都差不多了。
總結
SSD絕不是把閃存堆在一起就能做成的,要讓SSD穩定、快速地運行,還有賴于種種軟件算法。在選用SSD的時候,可以多關注一下該SSD所使用的主控方案,關注該主控的算法是否靠譜;在使用SSD時,要選擇適合的操作系統,并及時更新SSD的固件和驅動。如此一來,才會得到更好的體驗。