Windows 11の標準機能でメモリに問題がないかを診断する

 前回の本連載では、Windowsがクラッシュしたときのトラブルシューティングを紹介したが(「Windowsがクラッシュする原因を究明する方法 AIを活用すると結構早い」)、このときにCopilotから何度も勧められたのが、Windowsメモリ診断を使ったメモリのチェックである。

Windowsメモリ診断を起動すると、今すぐ再起動して診断を開始するか、ユーザーが次に再起動を行ったときに診断を開始するかを選択できる。ただ、メモリに障害がある場合、今後Windowsが起動しなくなる可能性もある。できるだけ早く診断を実行すべきだ

そもそもWindowsメモリ診断とは?

 Windowsメモリ診断は、Windows 11に標準搭載されている物理メモリのテストプログラムだ。使い方は簡単だが、Windowsを再起動して、Windowsが起動する前の状態でテストするため、その間はPCが利用できない。また、複数のテストを繰り返しするために時間がかかる。

 デフォルト設定で、32GBメモリと第12世代Core i7搭載のPCで3時間弱。設定値を変えて、繰り返し数(デフォルトは2回)を増やす、テスト項目を増やす(デフォルトは、標準を選択)とさらに時間が必要になる。

 このため、とりあえずデフォルト値で1回診断をして、それでもメモリが疑わしい類のクラッシュが発生するようなら、テスト項目を増やす、繰り返し数を増やすなどして、より厳しい診断をするといいだろう。

 なお、前回解説したトラブルシューティング方法は、ハードウェアが健全であることを前提としている。なので、クラッシュが短時間で連続して発生したら、まずはメモリ診断をして、メモリに問題がないことを確認しておきたい。メモリに問題があるならば、精密なトラブルシューティングは無意味なものになりかねないからだ。

 Windowsメモリ診断の実行ファイルは、C:WindowsSystem32ディレクトリにあるmdsched.exeで、スタートメニューでは、「Windowsツール」で開くフォルダに登録されている。コマンドラインを使うのもスタートメニューから探すのもどちらもちょっと面倒。そこでWindowsの検索機能で「メモリ」を選択すると、Windowsメモリ診断が簡単に見つかる。

Windowsの検索機能で「メモリ」と入れればWindowsメモリ診断が候補として表示される。これが一番簡単な起動方法だろう

 起動すると、今すぐ再起動して診断を開始するか、ユーザーが再起動をした際に診断するかを聞いてくる。ただし、メモリ診断は、ファームウェア(UEFI)が起動(通常はスプラッシュスクリーンが表示される)した後に開始される。もし再起動時に画面が黒いままだった場合は、メモリ診断のせいではなく、再起動がうまくいってないせいだ。

 メモリ診断が開始されると、青地に白い文字の表示が出る。ただし、その出力はプライマリーのディスプレイアダプタに接続しているディスプレーのみだ。

マシンが再起動して、ファームウェア(UEFI)が起動したのち、Windowsが起動する前にWindowsメモリ診断が動く。進行状況を示す表示もあるが、原則として数時間単位の作業時間が必要になることは理解しておくべきだ

 Windowsメモリ診断は、繰り返し数は2回、テストミックス(テストパターン)は「標準」で起動し、すぐに診断を開始する。設定を変更(後述)するなら、起動直後にしないと時間が無駄になる。

 なお、設定変更以外は手動で操作することはなく、そのまま放置しておけば、勝手に再度Windowsが再起動する。その直後、ユーザーがログインしたときに結果をトースト通知などで教えてくれる。

Windowsメモリ診断の設定項目

 メモリ診断の診断パターンを変更するには、メモリ診断が起動したあと、F1キーを押す。

Windowsメモリ診断の設定変更は、プログラムが起動してからF1キーを使って行う。設定項目は、「テストミックス」「キャッシュ」「パスカウント」の3つ

 設定項目は「テストミックス」「キャッシュ」「パスカウント」の3つがある。テストミックスは、どのようなメモリテスト(あるいはメモリストレステスト)をするかを「基本」「標準」「拡張」の3つから選択する。

 個々のメモリテストアルゴリズムを選択することはできず、3パターンの中から1つを選択する。「基本」が最もテストの種類が少なく、一番早く終了する。最も多いのは「拡張」である。デフォルト値は中間の「標準」だ。

 以下の表は、テストミックスのパターンと実行されるメモリテストアルゴリズムをまとめたものだ。ただし、メモリテストアルゴリズムに関しては、何らかの標準化がされているわけではなく、特定のメモリテストプログラム由来の名称や、論文由来の名称が混在している。また、マイクロソフトもテストアルゴリズムの詳細に関しての文書を公開しておらず、名前などから類推できる範囲で解説した。

 メモリテストアルゴリズムは、テストするメモリのアドレスをどうするかという「アドレス」に関する特性、テストに使うビットパターンの作り方、テストの評価方法などの「データ」に関する特性でおおまかに分類している。

 どのような順番でメモリセルをテストしていくのかという「アドレス」に関しては、大きく「マーチ」「ストライド」「ランダム」の3つのパターンがある。マーチ(行進)は、メモリアドレスを昇順、降順で順番にテストしていくものを指す。

 ストライドは、飛び飛びのアドレスをテストしていく。メモリ領域の両端で、ラップアラウンドしてメモリ領域を巡回する。通常メモリは2のべき乗で搭載されるので、奇数値や素数などを使うことで、巡回パターンを変更できる。通常小さな値ならば、近隣のメモリセルにアクセスするが、大きな値を使うと、セル同士が離れ、メモリアドレス関連のハードウェアの挙動が異なる可能性が出てくる。

 ランダムでは、次にアクセスするアドレスを乱数で決める。ただし、この方法では、全メモリセルをアクセスするには、非常に長い時間がかかるため、未テストのアドレスが生じることを前提に、一定数繰り返すなどで処理時間を短縮する。

 テストに使うデータパターンに関しては、1と0が交互に並ぶなどの「チェッカー」パターンと、すべて0、すべて1を使う「All 0、1」、乱数値を使う「ランダム」などがある。チェッカーは、いわゆるチェッカーゲームやチェスの盤面のように隣が異なる2色のパターンからの類推でこう呼ばれる。ただし、00、11のような繰り返しパターンや、メモリセルの全ビット中、1のビットは1つだけというパターンもこれに含まれる。

 ハードウェア構成の理論から、発生しうるメモリエラーに対して、1つのテストアルゴリズムでは対応ができない。このため、多数のテストアルゴリズムを使って、メモリを評価することが望ましい。しかしエラーによっては、非常に厳しい条件のときに発生するものや常に発生しているものなどさまざまだ。こうしたことから、通常は「標準」を選択しておくのが無難だろう。

 「キャッシュ」は、メモリアクセスに使われるCPU内部のキャッシュ機能をどうするかという設定で「既定(システムの現状に従う)」「オン」「オフ」の3つから選択できる。ただし、一部のテストアルゴリズムでは、キャッシュを有効/無効にしてするものがあり、ここの設定は、特にキャッシュを制御しないテストアルゴリズムのデフォルト値を決めるためのものと考えられる。

 パスカウントは、対象のメインメモリに対する一連のメモリ診断を何回繰り返すかを指定する。標準では2回が設定されている。設定が終了したら、F10キー(設定を有効にするとき)、Escキー(設定をキャンセル)でWindowsメモリ診断の進行表示画面に戻る。

 メモリ診断が終了すると、自動的にWindowsが起動する。診断結果は、ユーザーがログイン後に通知される。もし、エラーが何もなければ、トースト通知を用いて、通常のWindowsの通知システムを使って結果が報告される。

問題がない場合には、ユーザーがログインしたあと、トースト通知でエラーがなかったことが通知される

 エラーがあった場合には、Windowsのメッセージボックスを使って通知される。このとき、エラーの状況は、Windowsのイベントビューアーに記録されている。イベントの「ソース」は、MemoryDiagnostics-Resultsである。

エラーが発生した場合、OKボタンのあるメッセージボックスでエラーがあった旨の表示がある。エラー自体の記録はイベントビューアに記録されている

 エラーが出た場合、ユーザーができることはほとんどない。自作マシンなどでは、メモリボードの差し込み直しや交換などで対応が可能な場合があるが、最近のノートPCではそうした方法が取れない製品が多い。

 昔のWindowsに比べると、Windows 10あたりから、かなり安定してきていて、Windowsがクラッシュするのはデバイスドライバの不具合や今回のようにハードウェアの不具合のことが多い。ハードウェア的な問題としては、ストレージ(ドライブ)の問題もある。しかし、ストレージドライバは大半がボックスドライバで、ドライバが問題を起こす可能性は低い。

 ただ、ストレージのエラーもメモリやデバイスドライバの関係で引き起こされることがあり、総合的な判断が必要だ。こうしたとき、確実に診断をするためのベースとなるのがWindowsメモリ診断となる。