SSD 上的 TRIM 和文件碎片

SSD 上的 TRIM 和文件碎片

我跑了修剪測試提議者弗羅斯特舒茨並且還發現這裡。結果 1MB 檔案高度碎片化。怎麼可能 ?

我唯一的儲存裝置/dev/sda是三星 500GB SSD。它是“TRIM-ready”並且內核附帶了一個fstrim可執行檔/etc/cron.weekly。儘管如此,出於好奇,我還是想進行測試。該測試產生了一個 1MB 文件,trim.test,其中填充了y字母字元。

創建文件後,我檢查了文件在磁碟上的確切位置:

> cd /
> yes | sudo dd iflag=fullblock bs=1M count=1 of=trim.test
> sudo filefrag -s -v trim.test

Filesystem type is: ef53
Filesystem cylinder groups approximately 177
File size of trim.test is 1048576 (256 blocks of 4096 bytes)
 ext:     logical_offset:        physical_offset: length:   expected: flags:
   0:        0..      15:    2816076..   2816091:     16:             merged
   1:       16..      31:     170064..    170079:     16:    2816092: merged
   2:       32..      63:     170848..    170879:     32:     170080: merged
   3:       64..     127:     168269..    168332:     64:     170880: merged
   4:      128..     255:     170112..    170239:    128:     168333: merged,eof
trim.test: 5 extents found, perfection would be -1 extent

如果我刪除該檔案並重複該過程,則會重複此過程。一個 1MB 的檔案怎麼會碎片如此嚴重?

答案1

在窺探並閱讀了 TRIM 和碎片問題之後,回答我自己的問題可能對其他人有幫助。

在閱讀 TRIM 時,經常會提到文件碎片。這兩個方面都是有關 SSD 儲存效能的合理問題的根源,但這兩個問題是不同的。

  • 文件碎片包括使用分佈在分區內儲存媒體上的實體區塊將一個檔案寫入到許多不同的非連續寫入區域中的 HDD 或 SSD。在SSD的特定背景下,我們會看到它與TRIM的操作甚至與TRIM的儲存管理層級無關,但它與磨損均衡(WL),SSD 中始終存在的另一個低階儲存媒體管理流程(與 TRIM 不同)。 SSD 中的內部資料管理與HDD 的內部資料管理有根本的不同,在於其將磁區分配給非揮發性快閃單元(即SSD 的單元)及其對應的區塊(快閃記憶體區塊)。它與文件碎片有直接關係。
  • 修剪在 SSD 上為新的寫入操作 (Wop) 準備至少一次寫入的實體區塊,從而無需在 Wop 發生之前立即實際擦除目標區塊(就像在沒有 TRIM 的設定中的情況一樣)。為此,SSD 必須具有支援 TRIM 的硬體控制器。但情況並非總是如此。在第一階段使用之後(即當 SSD 仍然相對較新且其所有區塊尚未至少寫入一次時),Wops 會減慢直至達到速度穩定水平。在此階段,經驗法則是,與未啟用 TRIM 的相同硬體相比,TRIM 就緒 SSD 的寫入時間大約減半。

在 Wops 期間,SSD 的行為與 HDD 截然不同。 HDD 永遠不需要在 Wop 之前擦除區塊。 SSD 總是如此,而且非常耗時。 TRIM 透過在支援 TRIM 的 SSD 上預處理最近釋放的區塊來幫助減少時間消耗,本質上是透過預先擦除檔案被修改並移動到磁碟區的不同區域後釋放的區塊。這是現實的簡化視圖,但非專家使用者可以粗略地依賴它來開始做出有關硬體和低階硬體管理的決策。繼續閱讀...

TRIM與SSD的碎片有關嗎?
- 簡短回答:不,它們沒有關係。
- 長答案:碎片與磨損均衡(WL)有關,但是其他優化 SSD 使用壽命的過程。 WL 對於在磁碟區/分區內的整個 SSD 的空閒/可用/未保留區塊空間上均勻化 Wops 至關重要。之所以這樣做,是因為每個 Wop 都會透過在半導體層的微小區域上施加相對較大的電壓來使相應 SSD 的單元老化,從而縮短其使用壽命。 (我相信,這與大部分 SSD 中引入的熱誘導缺陷有關,但這不是主題。)

如果像在 HDD 上一樣在 SSD 上管理 Wop,則儲存媒體的某些區域會先於其他區域磨損,從而導致不可操作的區塊、容量損失、資料遺失和錯誤。 WL 實際上確保任何給定 SSD 分區中的所有區塊都受到相同數量的 Wops,並且整個 SSD 可用分區空間的磨損「均衡」。從這個意義上說,它有效地延長了 SSD 的使用壽命,同時保持其全部容量直至其報廢。

有兩種 WL 模式:靜態和動態。這維基百科(德語)指定與關閉 WL 的相同硬體相比,SSD 壽命結束時的寫入週期計數對於靜態 WL 可能增加 100 倍,對於動態 WL 可能增加 25 倍。

由於 WL 在物理上將 Wops(定義 SSD 壽命的限制參數)盡可能均勻地分佈在分區內的整個 SSD 儲存空間上,因此不可避免地會導致資料碎片。這樣做是為了實現在任何給定 SSD 分區中優化寫入區塊分佈的主要目標。人們普遍認為,儲存在 SSD 上的任何檔案都可能比傳統 HDD 上的檔案碎片更多。然而,碎片並不會導致 SSD 效能下降。

WL 的運作方式還有其他推論:SSD 容量越大,在給定使用條件下其使用壽命就越長。對於使用者而言,「使用條件」主要意味著:
- SSD 分區上的已使用空間量以及
- Wop 頻率,即儲存媒體的寫入存取量。
這實際上可能有利於:
- 將 lx swap、/home、/tmp 和 /var 放在 HDD 上,而作業系統的其餘部分可以在較小的 SSD 上正常運作。
- 不要在 SSD 上創建太小的任何包含大量 Wops 的分區。例如,如果交換必須位於 SSD 上,並且您讀到 lx-swap 最好設定為 DRAM 大小的兩倍,則將其設為 4 倍。我不知道我的算術是否正確,但總體思路是,這也會或多或少地使交換空間的壽命加倍。如果您執行大量需要交換的操作(資料庫使用率很高的伺服器等),請考慮將交換和/tmp 移至 HDD 上,當然,除非您喜歡將瓦斯燃燒器轉移到 SSD 上。

同時,TRIM 為任何即將推出的新 Wop 準備 SSD 區塊。它透過擦除這些單元(實際上操作發生在區塊層級)並啟動來為新的 Wop 預先調節一旦寫入的單元垃圾收集需要的時候。從這個意義上說,TRIM 密切關注新釋放的(並且至少使用過一次)區塊的分佈圖,因為它們由 WL 控制器進行低階管理。

結論:

  • 碎片化也無所謂。這不會損害 SSD 的效能。 SSD 不需要(請參閱英特爾關於 SSD 的演講)它們也不會從碎片整理形式的內務處理中受益。無論您使用哪種作業系統,請關閉碎片整理功能。現在。
  • 如果 SSD 已準備好 TRIM,則 TRIM 非常重要且有益。如今,少數品牌提供支援 TRIM 的 SSD。如果您從一開始就閱讀了這篇文章,那麼您至少知道其中一個知名品牌的名稱。同樣在幾年前,ext2 被認為是比 ext3 更好的選擇,因為日誌實際上違背了使用第一代 SSD 時 TRIM 帶來的一些好處。現在情況不再是這樣了,ext4 實際上建議使用 TRIM + 垃圾收集。

HTH。

相關內容