當前位置:
首頁 > 知識 > 為什麼固態硬碟需要TRIM?

為什麼固態硬碟需要TRIM?

硬碟是電腦上不可或缺的存儲設備,我們知道傳統的機械硬碟裡面有一組高速旋轉的碟片,由於碟片的轉速存在物理瓶頸,因此要進一步提升速度已經非常困難,而固態硬碟(Solid-State Drive; SSD)的出現則突破了傳統硬碟的瓶頸,它依靠快閃記憶體晶元來存儲數據,工作穩定、無噪音、耗電少,隨著成本的下降,大有取代傳統硬碟的勢頭,比如現在蘋果的Macbook筆記本已經全面標配SSD,微軟的Surface系列電腦也同樣標配SSD。網上有很多文章說,SSD和傳統硬碟不同,它不需要碎片整理,但是需要操作系統支持TRIM,否則用一段時間之後SSD的性能就會下降,而且還會影響壽命。那麼TRIM到底是什麼東西,為什麼SSD需要TRIM而傳統硬碟卻不需要呢?

磁碟、數據和文件系統

要回答這個問題,我們得先了解一下我們的數據是如何存儲的。我們知道,存儲設備(無論是SSD還是傳統硬碟)只負責最底層的物理存儲,並不知道所存儲的數據到底有什麼意義,反正操作系統讓我讀或寫什麼數據我照辦就可以了,就好像一個倉庫裡面有好多庫位,存儲設備只負責把東西放到指定的庫位,或者把東西從指定的庫位拿出來,至於這個東西是屬於哪張訂單的,是要發給誰的,存儲設備並不關心。但是我們在電腦上看到的可不是毫無組織的數據,而是一些有組織的結構,例如分區、目錄和文件,把數據組織起來並進行管理的工作是由操作系統負責的,而操作系統組織和管理這些數據的規範,叫做「文件系統」。文件系統就像一張倉庫的收發貨管理表,它負責管理這些庫位的邏輯意義,比如說15、28、55這三個庫位的東西是屬於同一張訂單的,訂貨人是張三,這三個庫位在物理上並不連續,但通過管理表我們就能夠把它們關聯起來。不同的操作系統所採用的文件系統有所差異,例如較古老的FAT16/32、Windows的NTFS、OS X的HFS+、Linux的ext(ext2/3/4)等等。總結一下,我們需要保存的文件首先會交給操作系統,操作系統根據文件系統所規定的格式將這些數據組織起來,然後交給存儲設備進行保存。

快閃記憶體的困擾:寫入放大

現在我們所使用的大部分文件系統,都是從磁碟存儲(軟盤、硬碟)時代就開始存在的,因此它們的設計也是以磁碟存儲的原理為基礎的,但SSD採用的是快閃記憶體,由於物理原理存在差異,因此傳統的磁碟文件系統用在快閃記憶體上,就可能會產生一些問題,其中最大的一個問題就是「寫入放大」(write amplification)。舉個例子,在大部分磁碟文件系統中,當我們需要刪除一個文件時,操作系統只要將該文件所對應的所有數據塊在文件系統中標記為「空閑」就可以了,根本不需要實際去清除數據塊中存放的數據,因為這樣做沒有意義,這也就是為什麼我們一眨眼的時間就可以刪除一個很大的文件。也就是說,儘管用戶看起來文件被刪除了,但實際上它的數據還留在存儲設備中,只不過操作系統認為這些數據已經作廢了,下次有新數據的時候直接覆蓋掉它們就好了。

現在問題來了,這樣的設計必須建立在一個前提下,即對於物理存儲設備來說,「寫入空白數據塊」和「覆蓋已有內容的數據塊」所需要的操作是完全相同的。上述前提對於磁碟來說是完全成立的,因為磁碟的工作方式跟磁帶差不多,數據的記錄是根據介質上某個記錄單元的磁化方向來完成的。也就是說,在寫入數據時,磁頭只要將指定的記錄單元(扇區)磁化為所需的狀態即可,完全不必關心這個單元原本是怎樣的狀態。然而,上述前提在SSD上卻是不能成立的。因為在SSD中,只有空數據塊才能直接執行寫入操作;而對於非空數據塊,需要先執行擦除操作之後才能進行寫入。

乍看之下,SSD和傳統硬碟的區別僅僅是多了一步擦除操作而已,但實際上並非如此,更要命的還在後頭。在SSD中,數據存儲的最小單位是頁面(page),一個頁面的大小一般是4KB,若干個頁面又被組合成塊(block),一個塊的大小一般是256KB。由於硬體方面的限制,SSD可以單獨對某個頁面進行讀/寫的操作,但擦除操作卻只能對整個塊進行,也就是說,一旦擦除就必須一次性擦除整個塊。現在問題來了,如果一個頁面裡面已經有數據了,就無法直接寫入新數據,但如果要擦除這個頁面,就得把整個塊全都擦除,那麼這個塊裡面其他頁面中的數據也跟著一起擦掉了,這可怎麼辦?

為什麼固態硬碟需要TRIM?

現實中,如果操作系統要讓SSD改寫某個頁面的數據,SSD需要執行這樣的操作:

  1. 1. 將要改寫的目標頁面所在的整個塊的數據讀取到緩存

  2. 2. 在緩存中修改目標頁面的數據

  3. 3. 對整個塊執行擦除操作

  4. 4. 將緩存中的數據重新寫入整個塊中

這就意味著,如果我要修改1個頁面,就必須把整個塊都折騰一遍,實際上相當於寫入了64個頁面的數據——實際搬運和寫入的數據量遠遠超過了需要寫入的數據量,這就是「寫入放大」。我們可以看出,寫入放大不僅影響了SSD的寫入性能,而且還增加了SSD中快閃記憶體晶元的「磨損」,縮短整個SSD的使用壽命。

TRIM是為了讓操作系統和SSD更好地溝通

對於寫入放大,SSD表示一個巴掌拍不響,這不都是我的問題,因為一塊數據在邏輯上有沒有被刪除只有操作系統才知道,SSD本身是不知道的——你看,很多問題其實都是因為溝通不暢而產生的。於是,一些SSD在控制晶元中提供了一個TRIM命令,操作系統在刪除文件時,順便向SSD發送TRIM命令告訴它哪些數據塊中的數據已經不再使用了,SSD在收到TRIM命令後,通常會在定期的垃圾收集操作中重新組織這些區塊,為將來寫入數據做好準備——有了TRIM,SSD就能夠更好地與操作系統相互配合了。儘管每一款SSD在硬體層面對TRIM命令的執行機制都不盡相同,但無論如何,通過TRIM能夠顯著改善SSD的性能和壽命。當然,大家可能也已經發現了,有了TRIM之後,刪除的文件數據會被SSD自動回收,這意味著以往在傳統硬碟上能夠使用的一些數據恢復(反刪除)軟體,在SSD上可能就不再管用了。

既然TRIM如此重要,那麼應該如何啟用呢?一般來說,只要你所使用的操作系統支持TRIM,就無需任何額外的操作。支持TRIM的操作系統:Windows 7及後續版本、OS X 10.6.8及後續版本、Linux內核版本2.6.33及後續版本。對於Windows XP用戶,系統不支持TRIM,可以選擇SSD廠商(如Intel)提供的軟體來實現定期的垃圾回收,模擬TRIM的效果。

治標還要治本:快閃記憶體文件系統

大家可能已經發現了,TRIM實際上只是一個「治標」的辦法,其實產生寫入放大等問題的根本原因在於現有的文件系統是磁碟存儲時代的產物,並不完全適用於快閃記憶體,因此如果要「治本」,就必須開發出適合快閃記憶體的文件系統,也就是「快閃記憶體文件系統」。快閃記憶體文件系統能夠讓操作系統更好地控制和管理SSD等快閃記憶體存儲設備,除了能夠有效避免寫入放大之外,快閃記憶體文件系統還有一些其他的設計,例如磨損均衡和隨機優先等,這些設計都是基於快閃記憶體所獨有的物理特性而來的,因此可謂是「量體裁衣」。儘管從目前來看,由於兼容性等一些原因,快閃記憶體文件系統還沒有得到普及,但隨著今後快閃記憶體存儲設備越來越多,用快閃記憶體文件系統來代替傳統的磁碟文件系統應該說是一個必然的趨勢。

作者寫於2015-10-28
喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 知識百科 的精彩文章:

橄欖油:只是味道好?
喝無糖飲料能減肥嗎?

TAG:知識百科 |