Windows 11とNVMe SSDについて調べてみた

# はじめに
　MicrosoftがWindows 11を6月に発表し<sup>[1]</sup>、2021年10月5日の提供開始を発表しました<sup>[2]</sup>。

　そしてビルド22000.132のISOイメージがWindows Insider Previewプログラムで公開されましたので<sup>[3]</sup>、このISOイメージを使用してWindows 11をクリーンインストールしてみました（図1）。
![Windows 11 Pro (build 22000.132)でのNVMeドライブ認識状況](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/439683/8c333419-b170-8210-9621-a15519e676f7.png "Windows 11 Pro (build 22000.132)でのNVMeドライブ認識状況")
図1：Windows 11 Pro (build 22000.132)でのNVMeドライブ認識状況

　NVMe SSDも問題なく認識されています。OS標準デバイスドライバにはWindows 10と同様に`stornvme.sys`が使われています。

　今回の記事では、このWindows 11 (build 22000.132)を使い、Windows 11上でのNVMeドライブ(SSD)へのアクセスについて簡単に調べた結果をまとめます。

# まとめ

* Windows 11のMicrosoftの標準NVMeドライブ向けデバイスドライバはWindows 10から大きな変更はなさそう
    * Windows 10で動作する、Microsoftの標準NVMeドライブ向けデバイスドライバを使用したPowerShellスクリプトやアプリケーションプログラムの、Windows 11上での動作を確認
* Windows 11システムのストレージ要件（容量）は最低64 GBだが、対応PCの仕様を見ると実際には最低256 GB程度必要か
    * 記事執筆時点では、512 GB付近の容量帯であればSATA SSDもPCIe Gen3接続SSDもほぼ同価格帯

# 今まで通りPowerShellスクリプトで情報取得できる？
　Windows 11はWindows 10の後継とはいえ新しいOSということで、これまでWindows 10で使用してきた各種ツールがこれまで通り動作するかどうかは確認が必要です。

　そこで、Microsoftの標準デバイスドライバを使用してNVMeドライブの情報を取得するPowerShellスクリプト<sup>[4]</sup>の動作確認をしました。

　まずS.M.A.R.T.情報を取得するスクリプトですが、図2のように動作が確認できました。
![NVMeドライブのS.M.A.R.T.情報を取得するPowershellスクリプトの動作確認結果](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/439683/ff232575-386f-c7f0-7be8-658bbe9a54ea.png "NVMeドライブのS.M.A.R.T.情報を取得するPowershellスクリプトの動作確認結果")
図2：NVMeドライブのS.M.A.R.T.情報を取得するPowerShellスクリプトの動作確認結果

　図2のコンソールの上部でセキュリティ設定を変更しているのは、OSのデフォルト設定ではこのPowershellスクリプトが実行できないためです。変更方法などは[5]を参照しました。

　NVMeドライブがサポートするコマンドを調べて表示するスクリプトも、図3の通り動作が確認できました。
![NVMeドライブがサポートするコマンドを取得するPowershellスクリプトの動作確認結果](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/439683/662a1402-4161-94ce-66f3-af252f74eb2d.png "NVMeドライブがサポートするコマンドを取得するPowershellスクリプトの動作確認結果")
図3：NVMeドライブがサポートするコマンドを取得するPowershellスクリプトの動作確認結果

　これらのスクリプトはPowershellスクリプトなのでWindows 11でMicrosoftのNVMeドライブ用デバイスドライバに大きな変更がなければ動作するだろうと予想していました。

　検証の結果これらのPowershellスクリプトが問題なく動作しましたので、Windows 11のMicrosoft標準NVMeドライブ用デバイスドライバは、Windows 10と比較して大きな変更はなさそうです。

# 今まで通り標準デバイスドライバで操作できる？
　Powershellスクリプトの動作が確認できましたので、次はアプリケーションを確認します。

　Powershellスクリプトと同じくGithubに置いている、Windowsの標準NVMeデバイスドライバを使用してNVMeドライブにアクセスするアプリケーション<sup>[6]</sup>を、Windows 10上でビルド（Windows 10 SDKを使用）して、そのバイナリをWindows 11上で動かしました。

　結果は……普通に動きました。
![Windows標準デバイスドライバ使用NVMeドライブアクセスツール動作確認（起動時）](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/439683/343b0656-50a8-0d51-1eba-a0dd6e3fd429.png "Windows標準デバイスドライバ使用NVMeドライブアクセスツール動作確認（起動時）")
図4：Windows標準デバイスドライバ使用NVMeドライブアクセスツール動作確認（起動時）

　Windowsのバージョン（ビルド番号）も、Windows 10での動作時と同じ方法で"22000"と取得できています（"Windows 11"と表示しているのは、「ビルド番号が22000以上ならWindows 11」と判断して表示しているためです）。

　NVMeドライブの各種情報を調べる`Identify`コマンドも、これまでと同じ方法で実行できました。図5はコントローラの情報を取得した結果です。
![Windows標準デバイスドライバ使用NVMeドライブアクセスツール動作確認（Identifyコマンド）](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/439683/50382a1f-fde0-2217-df84-202fa6f84ebd.png "Windows標準デバイスドライバ使用NVMeドライブアクセスツール動作確認（Identifyコマンド）")
図5：Windows標準デバイスドライバ使用NVMeドライブアクセスツール動作確認（Identifyコマンド）

　さらに、LBA = 0のセクタにRead → Write (512バイト分`DEADBEEF`と書き込む）→ Deallocate（`Dataset Management`コマンド使用）→ Readという順番でアクセスすると、期待通りの結果が得られました。

　最初のReadの結果が図6です。セクタ末尾のシグニチャ(`AA55`が逆に表示されている）が見えます。
![Windows標準デバイスドライバ使用NVMeドライブアクセスツール動作確認（Readコマンド）](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/439683/2f319506-c56c-0c90-3e72-963260863a1a.png "Windows標準デバイスドライバ使用NVMeドライブアクセスツール動作確認（Readコマンド）")
図6：Windows標準デバイスドライバ使用NVMeドライブアクセスツール動作確認（Readコマンド）

　次にWriteすると図7のようになりました。表示されているのはWrite後にReadした結果です。期待通り書き込めています。
![Windows標準デバイスドライバ使用NVMeドライブアクセスツール動作確認（Writeコマンド）](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/439683/0d8d4825-95ff-ea19-0371-76cc2afa9d11.png "Windows標準デバイスドライバ使用NVMeドライブアクセスツール動作確認（Writeコマンド）")
図7：Windows標準デバイスドライバ使用NVMeドライブアクセスツール動作確認（Writeコマンド）

　そしてこのセクタをDeallocateする`Dataset Management`コマンドを発行すると、コマンドは成功し（図8）、
![Windows標準デバイスドライバ使用NVMeドライブアクセスツール動作確認（Dataset ManagementコマンドによるDeallocate）](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/439683/8ea5a1a5-ab5b-5542-12a0-0d3505c32a39.png "Windows標準デバイスドライバ使用NVMeドライブアクセスツール動作確認（Dataset ManagementコマンドによるDeallocate）")
図8：Windows標準デバイスドライバ使用NVMeドライブアクセスツール動作確認（Dataset ManagementコマンドによるDeallocate）

　その後データを書き込む前にこのセクタをReadすると、Deallocateの結果としてオール0が読めました（図9）。
![Windows標準デバイスドライバ使用NVMeドライブアクセスツール動作確認（Deallocate結果確認）](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/439683/b0e64529-e313-6cd6-3a4c-cf530005aca0.png "Windows標準デバイスドライバ使用NVMeドライブアクセスツール動作確認（Deallocate結果確認）")
図9：Windows標準デバイスドライバ使用NVMeドライブアクセスツール動作確認（Deallocate結果確認）

　Deallocate後未書き込みのセクタをReadした時読める値はドライブにより異なるのですが（`Identify`コマンドの結果でわかる）、このドライブの場合は「0が読める」ドライブですのでこれが正しい動作です。

　この一連の動作確認結果から、Microsoftの標準NVMeデバイスドライバを使う一般的な操作の範囲であれば、Windows 10用に作成したアプリケーションはWindows 11でも動作しそうです。

# NVMeドライブの健康状態表示機能はどうなった？
　[以前の記事](https://qiita.com/ken-yossy/items/22ded96481c4e5ab8bdc)で紹介したように、MicrosoftはNVMeドライブの健康状態を示す情報（S.M.A.R.T.情報）のうち残寿命(Estimated remaining life)、残余剰(Available spare)、温度(Temperature)、の表示機能をテストしていました（図10）。
![Windows 10 (build 20231)のNVMeドライブ健康状態表示機能（再掲）](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/439683/07ced25d-328f-e0c8-37c1-52897695488a.png "Windows 10 (build 20231)のNVMeドライブ健康状態表示機能（再掲）")
図10：Windows 10 (build 20231)のNVMeドライブ健康状態表示機能（再掲）

　Windows 11 (build 22000.132)でもこの機能を確認しました（図11）。
![Windows 11 (build 22000.132)のNVMeドライブ健康状態表示機能](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/439683/b227cd3f-ca60-c314-3869-751d2d1070ff.png "Windows 11 (build 22000.132)のNVMeドライブ健康状態表示機能")
図11：Windows 11 (build 22000.132)のNVMeドライブ健康状態表示機能

　図11の通り、表示内容は以前と同じです。ドライブ情報として"Bus type"という項目が追加され、"Nvme"と表示されています。

　ちなみにこの表示、SATA SSDの場合はちゃんと"Bus type"には"SATA"と表示されます。

　これらの状態が異常値の時にどのように表示されるのか、ポップアップ通知が表示されるのか、などは未検証です。今後環境を揃えて検証したいと考えています。

# Windows 11のシステム用に適したストレージは？
　Microsoftは、Windows 11をインストールするシステムのストレージ要件（容量）を「最低64 GB」としています<sup>[7]</sup>。

　しかしMicrosoftは同時に、Windows Updateによる更新をスムーズに行いシステムを運用するにはこの容量では足りないことも記載しています。

　ちなみに、Windows 11のリリース日を発表したMicrosoftのブログ記事<sup>[2]</sup>で紹介されているWindows 11対応PCのストレージ容量を見ると、私が調べた限りでは最低でも256 GBでした。

　これは、Windows Updateによるシステム更新を継続的に行い、かつアプリケーションソフトウェアをインストールし各種データを格納したうえでシステムを快適に動作させるには、ストレージ容量は最低でも256 GB必要だろうと判断した、と考えられます。

　また、コストの条件を満たし十分な性能を持つ容量256 GB未満のSSDを探すのが難しい、という理由も考えられます。

　NANDフラッシュメモリベースのSSDは基本的に容量が大きいほど寿命も長くアクセス性能が高くなるので、実際には256 GBではなくその次の容量帯（480 GBから512 GBまで）以上の製品が良さそうです。

　そこで、主要SSDメーカーの上記価格帯の製品（TLC NANDフラッシュメモリ搭載製品）について、店頭価格の推移（2021年頭から8月末まで、各週末ベース）をグラフにしました（図12）。
![NANDフラッシュメモリベースSSDの2021年1月から8月までの価格推移（容量480 GBから512 GB）](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/439683/8b34d833-ba5f-8656-0bb5-5b0ced317d8f.png "NANDフラッシュメモリベースSSDの2021年1月から8月までの価格推移（容量480 GBから512 GB）")
図12：NANDフラッシュメモリベースSSDの2021年1月から8月までの価格推移（容量480 GBから512 GB）

　図12の実線がPCIe Gen3接続SSD（高性能モデル）、一点鎖線がPCIe Gen3接続SSD（標準モデル）、点線がSATA 6Gbps接続SSD（高性能モデル）、となります。グラフの各線はそれぞれある製品の価格推移（複数店舗での価格の単純平均）です。

　図12を見ると、PCIe Gen3接続製品の標準モデルはSATA接続製品の高性能モデルとほぼ同等の価格（7,000円前後）まで値下がりしています。PCIe Gen3接続製品の高性能モデルはまだ1万円前後であり、他の2モデルとはまだ数千円程度の価格差があります。

　このグラフにはありませんが、1 TBモデルになると、PCIe Gen3接続製品（標準モデル）の価格は15,000円前後、SATA 6Gbps接続製品は11,000前後となり、その差が多少見えてきます。

　これらのことから考えると、Windows 11マシンのシステムストレージ用としてNANDフラッシュメモリベースのSSDを選ぶ場合、512 GB付近の容量帯であれば現時点ではPCIe Gen3接続製品が価格でも性能でもオススメ、となります。

　もちろん、512 GB付近の容量帯よりも1 TB付近の容量帯のほうが、性能的にも寿命的にもオススメであることは間違いありません。

# まとめ
　今回の記事では、Windows Insider Previewプログラムで公開されたISOイメージでクリーンインストールしたWindows 11環境を使用して、Windowsの標準デバイスドライバを使いNVMeドライブにアクセスするPowershellスクリプトとアプリケーションプログラムの簡単な動作確認結果をまとめました。

　また、Microsoftが公開したWindows 11のストレージ要件と、これまでのSATA SSDおよびPCIe / NVMe SSDの小売価格推移をもとに、Windows 11のシステムストレージのオススメをまとめました。

　Windows 11の提供開始は（記事執筆時点では）もう目前ですが、一方でWindows 10（HomeとPro）のサポートは2025年10月に終了することが発表されています<sup>[8]</sup>。

　Windows 11の導入やWindows 11への移行を検討される際の参考になれば幸いです。

# References
[1] Windows Blog, _"[Introducing Windows 11](https://blogs.windows.com/windowsexperience/2021/06/24/introducing-windows-11/)"_, June 24, 2021（2021年9月12日閲覧）
[2] Windows Blog, _"[Windows 11 available on October 5](https://blogs.windows.com/windowsexperience/2021/08/31/windows-11-available-on-october-5/)"_, August 31, 2021（2021年9月3日閲覧）
[3] Microsoft, _"[Flight Hub](https://docs.microsoft.com/en-us/windows-insider/flight-hub/)"_
[4] _[nvmetool-win-powershell: Sample script of accessing NVMe drive using Windows' inbox NVMe driver](https://github.com/ken-yossy/nvmetool-win-powershell)_
[5] @Targityen、_「[PowerShell のスクリプトが実行できない場合の対処方法](https://qiita.com/Targityen/items/3d2e0b5b0b7b04963750)」_、2021年9月4日閲覧
[6] _[nvmetool-win: Sample program of accessing NVMe device using Windows' inbox NVMe driver](https://github.com/ken-yossy/nvmetool-win)_
[7] Microsoft、_「[Windows 11 のシステム要件、機能、デバイスの要件について](https://www.microsoft.com/ja-jp/windows/windows-11-specifications)」_、2021年9月3日閲覧
[8] Microsoft、_"[Windows 10 Home and Pro](https://docs.microsoft.com/en-us/lifecycle/products/windows-10-home-and-pro)"_、2021年9月13日閲覧

# ライセンス表記
<a rel="license" href="http://creativecommons.org/licenses/by-sa/4.0/"><img alt="クリエイティブ・コモンズ・ライセンス" style="border-width:0" src="https://i.creativecommons.org/l/by-sa/4.0/88x31.png" /></a><br />この記事は<a rel="license" href="http://creativecommons.org/licenses/by-sa/4.0/">クリエイティブ・コモンズ 表示 - 継承 4.0 国際 ライセンス</a>の下に提供されています。