複製鏈接
請複製以下鏈接發送給好友

Trim命令

鎖定
Trim命令(ATA命令集中稱為TRIM,SCSI命令集中稱為UNMAP),它使操作系統能通知固態硬盤(SSD)哪些數據塊已不再考慮使用,可以被內部擦除。
Trim在SSD被推出後很快被跟着推出。因為SSD的底層操作與硬盤驅動器顯著不同,操作系統處理諸如刪除和格式化等操作的典型方式將導致SSD上的寫操作不可預期的逐步性能退化。Trim(意為修整、修剪、裁剪)使SSD能更有效地處理垃圾收集,否則將減慢在未來對所涉及塊的寫入操作。
儘管在引入Trim前已有將某些驅動器“重置”為新狀態的工具,但它們也將刪除該驅動器上的所有數據,從而使這些工具和技術不能用於持續性優化。在2014年,許多SSD有內部的後台垃圾收集機制,它們與修整工作相獨立。儘管這在不支持修整的操作系統上也成功地保持了性能,它存在增加寫入放大和閃存單元磨損的相關缺點。
中文名
Trim命令
外文名
Trim (computing)
領    域
計算機

Trim命令閃存磁盤驅動器特有的問題

因為許多文件系統以標記數據塊為“未使用”來處理刪除操作,存儲介質(傳統硬盤、SSD)通常不知道哪個扇區/頁是真在使用,哪些可被認作空閒空間。因此與重寫操作不同,刪除將不涉及對數據所在扇區的物理寫入。由於通用SSD不瞭解文件系統結構(例如未使用的塊/扇區的列表),存儲介質無法獲知哪些塊已經變為可用。這使反刪除工具能從傳統的機械硬盤上恢復文件,因為儘管操作系統報告文件已被“刪除”,文件所在的扇區只是在操作系統之後進行寫入時作為空閒空間的扇區,從而有效使操作變得像重寫操作。對於機械磁盤來説,這與寫入空扇區沒有區別,但因為SSD最底層的一些特性,與將數據寫入空頁面相比,重寫會有顯着的開銷,從而潛在地削弱寫入性能。
SSD在閃存單元中通常以4至16kB的分組來存儲數據,並將分組組合成128至512頁的塊。例如,512kB以4kB為一頁存儲在128頁的塊中。NAND閃存單元只能在處於空狀態時寫入。如果它們可能包含數據,則執行寫操作前必須擦除其內容。一次SSD寫入操作可以只完成單個頁,但由於硬件限制,擦除命令始終會影響整個塊;因此將數據寫入到SSD上的空頁非常快,而寫入存在數據的頁就會顯著變慢。由於頁被再次寫入前需要擦除單元,但擦除只能對整個塊,改寫將按“讀取、擦除、修改、寫入”的方式完成;整個塊的內容會先存儲在緩存中,然後在SSD中擦除整個塊,再將改寫的頁寫入到緩存的塊,最後再將更新的塊寫入閃存介質。這種現象也稱寫入放大 [1] 

Trim命令操作

TRIM命令使操作系統得以通知SSD哪個頁不再包含有效的數據。對於文件刪除操作,操作系統會將文件刪除標記為可用於新數據,然後向SSD發送TRIM命令。在Trim後,在新的數據寫入閃存頁面時,SSD不保留塊的任何內容,從而實現更少的寫入放大(更少的寫入)、更高的寫入吞吐量(不需要讀取、擦除、修改),從而增加驅動器壽命。
不同的SSD實現的命令有所不同,因此性能可能也有所差異。
Trim為不可逆地擦除數據,無法恢復;這不同於機械硬盤中被刪除的數據可能被數據恢復 [1] 

Trim命令實現

Trim命令操作系統支持

Trim僅在支持它的操作系統上有效。下表列出了各個重要的操作系統支持該命令的首個版本。此外,在TRIM命令添加到高技術配置標準之前設計的舊款固態驅動器需要更新固件(如果有)才能支持Trim,否則將忽略這個新命令。

Trim命令RAID問題

截至2017年1月,大多數基於硬件的RAID技術未實現TRIM命令的支持。但是,軟件實現的RAID通常提供了TRIM支持。
Windows:
Windows 10為SSD RAID卷在配置一個RAID卷時通過“優化驅動器”選項提供了TRIM支持。
Mac OS:
macOS RAID驅動程序不支持TRIM。自Mac OS X 10.7至macOS 10.12.x的所有版本均是如此。
對於使用第三方SoftRAID®應用程序的RAID(0,1,4,5和10)卷支持TRIM,包括使用非蘋果品牌SSD設備的TRIM支持。 (注:非蘋果品牌的SSD設備必須使用終端命令“sudo trimforce enable”來啓動TRIM)
Linux:
2011年1月以後的Linux內核中dmraid的發佈版本已實現BIOS輔助的“假硬件RAID”支持,並且通行來自RAID陣列上的文件系統的任何TRIM請求。
不同於dmraid,Linux的常規目的軟件RAID系統mdraid有實驗性的基於批處理(而不是在文件刪除時實時)的TRIM,當系統配置為定期在RAID 1陣列上的文件系統上運行mdtrim實用工具(包括ext3等沒有原生TRIM支持的文件系統)。在Linux的稍晚版本(例如Red Hat Enterprise Linux 6.5和beyond)中 mdraid支持實時、實際傳遞TRIM命令,而不是作為一個批處理作業。
但請注意,紅帽公司建議不要在大多數RAID技術的SSD上使用軟件RAID 1、4、5和6,因為大多數RAID管理實用工具(例如Linux的mdadm)在初始化期間會在設備上寫入所有塊以確保校驗和(或RAID 1/10情況下的驅動器到驅動器驗證)運作正常,而這導致SSD認為除備用區域以外的所有塊都在使用中,從而顯著降低性能。
另一方面,Red Hat推薦在SSD上為LVMRAID使用RAID 1或RAID 10,因為這些級別支持TRIM(在Linux術語中稱為"discard"),並且LVM實用工具在創建時不會寫入所有塊到RAID 1或RAID 10卷。
在2010年3月的一小段時間內,用户被誤導相信英特爾快速存儲技術(RST)9.6驅動程序支持RAID捲上的TRIM,但後來英特爾澄清説,TRIM支持AHCI模式和RAID模式的BIOS設置,但不支持RAID卷的驅動器。
截至2012年8月,英特爾確認,使用Rapid Storage Technology(RST)11.2驅動程序的7系列芯片組支持微軟Windows 7中的RAID 0的TRIM。雖然英特爾沒有確認支持6系列芯片組,RAID 0捲上的TRIM已展示為在Z68、P67和X79芯片組上可用,通過由硬件發燒友修改的RAID選項ROM。據推測,缺乏對6系列芯片組的官方支持是由於驗證成本或企圖鼓勵消費者升級,而不是出於技術原因。
在使用X79芯片組的主板上需要修改選項ROM的例外是製造商添加了ROM開關;這需要RST和RST-E ROM存在於BIOS/UEFI內。這允許使用RST ROM而不是RST-E ROM,從而允許TRIM工作。英特爾指出,使用與ROM版本相同的驅動程序可以實現最佳性能。例如,如果BIOS/UEFI具有11.0.0.0m選項ROM,則應使用11.x版本的驅動程序。

Trim命令為不支持的操作系統使用

在使用不支持自動TRIM的文件系統時,某些實用工具可以手動發送Trim命令。通常它們將確定哪些塊為空閒,然後將該列表以一系列的Trim命令傳遞給驅動器。這些實用程序可從各製造商(例如Intel、G.Skill)或作為一般實用程序(例如Linux的hdparm自v9.17起,或者如上所述的mdtrim)。 [1] 

Trim命令硬件支持

Trim命令高技術配置

TRIM命令規範已被標準化為AT Attachment接口標準的一部分,由國際信息技術標準委員會(INCITS)的技術委員會T13所領導。TRIM根據D高技術配置 SET MANAGEMENT(數據集管理)命令(操作碼06h)實現,ACS-2規範草案。高技術配置標準被並行(IDE、P高技術配置)和串口(S高技術配置)高技術配置硬件所支持。
原版高技術配置 TRIM命令的缺點是它被定義為不可排隊命令,因此不能輕鬆地與正常的、排隊的讀和寫操作混合。S高技術配置 3.1引入了一個排隊的TRIM命令來糾正這一點。
高技術配置 IDENTIFY DEVICE命令返回的S高技術配置 Words 69和169定義了不同類型的TRIM。
  • 非確定性TRIM:TRIM後每個對邏輯區塊地址(LBA)的讀取命令可能返回不同的數據。
  • 確定性TRIM(DRAT):TRIM後對LBA的所有讀取命令都返回相同的數據,或者變為確定的。
  • TRIM(RZAT)後確定性讀零:TRIM後對LBA的所有讀取命令都將返回零。
在S高技術配置字105中有額外信息,描述驅動器可以在每個數據集管理命令(D高技術配置 SET MANAGEMENT)支持最多多少個512字節的數據塊。通常此值默認為8(或4kB),但許多驅動器將其減少到1,以滿足微軟Windows硬件要求對TRIM的部分——該命令完成時間不應超過20 ms或者8 ms × (LBA範圍項的數量),且兩者中的較大者應始終小於600 ms。
各LBA範圍被稱為一個LBA範圍條目,並由八個字節表示。 LBA由LBA範圍條目的前6個字節表示,範圍長度是由剩下兩個字節表示的一個從零開始的計數器。如果兩個字節組成的範圍長度為零,那麼LBA範圍條目應視作填充而丟棄。這意味着以512字節為TRIM塊範圍支持的設備,該最大值為64個32 MB,也就是2 GB。如果設備在S高技術配置字105處設為8,則它應該能在單個TRIM(數據集管理)命令中修整16GB。

Trim命令SCSI

SCSI提供了UNMAP命令(TRIM的完全模擬),以及帶有UNMAP標誌集的WRITE SAME命令(10和16個變量)。

Trim命令SD/MMC

多媒體存儲卡和SDERASE(CMD38)命令提供了與高技術配置 TRIM命令類似的功能,但它要求擦除的塊用0或1重寫。eMMC 4.5進一步定義了一個“discard”(丟棄)子操作,從而更緊密的配合高技術配置 TRIM,因為丟棄的塊的內容可以被認為是不確定的(即“不在乎”的)。 [2] 

Trim命令缺點

  • 在使用加密時,TRIM命令的相關信息將揭露哪些塊正在使用,哪些沒有。
  • TRIM命令的原始版本已被T13小組委員會定義為非排隊命令,因此執行不當可能造成大量的錯誤執行。例如,如果它在操作系統的每個刪除命令後發出,該命令的非排隊性質將要求驅動程序先等待所有未完成的命令完成,然後發出TRIM命令,最後再繼續正常命令。TRIM可能需要很長時間才能完成,這取決於SSD中的固件,並還可能觸發垃圾收集週期。這種缺陷可以用定期執行批量TRIM的解決方案來最小化,而不是在每次文件刪除時執行修剪,批量處理任務可以在系統利用率最小時調度。這項TRIM缺點已在Serial 高技術配置修訂3.1中解決,其中引入了排隊的TRIM命令。
  • 排隊的TRIM命令已在多款設備中涉及嚴重的數據損壞,最顯著的是Micron的M500、Crucial的M500、以及Samsung 8**系列。在2015年7月1日,Linux操作系統在這些設備上的數據損壞已得到確認。
這些設備已被列入Linux內核中libata-core.c的黑名單,從而強制發送非排隊的TRIM命令到這些設備,而不是排隊的TRIM命令:
  • Micron M500,所有固件版本(僅MU07之前有此問題,但Linux尚未跟進)
  • Crucial M500,所有固件版本,包括工廠重新認證的SSD(僅MU07之前有此問題,但Linux尚未跟進)
  • Micron M510,固件版本MU01
  • Micron M550,固件版本MU01
  • Crucial M550,固件版本MU01
  • Crucial MX100,固件版本MU01
  • 三星SSD 8**系列,所有固件版本
此文件也已將SuperSSpeed S238列入常規TRIM的黑名單,因為發出TRIM會導致錯誤的塊丟失數據。
libata-core.c還有一個列出子系統維護者已確認正確實現DRAT和RZAT標誌(flags)的SSD,這不同於許多忽略它們的驅動器。白名單中的設備如下:
  • Crucial多款SSD
  • Intel多款SSD(不包括Intel SSD 510)
  • Micron多款SSD
  • 三星多款SSD
  • 希捷多款SSD [3] 

Trim命令ATA配置

ATA(英語:Advanced Technology Attachment,簡稱“ATA”)與由集成驅動電子設備(英語:Integrated Drive Electronics,簡稱IDE)技術實現的磁盤驅動器關係最密切。
IDE是一種計算機系統接口,主要用於硬盤和CD-ROM,本意為“把控制器與盤體集成在一起的硬盤”。數年以前PC主機使用的硬盤,大多數都是IDE兼容的,只需用一根電纜將它們與主板或適配器連起來就可以了,而主要接口為SATA接口。而在SATA技術日益發展下,沒有ATA的主板已經出現,而且Intel在新型的芯片組中已經不默認支持ATA接口,主機版廠商需要另加芯片去對ATA作出支持(通常是為了兼容舊有硬盤和光盤驅動器)。
SATA(Serial ATA)於2002年推出後,原有的ATA改名PATA並行ATA配置Parallel ATA)。2013年12月29日,西部數據正式停止PATA硬盤供應,而希捷科技則已停售產多年,這意味着1986年設計的PATA接口在經歷27年後正式退出歷史舞台。 [1] 

Trim命令小型計算機系統接口

小型計算機系統接口(SCSI,SmallComputerSystemInterface)是一種用於計算機及其周邊設備之間(硬盤、軟驅光驅打印機掃描儀等)系統級接口的獨立處理器標準。SCSI標準定義命令、通信協議以及實體的電氣特性(換成OSI的説法,就是佔據物理層、鏈接層、套接層、應用層),最大部分的應用是在存儲設備上(例如硬盤、磁帶機);但,其實SCSI可以連接的設備包括有掃描儀、光學設備(像CD、DVD)、打印機……等等,SCSI命令中有條列出支持的設備SCSI周邊設備。理論上,SCSI不可能連接所有的設備,所以有“1Fh - unknown or no device type”這個參數存在。 [1] 

Trim命令參見

  • 數據殘留
參考資料
  • 1.    Malventano, Allyn (13 February 2009). "Long-term performance analysis of Intel Mainstream SSDs". PC Perspective. Retrieved 10 February 2012.
  • 2.    "How to enable TRIM?". Ask Ubuntu. Retrieved 11 November 2015.
  • 3.    "Possible to get SSD TRIM (discard) working on ext4 + LVM + software RAID in Linux? - Server Fault". Retrieved 2011-11-29.