最近PCがフリーズするので対策してみる。(Windowsで、一部メモリ領域を無効化する方法)


現行コンソール用PCが17インチのi7 4800QM+GTX970M(モンハンワールドが何とか動くレベル)でしたが最近メモリ異常と思われるフリーズ事象が出て試行錯誤してみました。

PCがフリーズを繰り返す

PCがフリーズを繰り返す。そのたびに強制電源OFF/ONで対応していたが、かなり頻繁になってきたので、調査開始

Windowsのメモリチェックを実施

まずは、Windows10にメモリチェックの機能があるので、これでチェック。
(スタートメニュー -> Windows 管理ツール -> Windows メモリ診断)

標準だと、特にエラー検知なし。
詳細でチェックすると、途中(20%ぐらい)でフリーズ

Memtest86でチェック

続いて、Windows側の問題を除外するため、
DVD起動のMemtest86でチェックすると、特定の領域、テストパターンでエラーが見つかった。
ただ普通は何回か試しても、同じような結果が出ることが多いのだが、
毎回エラーの出るアドレスが微妙に変わるし、パターン3,4でのみエラーが出るのがちょっと気になる。通常ならほかのパターンでもエラーが出るはずなのに。

https://www.memtest86.com/tech_individual-test-descr.html


何回か試してみたけど、エラーが出ているメモリ領域は、
000bef20000 – 000bef7ffff
の範囲でているみたい。

(別パターン)

メモリ交換

とりあえず、メモリエラーが発見されたので、メモリを交換してみる。
今回のノートパソコンですが、DDR3のメモリが4枚刺さるものなんですが、現状は8GB2枚の刑16GBで稼働していました。

まずは、2枚のうち1枚を取り外して、試してみる。
現象同じでした。では、残ったメモリが被疑部品かな

では残ったメモリを取り外して、先ほど交換したメモリを元あったスロットに交換してみる。あれ、こちらも現象同じ・・・・・

もしかしてメモリ両方ダメだったのか
それでは新品メモリ8GBに交換してみる

やっぱり同じだ

メモリスロット変更

とりあえず可能性をつぶしてみる。メモリスロットのエラーか?
使用していた2スロットとは別の2スロットにメモリを差し替えてみる。

やっぱりダメ。となると、メモリソケットも問題なし。
マザーボード側の配線の問題も薄いかな。
マザーボードは正直変えられないし・・・

CPU交換

最後の手段でCPU交換を検討。
今回のノートPCのCPUはi7 4810MQだから、メモリコントローラはCPUに内蔵。
メモリコントローラが故障しているとなると、CPU交換しかない。

あとMEMTEST86で特定のパターンのみエラーになるのも気になる。そうするとCPIのALU部分も怪しくなってくる。

ただ、4810MQの中古を探したが、ちょっとお高めなので、
比較的安価でほとんどスペックが変わらない4800MQを入手。
(4810MQ 2.8GHz(Max3.80GHz) -> 4800MQ 2.7GHz(MAX3.7GHz))

CPU交換時に、CPUソケットも確認したけど、特に異常は見られない。
それでは、CPU交換。

が、やはりだめ。症状変わらず。
CPU交換してダメということは、メモリコントローラやCPU演算部分についても

その他ハードウェア被疑考察

つまり、ハードウェア的には
・メモリモジュール
・メモリスロット
・メモリコントローラ(CPU)
については問題ない模様。あと怪しいパーツは・・・・

Windowsの利用メモリマップをMSINFO32使って、確認してみたけど、
特定の危機にメモリマップドIOとしてマッピングされているものもなし。
(エラーの出る領域は「000bef20000 – 000bef7ffff」3055MBから1MB程度の範囲な模様)

MSINFO32

となると、交換できそうなパーツについては、全滅状態。
マザー変えるのは、パーツ調達的な部分で難しいので、ハードウェア的な対策では無理そう。

ソフトウェア的な対策(BCDEDIT)

いろいろ調査した結果、WinowsやLinuxでは特定のメモリ領域を意図的に使用しないようにする設定ができるとのこと。(どうやらECCメモリを利用しているときにメモリ不具合を検知したときに、その領域を極力利用しないように登録する機能っぽい)

Windows BCDEDIT(“{badmemory}”)
Linux GRUBでの設定(“GRUB_BADRAM”)

Windowsでは、BCDEDITというコマンドで、そのメモリ使用除外設定指定が出来るようです。
Windowsでは、メモリ管理の最小単位が4KBということで、4KB単位で使用しないメモリ領域を指定していきます。

今回の場合、000bef20000 – 000bef7ffffを指定するので、4KB単位で指定するとなると、下3桁を無視する形で以下のように領域をまとめます。

000bef20000 -> 000bef20
000bef7ffff -> 000bef7f

000bef20000 – 000bef7ffff の範囲だと、以下のようになります。

では、設定していきます。
管理者として実行したコマンドプロンプト上で次のコマンドを実行していきます。

・指定したメモリアドレスの使用を禁止する設定
bcdedit /set {badmemory} badmemoryaccess no

・使用しない領域の登録
bcdedit /set {badmemory} badmemorylist <アドレス指定1> <アドレス指定2> ・・・・


badmemorylistは、1回で実行してください。

正しく登録されたかどうかを確認するは、以下のコマンドを入力します。
bcdedit /enum {badmemory}

これで、Windowsを再起動すれば、指定したメモリ領域を使用しなくなります。

注意点として、Windows10の大規模アップデートなどを実施した場合に、これらの設定がクリアされてしまう場合があるとのことですので、注意してください。

まとめ

BCDEDITでメモリ除外設定をしたことで、やっと安定してノートPCを利用することができるようになりました。

そろそろ、新PCも検討しているので、それまで持てばという暫定対応のようなものですが、とりあえず急場をしのげそうです。
(コンソールPCで、メイン処理は別にメモリ256GB搭載したESXサーバがいるのでなにかあっても移行は楽)

モンハンワイルズ目当てのコンソールPC更新なので、スペック検討中です。

(参考URL)
Blacklist bad memory addresses in Windows

Blacklisting RAM Pages (MemTest86 Technical Information)

カテゴリー: Windows, ハード パーマリンク

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です