Trimコマンド

+クリックで展開
Trim コマンドとは

  • 通常ファイルシステム上ではファイルを削除してもファイルシステム上のインデックスが削除されるだけでファイル本体のバイナリは残ったままになる。SSD はファイルシステムを認識できないのでこの不要なバイナリは新たなファイルで上書きされるまで残るが、このファイルシステム上で削除された不要なバイナリが記録されているアドレスを SSD に通知することで速度低下防止や NAND フラッシュメモリの余計な消耗を阻止する効果が期待出来る。但し Trim コマンドによって受け取ったファイルシステム上不要なアドレスの範囲をどう処理するかは SSD メーカーの任意となっており、Trim コマンドが有効な状態でも速度低下が大きい SSD もある。Trim コマンドが有効でさえあれば SSD の様々な問題が全て片付く訳ではなく、やはり Trim コマンドの効果は SSD (ファームウェア) の設計次第である。
  • 参考:DOS/V Power Report - SSDの性能低下とTrimの効き具合を大検証!

Trim コマンドの制限



  • 以上のような環境 (RAID 環境、Trim コマンド発行時の I/O スループット低下が問題になる環境、その他 Trim コマンドが使用不能な環境) では Trim コマンド無しでも速度低下しにくい東芝製か SLC かつ予備領域の割合が高いエンタープライズ向け SSD が必須である。



Trim コマンドを使用するには
①Trim コマンドを発行する OS か Trim コマンド発行ユーティリティ(とそれらに対応したファイルシステム)を使用し
②Trim コマンドサポートしているドライバを使用する必要がある。

①の Trim コマンド発行をサポートしている OS 例
  1. Windows 7 / Server 2008 R2 以降 (+ NTFS)
  2. Linux カーネル 2.6.33 以降 (+ ext4)
  3. Open Solaris
  4. FreeBSD 8.1/8.2 以降
  5. MAC OS X ver 10.6.6 (+ HFS Plus)。但しデフォルトではデバイスネーム先頭 9 文字が「APPLE SSD」になっている SSD (つまり純正 SSD) に対してのみ有効になっている。

  • Trim コマンドをサポートしない Windows XP や Vista のようなレガシー OS でも以下のようなユーティリティを使用する事で条件や制限は付くものの Trim コマンドを使用することが出来る場合もある。但しこれらの Trim 発行ユーティリティもそれぞれ特定のファイルシステムにしか対応していない。(SSD TOOL BOX ではダイナミックボリュームではない NTFS 限定、等) また、Trim 対応のドライバでないと動作しない可能性もある。(SSD TOOL BOX では記載されているが Wiper.exe、SSD Magician は特に記載なし)
Intel の SSD TOOL BOX (Windows XP 以降 + Intel 製 X25-M G2 以降の SSD のみのサポート)
OCZ の Wiper.exe (Windows XP 以降 + OCZ の Indilinx 搭載 SSD (Vertex) のみサポート)
G.SKILL の Wiper.exe (Windows XP 以降 + G.SKILL の Indilinx 搭載 SSD (Falcon) のみサポート)
hdparm-9.17 以降 (Linux 用、全ての Trim 対応 SSD をサポート)
Samsung の SSD Magician (Windows XP 以降 + Samsung 470シリーズのみサポート)

②の Trim コマンドをサポートしている Windows 用ドライバの例
  1. Windows 7 標準の Microsoft AHCI ドライバ
  2. Windows 7 標準の Microsoft IDE ドライバ
  3. Intel チップセット環境のみで使用できる IRST 9.6.0.1014 以降
  4. AMD チップセット環境のみで使用できる Catalyst 10.11 以降 (AMD AHCIドライバ 1.2.1.275 以降)
  5. Marvell 91xx 用ドライバ v1.0.0.1051 以降
  • これらの Trim 対応ドライバは動作が確認できたもののみを掲載しており、これ以外のドライバが Trim 非対応であるという意味ではない。Trim コマンドの効果はドライバと SSD の組み合わせによって異なり、SandForce と Microsoft AHCI ドライバ では効果が低い。原因は不要なアドレスの通知方法がドライバによって異なる事が原因のようだ。また Indilinx Barefoot と AMD AHCI ドライバ の組み合わせも Marvell 製ドライバに比べやや効果が低い。IMSM 8.x~ IRST 9.5 は Trim コマンドには対応しているが、Windows 7 の Trim コマンド発行に対応していない為、Intel SSD TOOL BOX と併用しない限り Trim コマンドを使用出来ない。(参考、PDF)



Windows 7 の Trim コマンドの有効・無効化・状態確認方法
  • Windows 7 環境で Trim コマンドが発行されているかどうかの確認方法は以下の通り
1,管理者権限でコマンドプロンプトを開く
2,"fsutil behavior query DisableDeleteNotify"と入力して Enter
3,"DisableDeleteNotify = 0"と表示されたら有効、1なら無効になっている
4,仮に無効になっていた場合は"fsutil behavior set DisableDeleteNotify 0"と入力して Enter で有効化
 (逆に無効化したい場合は"fsutil behavior set DisableDeleteNotify 1"で Enter)

  • あくまで Windows 7 が Trim コマンドを発行しているかどうかの確認であって、ドライバや SSD が Trim コマンド非対応の場合は効果は無い。Windows 7 は Trim コマンド非対応の HDD や SSD に対しても常に Trim コマンドを発行しており、Windows 7 が Trim コマンドを発行しているからといって SSD 側が Trim コマンドを受信し SSD 内部で何らかの効果を発揮しているとは断定出来ない。エンドユーザーレベルでは実際に SSD が Trim コマンドを受け取った後に内部で何らかの処理をしているかどうかを確実に確認する方法は無く、Trim コマンド発行後に SSD に何らかの挙動の変化があるかを観察する事である程度推測が出来るだけである (SSD によっては Trim コマンド発行後に速度低下が回復したり Trim をきっかけに GC を行うため発行後暫く I/O スループットやレイテンシに変化がある場合がある)。仕組み上は IDENTIFY DEVICE 情報の Trim コマンド対応ビットが有効化されているだけで、Trim コマンドを受け取っても内部で何の処理もしないという事も可能。(RealSSD C300 FW:0001 等はこの可能性がある)
  • procmon 2.91 を使用した Windows 7 の Trim コマンドのモニタリング方法 (OCZ Forum より)
  • Force Trim ツール (強制 Trim) - Windows 7 環境で Windows 7 ネイティブの Trim 発行が有効な環境でのみ効果を発揮するツール。ドライブの空き領域をダミーデータで埋めた後に削除する事で Windows 7 の Trim コマンド発行を誘発する。同じ原理のツールが複数確認されている。Windows XP や Vista では全く効果は無い。OCZ フォーラム - Here's a tool to force-TRIM your entire driveSSDTOOL.exe (Crucial フォーラムより、直リン)

Windows 7 で TRIM コマンドを発行するケースの例 (SSD TOOL BOX 等のユーティリティや他の OS では発行するタイミングが異なる)

パーティションの3分の2以上を使用した状態でファイルを(本当に)削除した場合
ゴミ箱を空にした場合
パーティションを削除した場合
  • 等に Trim コマンドを発行し、
ファイルをゴミ箱に移動した場合
パーティションをフォーマットした場合(たとえフルフォーマットでも)
空のパーティションを削除した場合
  • には Trim コマンドが発行されない事になっている。

ファイルを削除した場合
パーティションをフォーマットや削除した場合
ファイルの上書きや圧縮 (によってファイルサイズが変化) した場合
システムの復元 (スナップショット)
  • 等に Trim コマンドを発行すると説明されている。



Linux カーネル 2.6.33 以降での Trim コマンド発行 (Block Discard) 方法
  • ext4 をマウントする際に "discard" オプションを指定する。これだけ。ログ等は出力されない。こちらで公開されているスクリプトを使用する事で挙動を確認可能。※ファイルシステムは今のところ ext4 のみの対応。
  • 対応ディストリビューション
Fedora core 13 以降
Ubuntu 10.10 以降
Red Hat Enterprise Linux 6.0 以降
CentOS 6.0 以降
等


Mac OS X 10.6.6 での Trim コマンド発行方法
  • 現状はデバイスネームの先頭9文字が"APPLE SSD"に一致する機種 (つまり純正 SSD) のみの対応だが、TRIM Support Enabler for Mac を使用する事で全ての機種に Trim コマンドを発行できる状態になる (IOAHCIFamily.kext のバイナリ中に "APPLE SSD" という文字列があり、これを "000000000" で埋めると全ての機種に対して Trim コマンドを発行出来る状態になるが、これを自動で行うツール)。このツールには不具合がある可能性がある為、トラブルを自己解決できる人のみ使用すること。

1、シングルユーザーモードで起動する (command/Appleキー + Sキーを押しながら起動) 
2、コマンドラインにて "fsck -ffy" と入力し リターンキーを押す
3、"reboot" と入力しリターンキーを押すと通常のマルチユーザーモードで再起動する

AHCI モードと IDE モード

+クリックで展開
  • IDE モードは通常のパラレル IDE とコマンドの互換性がある (エミュレーション) モードで、AHCI モードは SATA2 で定義された NCQ やホットプラグやスタッガードスピンアップ、ポートマルチプライヤー対応等の新機能 (これらの機能はメーカーが選択的に採用するかを決定出来るため、SATA2 対応 HDD/SSD であっても機種によって対応していない場合がある) をサポートする IDE とは全く互換性の無い動作モードで両モード時は物理的に同じ SATA ポートであってもそれぞれ別のホストコントローラとして OS に認識される。通常 BIOS で両モードの切り替えが可能。オンボード RAID 付きのマザーの場合は更に RAID モードも選択できる。RAID モードのポート・RAID カードに接続していて RAID ボリュームの一部でないドライブは AHCI 同等の動作モードとなる。メーカー製 PC では IDE/AHCI いずれか片方しかサポートしていない場合がある。以下は Windows OS でのモード切替方法だが、他の OS でもそれぞれのモードに対応した別々のドライバが必要になる可能性がある。最近は HDD も SSD も AHCI モードに最適化されており、AHCI モードでないと公称速度が出ない場合が多いので特殊な理由が無い限りは AHCI モードで使用するべきである。

IDE モードから AHCI モードに変更するには (Windows 2000~XP の場合)
  • Windows XP 以前では OS による AHCI のサポートは無い。SATA コントローラーチップのメーカーが AHCI モードに対応したドライバを配布している時のみ AHCI モードの使用が可能。ドライバが入手できた場合、まずドライバをインストールし再起動し BIOS 設定画面にて AHCI モードに変更した後 OS を起動する事で AHCI モードに変更が出来る。AHCI モード接続の SATA デバイスに新規に OS をインストールする場合はインストール画面で F6 キーを押し対応したドライバを FDD で読み込ませる必要がある (nLite 等でドライバ統合済みのインストールディスクを作成する事も可能)。

IDE モードから AHCI モードに変更するには (Windows Vista以降の場合)

IDE→AHCI変更ツール (Windows 2000~7、32/64bit 対応)
  • IDE モードでインストールした OS 環境を簡単に AHCI モードに切り替えるツール。

ハイブリッド HDD ってどうなの?

+クリックで展開
  • NAND フラッシュメモリと HDD を組み合わせたハイブリッド HDD には何種類かの方式があり、

  • ① HDD に NAND フラッシュメモリのキャッシュを組み込んだ OS 非依存で HDD と互換性のあるタイプは Seagate の Momentus XT (2.5"SATA、7,200rpm + Samsung 4GB SLC) の他、何社かの HDD メーカーが開発中としている。

  • ② HDD に Windows Vista 以降に搭載された機能"Windows ReadyDrive"で使用できる NVCache を組み込んだ OS 依存型ハイブリッド HDD としては旧型の Seagate Momentus 5400 PSD (2.5"SATA、5,400rpm + 256MB SLC) と Samsung Spinpoint MH80 (2.5"SATA、5,400rpm + 128/256MB SLC) がある。対応 OS 以外では単なる 5,400rpm の HDD としてしか利用できない。

  • ① と ② は微妙に速度は向上するもののベンチスコアや体感速度の大幅な向上は無い。① の OS 非依存のものであれば選んでも損は無い。その他は SSD と HDD を同時接続して SSD を HDD のキャッシュとして使用する方式で、

  • ③ 専用のハードウェアを使用し、OS 非依存でホストからは単体の HDD として認識される SilverStone SST-HDDBOOST (初期は完成度が低かったものの最新ファームウェアで性能が向上している。2.5"SSD を 3.5"形状に変換するマウンタの形状になっており、HDD へ接続する為の SATA コネクタがある。HDD のデータの内先頭から SSD と同じ容量だけ SSD にキャッシュされる仕組みで読み出しのみ高速化、耐障害性は並)

  • ④ RAID コントローラーを利用し、専用ドライバを必要とするため OS 依存型のものは Adaptec maxCache 2405Q/5805Q/5805ZQ (アクセス頻度の高いデータをキャッシュ)、Marvell HyperDuo (Marvell 88SE9130 + Windows インボックスドライバで動作、88SE9128 搭載マザーボードの一部も対応している、スパニング (対障害性低下) とキャッシュモード)、Intel Smart Response Technology (Z68 チップセット + IRST 10.5 以降、SSD の内キャッシュとして利用できる容量は 18.6GB~64GB に制限、ライトスルーかライトバック (対障害性低下) 方式のキャッシュとして利用) がある。

  • ③ と ④ は組み合わせる HDD/SSD によって大きくパフォーマンスに差が出、もちろん使用する SSD 単体よりは遅くなり、Trim コマンドに対応しない為 SSD 側は速度低下してしまい、また SSD へファームウェアアップデートや Secure Erase をする際は ③ はいちいち物理的に SATA コネクタを繋ぎ変えたり ④ の場合は OS 上で設定を変更する必要がある事から、バグが多く頻繁にファームウェアアップデートがリリースされていたり速度低下の大きい SSD は適さず、組み合わせるのに使用する SSD は単体で使用する場合よりも更に厳選する必要がある。Intel は Intel Smart Response Technology を想定した SSD 311 をリリースする予定になっており、これは速度低下しにくく速度低下しても極端に遅くなりにくい SLC 採用で、枯れた (といっても時々 8MB 病が報告されているが) G2 系コントローラーを使用している為にキャッシュ用として向いている。その他には MLC だが速度低下せず安定している東芝製やその他の SLC 採用のエンタープライズ向け SSD 等が向く。

  • ぶっちゃけた話、SSD は単体で OS 入れて使って HDD はデータ用にすればいい。ハイブリッドは魔法ではないので SSD をキャッシュとして使用してもキャッシュされたデータ以外は速くならないし、SSD の容量以上はキャッシュ出来ない。どうしてもブートドライブの容量が 2TB や 3TB 必要かつ速くしたいとかの特殊な用途に向く。何?SSD と ANS-9010 でハイブリッドしたい?そうかそうか、出来るかわかんねーけどやってみろよ


デフラグって効果あんの?

+クリックで展開
  • HDD の場合は効果が高いデフラグだが、SSD の場合は物理アドレスと論理アドレスが異なる為、物理アドレスレベルの影響と論理アドレスレベルの影響を分けて考える必要がある。
    (デフラグツール等で分析の結果断片化が発生していても、SSD 内部では断片化が殆どしていない場合もあるしその逆もある)

  • 論理アドレスレベルではフラグメントしていない方が高速になる。SSD 内部での物理アドレスの管理はページサイズかそれ以上の単位 (3xnm 世代は 4KiB が多く、2xnm 世代は 8KiB 程度) で行っており、大抵の SSD は SSD コントローラーに NAND フラッシュメモリを 8 個以上並列接続しページサイズをストライプサイズとした RAID0 のような状態になっている為、論理アドレスレベルでページサイズより大きなブロックサイズのアクセスが発生するとそれぞれの NAND フラッシュメモリに同時アクセスでき高速化出来るのが理由。
    但し同時アクセスの上限を超えたブロックサイズのアクセスがあってもそれ以上高速化は出来ないので断片化を完全に解消しても効果は薄い。
    同時アクセスの上限は SSD によって大きく異なるが、32KiB~128KiB 程度で頭打ちになる事が多い。
    AnandTech では毎回様々なブロックサイズでのパフォーマンスの違いを計測しており、ATTO Disk Benchmark でも確認できる。(これらは QD=4 での計測だったりするので実用時のパターンとは異なる場合もある) また、CrystalDiskMark でも SSD の場合は機種によっては 512KB と Seq が殆ど変わらない事が確認出来る。
    つまり、1MIB のファイルが 4KB ごとに断片化している場合は明らかにアクセスが遅くなるが、32~128KiB 程度ごと (SSD の機種による) に断片化している状態と全く断片化していない状態ではパフォーマンスは大差無いということである。

  • 物理アドレスレベルではデフラグを行うと多数のランダムライトが行われる為 SSD によって (特に多くの MLC 搭載の機種) は顕著に速度低下してしまい、更に無駄な書き込みで無駄に寿命を縮める事になる。
    但し SSD によってはデフラグ中に発生するランダムライト等によってアクティブ GC が励起される為に速度低下が回復するものもある。つまり物理アドレスレベルではデフラグは基本的に逆効果で、効果があったとしてもそれはアクティブ GC が励起されただけである。
    Intel 純正 SSD の場合はランダムライトで GC が励起されることが多いので結果的にデフラグを行う事によって速度低下が回復できる場合もあり、RealSSD C300/C400 ではランダムライトでは GC は励起されないのでデフラグは逆効果になる場合が多い。
    つまりデフラグで GC を励起できるかどうかは機種によって異なり、デフラグは確実な方法とはなり得ないという事である。GC を励起させるには他の方法もあるのでデフラグ自体は行う必要が無い。

  • 総合すると論理アドレスレベルの断片化対策としてはファイルシステムのブロックサイズ (NTFS ならクラスタ/アロケーションユニットサイズ) を 32~64KB に設定してしまうのが最も確実な方法であり、それ以上に論理アドレスが連続していても大した効果は無く、デフラグの出番は無い。物理アドレスレベルの断片化が原因の速度低下に対しては Trim+GC や Secure Erase が最も確実な方法であり、こちらもデフラグの出る幕は無い。尚、Microsoft や Intel は SSD に対するデフラグを推奨していない。

  • JMF601/602 搭載 SSD 等の"プチフリ"問題を抱えている上 Secure Erase や Trim に対応していない旧機種はランダムライトが多数発生するとプチフリが発生しやすくなる為、空き領域のデフラグがやや効果がある (というより他に打つ手が無い) が、そういう SSD の場合は窓から投げ捨ててしまって、まともな SSD を買ってきて換装する方が更に効果が高くお勧めである。