~ read.

如何在 Mac OS X 10.6.7 中啟用 TRIM?


最近因為買了一顆 Intel 320 G3 SSD 120GB 的硬碟,稍微研究了一下,發現如果沒有 TRIM 指令的支援,隨著使用的時間,效能也會大幅度的衰退,於是開始尋找在 Mac 中支援 TRIM 指令的方式,首先先來瞭解到底什麼是 TRIM 指令?

傳統硬碟與 SSD 的差別

解釋 TRIM 以前,得先從硬碟說起,傳統的硬碟,在你刪除資料時,其實並沒有真的做出刪除的動作,而只是做出了一個垃圾標記並且視為可用空間。假設刪除動作之前,磁碟已經塞滿了,做完刪除動作之後,實際上還是滿的。但是因為傳統硬碟的特性,當你下一個寫入進來,硬碟會去尋找那些有標記為垃圾的磁區並且"直接"做覆寫動作。

那麼當現在主流硬碟逐漸轉變為 SSD 的情況下,會發生什麼事呢?其實對 OS 來說,根本沒有傳統硬碟或是 SSD 的差別,所以在上述的情境之下,SSD 也是只做垃圾標記,而不真的清空該磁區(SSD 中應該稱 Memory cell 較好)。好,那你可能會好奇,不是也直接覆寫就好了嗎?當然不是,因為物理特性的不同,SSD 實際上是沒有辦法直接覆寫任何已經寫入資料的區塊的。

舉個例子來說明(參考 wiki):假設現在整個磁碟大小為 512KB,如果你刪除了 4KB,又寫入了 4KB。

  1. 因為 SSD 的物理限制,雖然讀/寫可以以 4KB 為單位(1 page),但是刪除動作卻一次影響 512KB (1 block),只好強迫 SSD 讀取整個 block 到 SSD 本身的快取裡頭。(因為早期 SSD 快取不夠大,整個延遲甚至還會達到 1s)
  2. 然後完全清空 SSD 中的 512KB,並且在快取記憶體中直接做 4KB 覆寫的動作,準備好待會要寫回的 512KB。
  3. 把 block 寫回 SSD 。


這三個步驟通常稱為 read-modify-write ,所以當你使用的時間越久,可用空間就越少。加上光是一個 block 就要一次 read-modify-write 要進行,當你要寫入的檔案數越多、容量越大,也就會有更多 read-modify-write 要進行,會大大地使效能衰退。

SSD 救星:TRIM 指令

那麼該怎麼解決這個問題呢?解法有兩種:

一、定期做回收垃圾:(就像我們平常會對傳統硬碟做重組動作一般),把所有標記垃圾的 Memory cell 都彙集在一起,並且對這整塊做完全清空的動作。

二、TRIM 指令:上述的作法雖然可行,但不甚理想。試想,read-modify-write 的影響這麼大,SSD 跟 OS 廠商當然不可能坐視不管,幾乎在 SSD 推出到市場不久之後,就陸續地支援了 TRIM 指令。TRIM 指令就是當你刪除資料之後,SSD 會背景執行徹底清空的動作。這概念非常的直覺簡單,因為清空這個動作,不管什麼時候都要做,那麼就提前在每次刪除後就做,不但不會影響原本的使用壽命,也會維持 SSD 理論上最高的效能(記住:TRIM 指令不會讓 SSD 變快,而是不會讓它變慢)。

沒有 TRIM 指令支援會衰退到什麼程度?

相關的比較可以參考這裡,我只從中抓取出跟我比較相近的 Intel G2(這也是實驗之中衰退幅度最大的…)。

透過大量的讀取/寫入,發現:
1. 在循序讀取下,G2 會衰退 51% 到只剩下 127MB/s 的效能。
2. 在循序寫入下,G2 甚至會衰退 72% 到只剩下 22.92MB/s ,比 USB 隨身碟還慘的效能!
3. 存取時間從 0.06ms 增長到 0.946ms,慢了十五倍之多!
4. 隨機讀取下,幾乎是不會影響效能。
5. 隨機寫入則會衰退 82% 到只剩下 7.06 MB/s 的慘況。(不會這還不是最慘的,Corsair P128 128GB 只剩下 1.11 MB/s…)

啟動 TRIM 支援

多數的作業系統很早就支援了 TRIM,而 Mac OS X 直到 10.6.7 才開啟對其可自行選購升級的(Apple-bundle) SSD 支援 TRIM…正式的對所有 SSD 裝置都支援理想上最快也要到 Lion 才有機會了。

不過還是有許多厲害的 hacker 發現了強制打開 TRIM 支援的方式,更有人把它包裝成 Patch ,只要簡單的按一下,你的系統就可以快樂地使用 TRIM 指令了。不過要小心的是,因為這種是強制啟用,事實上也沒有人可以保證會不會影響資料的正確性,建議還是先備份之後再決定要不要開啟。

comments powered by Disqus