TRIM
TRIMコマンド(ATAコマンドセット:TRIM、SCSIコマンドセット:UNMAP)は、オペレーティングシステムからソリッドステートドライブ(SSD)の未使用領域を内部的に消去するために用いられるコマンドである。
SSDの登場から間もなくTRIMコマンドが登場した。 SSDへのハードウェア的な操作は、従来のハードディスクドライブとは大きく異なるため、オペレーティングシステムから削除やフォーマットなどの操作を従来通り行った場合に、書き込み操作で予期せず段階的なパフォーマンス低下が発生した。TRIMの実行により、SSDはガベージコレクションをより効率的に処理できる。実行しない場合は、書き込み動作が遅延する可能性がある。
一部のドライブにおいては、工場出荷状態にリセットするツールは、TRIMの導入前から存在していたが、ドライブ上のすべてのデータも削除されるため、使用中に最適化のために使用することは現実的ではない 。また、2014年までには多くのSSDに対し、TRIMとは独立して機能する、バックグラウンドガベージコレクションメカニズムが搭載されるようになった。これにより、TRIMをサポートしていないOSでもパフォーマンスが維持できるようになったが、 ライトアンプリフィケーションが発生しやすくなる上、フラッシュセルの寿命を縮める欠点が存在した。
ファイルシステムが自動的にTRIMをサポートしない場合でも、一部のユーティリティではTRIMコマンドを手動で送信できる。通常、ユーティリティが使用されていないブロックを判別し、リストをコマンドとしてドライブに渡す。このようなユーティリティは、複数のメーカーが提供している(例: Intel、G.Skill )。また、一般的なユーティリティ(例:Linuxのhdparm(英語版)v9.17以降の"wiper" 、mdtrim)としても提供されている。hdparmとmdtrimはいずれも、ファイルシステムに大きなファイルを割り当て、割り当てられている物理的な場所を解決することにより、空きブロックを検索する。
TRIM後の確定的読み取りゼロ(RZAT):TRIM後のLBAへのすべての読み取りコマンドはゼロを返す。
SATAワード105には、ドライブがサポートできるDATA SET MANAGEMENTコマンドごとの512バイトブロックの最大数を示す追加情報が存在する。 通常、これはデフォルトで8または4 kBとなっているが、多くのドライブでは1として、TRIMのMicrosoft Windowsハードウェア要件に存在する、コマンド完了時間が20ミリ秒または8ミリ秒×LBA範囲エントリ数のいずれか以上かつ600ミリ秒未満でなければならないという条件を満たすようにしている。
個々のLBA範囲はLBA範囲エントリと呼ばれ、8バイトで表現される。LBA自体は、LBA範囲エントリの最初の6バイトで表され、範囲長が残りの2バイトで表されている。範囲長のビットがすべてゼロの場合、LBA範囲エントリはパディングとして破棄される。つまり、1回のTRIM範囲で最大で32 MBの64倍すなわち2GBが指定される。デバイスがSATAワード105で8をサポートしている場合、1回のTRIM(DATA SET MANAGEMENT)コマンドで16 GBをトリムできることとなる。