首頁 > 硬體

SSD軟體演演算法怎麼樣 SSD軟體演演算法介紹【詳解】

2020-10-19 00:55:05

  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 軟體演演算法來進行轉換了。

  SSD使用的是快閃記憶體,快閃記憶體結構和HDD不同,需要FTL層和檔案系統對話

  把SSD的架構虛擬成HDD的演演算法,叫做“FTL」(Flash Translation Lay)。 FTL演演算法是由SSD主控提供的,比作業系統更加底層。FTL作為一個軟體中間層,可以把SSD基於Page的硬體架構對映成HDD基於磁區的硬體架構。

  作業系統為SSD建立檔案系統的時候有了FTL,作業系統看到的東西和HDD沒啥兩樣,就可以用傳統的方法對SSD進行分割區、格式化等操作,不需要使用專為SSD而生的檔案系統。 得益於FTL的 SSD 軟體演演算法,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時要選擇適合的作業系統,並及時更新SSD的韌體和驅動。 如此一來,才會得到更好的體驗。

 


IT145.com E-mail:sddin#qq.com