SSD固態硬盤的GC與Trim


操作系統:其實並沒有刪除數據;

 事實上,它只是在硬盤前的索引區里標記這塊文件占用的區域為無效的,

 所以等該區域被擦除后,下次數據將要再次寫入的時候,可以寫入這塊被標記的區域。

 這也就是為啥那 些所謂的文件恢復軟件能恢復的道理。(數據依然存在)。

 

固態硬盤:在固態硬盤閃存內,數據存儲一般是以page(頁)為最小單位存儲的(典型的為4KB),而128個page組成了一個block(塊),

 數據以頁(page)為單位來讀取和寫入,但卻只能以塊(Block)為單位來刪除。

 當讀取數據或者寫入到一個沒有被使用過的page上時,固態硬盤的速度是很快的,

 但是在無效數據區上的話,就比較復雜了,需要許多步驟來完成。

 

*注意:硬盤本身是不知道當前數據的狀態的,他只是被控制着做這做那。

 上面這一套在普通的機械硬盤上工作起來非常完美,因為他們可以直接覆寫舊的區域,

 但是當用到NAND閃存上就行不通了,當全部閃存被寫滿一遍后,沒有空余 (從未寫過)的塊可以被使用的情況下,速度就下來了。

 

GC:要覆寫(這里指在無效數據區域寫)一個4KB 頁的文件系統,首先要把整個512KB 塊復制進緩存里。

 然后,在緩存里刪除這個4KB頁,替換成新的數據。

 接下來,清空整個閃存內的這個512KB區域,並從緩存里把新的數據寫回去。

Trim:SSD一樣會復制整個包含刪除數據的塊到緩存,清空塊並寫入有效數據的頁回去,

 區別是這樣等於把這個延遲時間從覆寫數據的那個時間提前到了刪除數據的時候

 

簡而言之,這個問題是因為操作系統和文件系統不能和SSD的主控進行刪除文件的交流造成的,

 如果有之前沒清除干凈的數據,所有寫入的頁的操作都要先清除塊再改寫,將嚴重影響寫入速度。

 有2種途徑來修復這個問題:

第一個:定期運行垃圾回收程序(GC)

 這個操作有點像整理,在SSD空閑時,全盤掃描有效的頁並合並整理起來變為一個包含全部有效頁的塊,而那些無效的頁和塊都將被完全的清除。

第二個:更好的途徑就是當數據刪除時候讓系統告訴SSD數據沒了,讓SSD立即擦掉那些數據占用的塊,這就是Trim命令做的事。

 當一個文件在支持Trim的系統里被刪除后,操作系統會發個命令給SSD,

 讓他知道這個數據所在的這個page可以直接被寫入,

 等於把控制權從操作系統變 為了SSD主控制器固件。

 

總結:Trim保證速度不下跌的真正秘密是: 把將來要做的事提前做掉了, 但是這件事遲早要做,所以基本不會影響SSD原有的寫入次數(壽命)。

 

Trim的三要素:

  1. 系統: Win7, 2008R2 , Linux核心2.6.28以上。

  2. 固件: SSD的廠商在固件里要放有Trim算法。

  3. 驅動: MS的驅動,Intel的AHCI驅動目前支持。 別的要看之后的更新了。

以上3點缺一不可。

RAID陣列里的盤明確不支持TRIM,不過RAID可以支持GC。

 

參考:http://blog.csdn.net/dayancn/article/details/52054664


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM