Hatena::ブログ(Diary)

Lansenの現実逃避日記 このページをアンテナに追加 RSSフィード

2009-11-14

[]Windows 7SSD対応に関するまとめ 16:22 Windows 7のSSD対応に関するまとめを含むブックマーク 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がすべて無効になります。よって、SSDOSから正しく認識されていれば、Vista以前のOSのように、手動でSuperfetchやPrefetchの設定をする必要はありません。*1

ただし、ランダムライトパフォーマンスが低いSSDについては、それらの機能オフが無効になるということです。おそらく具体的な対象はPhison製コントローラとJMF601/602なのでしょうが、どうやらプチフリ中は読み込みも止まってしまうため、メモリに置いておいた方がいいよ、ということのようです。

実際のところは?

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

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

f:id:Lansen:20091114152328p:image

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

f:id:Lansen:20091114152327p:image

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が送信される」とのことです。

AMDMarvellRAIDを構成した場合については、情報が見つかりませんでした。

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

NYNY 2009/11/15 01:27 >SuperfetchやPrefetchが有効になっているかどうかは、確認方法が分かりませんでした。

Superfetchは、管理ツール→サービスで確認できるかと。
CドライブがA-DATAのS592で、無効・スタートアップの種類=手動になってます。

あと、Vistaのときはサービスの一覧にReadyBoostがあったのですが、7ではなくなっています。

LansenLansen 2009/11/15 12:49 しまった、勘違いしてました。スケジュールデフラグと異なり、SuperfetchとかPrefetchはドライブごとの対応ではないんですね。なので、その方法で確認をとればいいということですね。本文も訂正しました。
この記事を書く前の時点で、サービスとかレジストリのSuperfetch/Prefetch設定とかを色々いじってしまったので、デフォルトで無効になっているかどうかのチェックはできませんでした…

STMSTM 2009/11/17 09:09 X25-M G2 初期ファームにインストールしましたが、自動デフラグとReadyBoostは無効になりましたが、PrefetchやSuperFetchは有効になったままですね。
他の掲示板を見ても、PrefetchやSuperFetchが無効になったという人や他の物(Vertexなど)は見あたりません。
どんな製品が無効になるんですかねえ。

LansenLansen 2009/11/18 00:06 何というか、謎が多いんですよね。
「無効になる」と書いてありますが、これは対応するレジストリキーが勝手に書き換わるのか、レジストリキーは変わらないけど別の場所にフラグが立ってて最終的に無効化されるのか分かりません。
また、どのタイミングでシステムがSSDかどうかを判別してるのかも分かりません。Windows 7本体のインストールの時だけだとすると、引っ越しソフトでSSDに移行したときに変化がなくなってしまうでしょうし…
どこかにもう少し詳しい説明が出ていないか探してみましたが、どうも見つけられません。

marosamamarosama 2009/11/18 01:49 >Lansenさん

>何というか、謎が多いんですよね。

ホットプラグでSSDを接続しても、スケジュールデフラグは無効に
なったと思いますので、少なくとも、IDENTIFY DEVICEコマンド発行
時にWord217のチェックは行っているようですよ。(ホットプラグで
ストレージ機器を接続すると必ず、イニシャライズにこのコマンドが
飛びます)
PrefetchやSuperFetchの件は、チェックしていないのでわかりません。
Word217をチェックして設定しているなら、すべて一律で設定できると
思うのですが・・・。案外、単なるバグなんて落ちだったりして。

あと、ランダムリードの件ですが、これは、そもそもちゃんとやって
いるんでしょうか(笑)。
以前から、実はやっていないような気がしているのですが・・・。

LansenLansen 2009/11/19 00:54 うーむ、やはり確実なのは「Word 217が1ならスケジュールデフラグの対象外にする」って機能だけで、あとは本当に実装されてるのか謎ですね。
7にしてから、完全に空のはずのSSDのAverage/Max Erase Countが日々上昇するという現象が起きています。これがランダムライトパフォーマンスを調べてる痕跡なのかなあと思ってました。でも結局デフラグのリストには反映されてないですし、何なんでしょうかね…

NekoNeko 2010/01/12 13:50 初めまして。SSDネタで参考にさせて頂いております。

自分ので試してないんで(^^;)想像ですが、「Windows エクスペリエンス インデックス」の実行・未実行で変化はないでしょうか?

Windows 7 では、Windows エクスペリエンス インデックスのインデックス値で、内部動作を変更するそうです。なので、 TechED の MS の方のセッションでは、Windows エクスペリエンス インデックスは実施してくださいと言われていました。

LansenLansen 2010/01/13 02:36 試してみました。
SuperfetchとPrefetchのレジストリ値を有効状態にし、Superfetchサービスのスタートアップ状態を自動にして、エクスペリエンスインデックスを更新しました。
しかし、どの値も変化なしでした。やはり何か他のトリガがあるのか、そもそもそんな機能は実装されてないのか…

K 2010/01/13 07:49 はじめまして。X-25VへWindows7をインストールしたところ
SuperFetchサービスが起動していないことは確認できましたことをお知らせいたします。
ご参考まで。

LansenLansen 2010/01/15 00:42 情報ありがとうございます。
やはりインストール時の情報で決まるんでしょうか。
TrueImageとかで引っ越しした場合は、自動的には設定が変わらない可能性が高いですね。

tollboytollboy 2010/10/14 03:36 こんにちは。初めて投稿させていただきます。
REAL SSD C300を使用しています。
環境としては、Win7で、AHCIドライバはAMD製です。
Trim が有効になっているかを判断するために、コマンドプロンプトで、fsutil behavior query DisableDeleteNotifyを入力し、確認したところ、”DisableDeleteNotify = 0”と表示され、Trimが有効であることを確認しました。

ただ、この記事によると、AMD製のAHCIドライバは、Trimに対応していない(最終確認2010年10月)ということなのですが、やはりそうなのでしょうかね〜?

ここのブログでも同様のことを書いているようですが・・・。
http://pc.cool.heavy.jp/?eid=1425619

LansenLansen 2010/10/14 23:33 本文に書いた通りですが、DisableDeleteNotifyの値はあくまでOSが「Trim送ってますからね」ということを表明しているだけです。
AMDやMarvellのドライバは、OSが送ったTrimを差し止めてしまいますが、OS側としては差し止められたことは検知できません。さらに、DisableDeleteNotifyの値は基本的に0で、勝手に1にされることはないはずです。(←もし勝手に1になってる環境があったら教えていただきたいです)
Trimというのは、まあODAみたいなもんで、途中で横流しされてるかも知れないし、しかも現地に届いても役に立ってるかどうか分からないという不便な代物なんですよね。

lollol 2011/12/16 20:44 KINGSTON SSDNOW 30GBというSSDです
DisableDeleteNotify=48と表示されます
AHCIドライバは、win7/64の標準のもの
何かわかりますか?

LansenLansen 2011/12/18 01:48 48ってのは初めて見ましたが、ググって見るとどうも他にもそうなってる人がいるみたいですね。
結局原因が何かは分からず、48という数字に意味があるかどうかも不明です。
条件分岐は「値が0->偽」「それ以外->真」と評価されることがほとんどなので、おそらくTrimは無効状態と予測できますが、あまり自信はありません…