OSインストールに適したストレージの要件(2/3)

# はじめに
　[前回の記事](https://qiita.com/ken-yossy/items/c65fceaf53665f7c5751)で、Windowsのインストールにおけるストレージ要件を示し、その要件に容量規定しかないことを説明しました。

　一方、「OSのインストールに適したストレージの性能」として「OSの起動にかかる時間の短縮に寄与すること」が答えの一つである可能性を説明しました。

　このOS起動時間短縮には、ストレージの「**QD = 1のランダムアクセス性能**」が重要になります。

　そこでこの記事では、なぜストレージの「QD = 1」でかつ「ランダムアクセス」の性能がOS起動時間短縮に重要なのかを説明します。

　なお、次回の記事では、ストレージの種類に関わらずシステムドライブに使うストレージに求められる特徴と、特にシステムドライブにNANDフラッシュメモリをメディアとするSolid State Drive (SSD)を使う場合に求められる特徴（機能）をまとめます。

# まとめ
* OS起動時の処理には通常動作時の処理とは異なる特徴がある
* Windows 11起動時にストレージに発行されたコマンドをみるとほとんどがランダムアクセスコマンド
* そのコマンドログを使用した簡易見積もりによりOS起動時間にはQD = 1のランダムアクセス性能が重要だと裏付けられた
 
# QD = 1の性能が重要な理由
　OS起動時は、多数のアプリケーションが並列動作するのではなく、ハードウェアやソフトウェアの初期化そして準備などの処理を**一つずつ順番に実行する**と考えられます。

　さらに、OS起動時の処理には依存関係があると考えられます。処理の依存関係とは、「ある処理Aが終わらないと次の処理Bが実行できない」のような関係です。

　ホスト（プロセッサ）からストレージへのアクセスに着目すると、「**ホストは、ある処理Aのためにストレージにアクセスした後は、その処理Aが終わらないと次の処理Bのためのストレージアクセスを実行しない（できない）**」ことになります。

　この結果、ストレージへのアクセス（コマンド）が散発的になります。その極端な時が、ストレージにとり実行可能なコマンドが1つしかない「QD = 1」の状態となるわけです。

　もちろん、起動中必ずQD = 1の状態が続くわけではありませんが、QDが少ない状態の性能指標としてQD = 1の性能がとても参考になります。

　これがOS起動時の処理時間短縮にストレージのQD = 1の性能が求められる理由です。

　QD = 1の際のストレージのコマンド処理イメージは以下のようになります。

![ストレージのコマンド処理イメージ(QD = 1)](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/439683/98f9b9bd-3e95-f99c-b63e-c5e2033cfd7b.png "ストレージのコマンド処理イメージ(QD = 1)")
図：ストレージのコマンド処理イメージ(QD = 1)

　すなわち、「コマンドを1つずつ実行した時の性能」が「QD = 1の性能」です。

　なお、SSDを含むストレージは、一般的に、できるだけ多くのコマンドを同時並行処理して、あるコマンドの処理時間を他のコマンドの処理時間に「隠す」ことで性能を高めます。例えばQD = 4での理想的な処理イメージは以下のようになります。

![ストレージの理想的なコマンド処理イメージ(QD = 4)](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/439683/2bc060b2-fabb-1942-505b-9040100bbd45.png "ストレージの理想的なコマンド処理イメージ(QD = 4)")
図：ストレージの理想的なコマンド処理イメージ(QD = 4)

## ランダムアクセス性能が重要な理由
　次に、OS起動時にランダムアクセス性能が重要である理由ですが、実際取得したWindows 11のコールドブート時のコマンドログを用いて説明します。

　以下の図は、コマンド別に総コマンド数と総アクセスサイズをまとめたものです。コマンドログ取得環境はこの記事の末尾に示します。

![Windows11起動時のコマンド別解析結果](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/439683/b139a3a4-26ee-ab3c-a591-a8d23ff83f6e.png "Windows11起動時のコマンド別解析結果")
図：Windows11起動時のコマンド別解析結果

　20 GB近くTrimしていますが、これはこのログを採取したのがインストール直後であることから、インストールに使用したファイルの削除などが行われた可能性があります。

　そしてReadコマンドとWriteコマンドをシーケンシャルアクセスとランダムアクセスに分類したその比率を示します。

　なお、シーケンシャルアクセスの判定条件は「同一コマンド（ReadならReadコマンド）が連続し、かつその複数コマンド間でアクセス範囲（LBA領域）はLBAが増える方向に連続していること」というものです。

表：Windows 11起動時のReadおよびWriteコマンドの数内訳（シーケンシャル・ランダム）
| | Readコマンド | Writeコマンド |
|--:|:--:|:--:|
| **総コマンド数** | 40553 | 4938 |
| **シーケンシャルコマンド数** | 6 | 2 |
| **ランダムコマンド数** | 40547 | 4936 |

　加えて、シーケンシャルアクセスコマンドとランダムアクセスコマンドそれぞれでアクセスした総サイズは以下のようになります。

表：Windows 11起動時のReadおよびWriteコマンドのアクセスサイズ内訳（シーケンシャル・ランダム）
| | Readコマンド | Writeコマンド |
|--:|:--:|:--:|
| **総アクセスサイズ (MB)** | 1029.5 | 96.2 |
| **シーケンシャルアクセスサイズ (MB)** | 0.14 | 0.02 |
| **ランダムコマンドアクセスサイズ (MB)** | 1029.36 | 96.18 |

　このように、ほとんどのアクセスがランダムアクセスです。このため「ランダムアクセス性能が重要」となります。

## なぜSATA SSDとPCIe SSDとでOS起動時間の体感差がほとんどないか
　前回触れた記事<sup>[1]</sup>では、「OS起動時間はSATA SSDとPCIe接続のSSDとで体感性能はそこまで大きく変わらない」と記していました。

　ここまでの内容で、OS起動時間を左右するのは「QD = 1のランダムアクセス性能」だと説明しました。そこで、その記事に記載されたSATA SSDとPCIe SSDのQD = 1のランダムアクセス性能をみると、ランダムリードが3桁MB/S、ランダムライトが2桁MB/sで、それぞれ桁が同じです。

　多少乱暴ですが、その性能評価結果からOS起動時間を粗く見積もります。本来OS起動時間にはプロセッサの処理時間やストレージ以外のハードウェアの処理時間（待ち時間）も含まれますし、ストレージの状態はQD = 1だけではありませんが、ここでは見積もりやすくするためにそれらを無視します。また、全てのコマンドのアクセスサイズが4 KBとは限りませんが、やはり見積もりやすくするためにコマンドのアクセスサイズは4 KBと仮定します。

　SATA SSDの4 KB単位のQD = 1ランダムリード性能を100 MB/sとすると、1秒間に100 (MB/s)÷4 (KB)つまり25,000回のコマンドを処理できます。逆数をとると、1コマンドあたりの処理時間は40マイクロ秒です。PCIe SSDの性能を3倍の300 MB/sとすると1コマンドあたりの処理時間は40マイクロ秒の1/3つまり約13マイクロ秒です。ここでは少し大きくみてSATA SSDとPCIe SSDの処理時間差を30マイクロ秒とします。

　同様に、4 KB単位のQD = 1のランダムライト性能が2桁MB/sであることから、1コマンドあたりのランダムライトコマンド処理時間はランダムリード（性能は3桁MB/s）の10倍程度だと考えます。ここでも少し大きくみてSATA SSDとPCIe SSDの処理時間差を200マイクロ秒とします。

　取得したコマンドログから、Readコマンドが約4万個とWriteコマンドが約5千個、これらが全てQD = 1での4 KBランダムアクセスだと仮定すると、SATA SSDとPCIe SSDのOS起動処理時間の差は（Readコマンド分）30マイクロ秒×40,000＋（Writeコマンド分）200マイクロ秒×5,000＝2.2秒と見積もられます。

　記事での実験結果では2秒までの差はありませんが、SATA SSDとPCIe SSDの処理時間の差を大きめにしたことをはじめとした数々の仮定があることを考えれば、おおよそ似た結果が得られたと考えられます。

　シーケンシャルアクセス性能の差を一切考えずにこの誤差であることから、OS起動時間短縮にはストレージのQD = 1のランダムアクセス性能が重要である、とも言えます。

# まとめ
　今回の記事では、NANDフラッシュメモリを不揮発性記憶媒体とするSolid State Drive (SSD)を題材に、「OSの起動時間短縮に寄与する性能（指標）」が「QD = 1のランダムアクセス性能」であることを、実際にWindows 11起動時のコマンドログを参照して説明しました。

　システムドライブ向けに限らず、SSDの選定では「SSDがどのように使われるのか（ワークロード）」を適切に把握することがとても重要です。

　今回示したWindows 11起動時のアクセスログとこれをもとにしたOS起動時間の見積結果から、システムドライブ選定時は、いわゆる「性能」については「QD = 1のランダムアクセス性能」に注目するとより良い選定が行えると考えます。

　次回は、ストレージの種類に関わらずシステムドライブに使うストレージに求められる特徴と、特にシステムドライブにSSDを使う場合に求められる特徴（機能）をまとめます。

# コマンドログ取得環境および条件
　今回使用したWindows 11起動時のコマンドログ取得に関する環境および条件を示します。

　まず取得に使用した機材を以下の表に示します。

表：動作確認環境の主要機材
| 項目 | 内容 | 備考 |
|:-:|:-:|:-:|
| CPU | Intel Core i7-11700 | 8コア16スレッド、2.50 GHz動作（Turbo時4.90 GHz）|
| マザーボード | ASUS ROG STRIX Z590-F GAMING WIFI | ATX、Z590チップセット、PCIe Gen4 M.2スロット×2 |
| メモリ | 32 GB | Crucial DDR4-3200 16GB (CT16G4DFD832A) x 2 |
| OS | Windows 11 Pro | build 22000.318（Microsoft Developer Networkから取得）|
| ストレージ | SATA SSD 240 GB | コマンドログ取得用にファームウェアを改造 |

　そしてコマンドログを取得した期間は「事前に自動ログオンを設定し、インストール終了直後の電源オフ状態から電源を投入、デスクトップ画面が表示されタスクバーにアイコンが全てならぶまでの期間」です。取得停止は目視および手作業で行いました。

# References
[1] 北川 達也、_「[同じSSDでもこれだけ違う。SATAから第4世代PCIeまで速度差を検証](https://pc.watch.impress.co.jp/docs/topic/feature/1386511.html)」_、PC Watch、2022年2月8日

# ライセンス表記
<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>の下に提供されています。