Windows 7のSSD対応に関するまとめ

今回の記事では、Windows 7SSD対応の内容についてまとめておきます。
Windows 7がどのようにSSDを認識するのか、SSDと認識されたドライブに対して何が行われるかについては、"Engineering Windows 7"Blogの日本語翻訳版の記事に詳しく記されています。
それによると、Windows 7は以下の2通りの方法でSSDを認識しているようです。

前者の条件を満たすSSDは、CrystalDiskInfoで"回転数"の項目が"----(SSD)"と表示されます。この規格は策定されたのがつい最近であり、やや古いSSDでは対応していません。そのため、後者の条件を付け加えることにより、すべてのSSDを正しく認識できるようにしているということです。
この機能によってSSDと認識されたストレージ上のドライブは、スケジュールデフラグの対象外となります。
また、システムドライブがSSD上にある場合、Superfetch、起動プリフェッチ、アプリケーション起動プリフェッチ、ReadyBoost、ReadyDriveがすべて無効になります。よって、SSDがOSから正しく認識されていれば、Vista以前のOSのように、手動でSuperfetchやPrefetchの設定をする必要はありません。*1
ただし、ランダムライトのパフォーマンスが低いSSDについては、それらの機能オフが無効になるということです。おそらく具体的な対象はPhison製コントローラとJMF601/602なのでしょうが、どうやらプチフリ中は読み込みも止まってしまうため、メモリに置いておいた方がいいよ、ということのようです。

実際のところは?

Windows 7 Professional 64bitのマシンに、以下のストレージを接続して確かめてみました。

  • Cドライブ: Solidata K5-64 (SSD, Word 217=1)
  • Eドライブ: WesternDigital WD6400AAKS (HDD)
  • Fドライブ: OCZ Vertex 30GB (SSD, Word 217=1)
  • Hドライブ: Buffalo SHD-NSUM30 (SSD, Word 217=0)

スタートメニュー→アクセサリ→システム ツール→ディスク デフラグ ツール を実行すると、以下のような画面が現れます。

すべてのドライブが表示されていますが、この画面は手動でのデフラグを実行するための画面なので、この状態でOKです。PC Watchの元麻布さんの記事では、この画面でCドライブが表示されていることから"X25MをSSDとして認識しなかった"と書いてありますが、これは勘違いの可能性が高いです。スケジュールデフラグの対象になっているドライブを表示するには、この画面から「スケジュールの有効化」または「スケジュールの構成」ボタンを押し、次のウィンドウでさらに「ディスクの選択」ボタンを押します(このボタンを押すためには、「スケジュールに従って実行する」チェックボックスにチェックを入れる必要があります)。

Eドライブ(HDD上),Hドライブ(Word 217=0のSSD上)のみ一覧に現れています。実際に、タスクスケジューラからScheduledDefragを手動実行すると、「ディスク デフラグ ツール」画面の「最後の実行」の時刻がE,Hドライブのみ更新されます。
上記のスクリーンショットから分かるように、こちらの環境では、JMF602搭載SSDSSDとして認識されていないようです。このドライブは4KBのランダムリードで約15MB/s程度の性能は持っているので、前述のSSD認識条件の2番目は満たしているはずです。それにも関わらずスケジュールデフラグの対象になっている原因は不明です。他にもSSDの認識に失敗する例はあるようなので、何か認識のアルゴリズムに問題がある可能性もあります。
Prefetchが有効かどうかは、C:\Windows\Prefetchフォルダにファイルが作られているかどうかで調べることができます。また、Superfetchはサービスの一つなので、コントロールパネル→管理ツール→サービスで状態を確認することができます。"Superfetch"というサービスの「状態」が「開始」ではなく空白になっていれば、Superfetchは無効になっています。

  • 補足

Intelの天野氏の講演の記事に、SuperFetchの状態が変化する条件が掲載されていたので、下記に引用します。

 データを先読みする「SuperFetch」も、わざわざオンにする必要はないと解説。もっとも、「Windowsエクスペリエンス インデックスの値が5.9以下だと多分HDDだろう、逆に6.5以上だと多分SSDだろうとコンピューターが判断し、自動でオンオフしてくれる」という。

Trimの有効・無効の確認

以下の方法により、現在のシステムでTrim送信機能が有効か無効かを確認できます。なお、後述するように、通常の場合、ユーザーはこの設定について変更を行う必要はありません。

  • "Windowsキー+R"を押し、"cmd"と入力してEnter
  • "fsutil behavior query DisableDeleteNotify"と入力してEnter
  • "DisableDeleteNotify = 0"と表示されればTrim有効、"DisableDeleteNotify = 1"と表示されれば無効

分かりにくいのですが、コンピュータ(というかプログラミング)の世界では0は"false(偽)"を表すので、Disableがfalse = Enableとなっているわけです。
DisableDeleteNotifyの値は、ストレージがTrimをサポートしているかどうかとは無関係で、OS側がTrimを送るかどうかの設定を表します。デフォルト設定は"DisableDeleteNotify = 0"なので、この設定のままで問題ありません。また、ストレージがTrimに対応するかどうかに応じてOSがこの値を勝手に変更することはありません。
そういうわけで、こちらもPC Watchの元麻布さんの記事なのですが、これには2重に勘違いがあります。返ってくる値は0で正しく、しかもIntelSSDSSDと認識されているかどうかはこの件とは関係ありません。
なお、テスト目的などでTrimを無効にしたい場合は、"fsutil behavior set DisableDeleteNotify 1"と入力してEnterを押します。有効に戻す場合は1を0に変えればOKです。

  • 補足

上記はあくまで"Windows 7がTrimを送信している"ことを示しているのみです。大変不便なことに、SSDがTrimを正しく受け取っているかどうかを簡単に確かめる方法は(現在のところ)ありません。手間がかかっても良いからどうしても確かめたいという場合は、この記事を参考にしてください。
SSDがTrimを正しく受け取れない例としては、古いバージョンのAHCI用ドライバがインストールされている場合や、RAIDを構成している場合が挙げられます。
現在のところ、確実にTrimに対応しているドライバは、以下の通りとなります(2011年5月現在)。

また、一時期IRSTではRAIDを構成するSSDにもTrimが送信されるという情報がありましたが、どうやらそれは誤報のようです。正しくは、「BIOSRAIDモードになっている状態で、RAIDを構成していないドライブに対してTrimが送信される」とのことです。
AMDやMarvellでRAIDを構成した場合については、情報が見つかりませんでした。

*1:この記事の初出時、SuperfetchやPrefetchがドライブごとに有効・無効となるという旨の記述をしていましたが、それは間違いでした。申し訳ありません。