最近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

Test 3 [Moving inversions, ones&zeros, Parallel]
テスト 3 [移動反転、1 と 0、並列]

このテストでは、すべて 1 と 0 のパターンを持つ移動反転アルゴリズムを使用します。キャッシュは有効になっていますが、テスト アルゴリズムに多少干渉します。キャッシュを有効にすると、このテストはそれほど時間がかからず、すべての「ハード」エラーといくつかのより微妙なエラーをすばやく検出できます。


Test 4 [Moving inversions, 8 bit pattern]
テスト4 [移動反転、8ビットパターン]

これはテスト 3 と同じですが、8 ビット幅の「ウォーキング」 1 と 0 のパターンを使用します。このテストでは、「ワイド」メモリ チップの微妙なエラーをより適切に検出します。


何回か試してみたけど、エラーが出ているメモリ領域は、
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 の範囲だと、以下のようになります。

0xbef20 0xbef21 0xbef22 0xbef23 0xbef24 0xbef25 0xbef26 0xbef27 
0xbef28 0xbef29 0xbef2a 0xbef2b 0xbef2c 0xbef2d 0xbef2e 0xbef2f 
0xbef30 0xbef31 0xbef32 0xbef33 0xbef34 0xbef35 0xbef36 0xbef37 
0xbef38 0xbef39 0xbef3a 0xbef3b 0xbef3c 0xbef3d 0xbef3e 0xbef3f 
0xbef40 0xbef41 0xbef42 0xbef43 0xbef44 0xbef45 0xbef46 0xbef47 
0xbef48 0xbef49 0xbef4a 0xbef4b 0xbef4c 0xbef4d 0xbef4e 0xbef4f 
0xbef50 0xbef51 0xbef52 0xbef53 0xbef54 0xbef55 0xbef56 0xbef57 
0xbef58 0xbef59 0xbef5a 0xbef5b 0xbef5c 0xbef5d 0xbef5e 0xbef5f 
0xbef60 0xbef61 0xbef62 0xbef63 0xbef64 0xbef65 0xbef66 0xbef67 
0xbef68 0xbef69 0xbef6a 0xbef6b 0xbef6c 0xbef6d 0xbef6e 0xbef6f 
0xbef70 0xbef71 0xbef72 0xbef73 0xbef74 0xbef75 0xbef76 0xbef77 
0xbef78 0xbef79 0xbef7a 0xbef7b 0xbef7c 0xbef7d 0xbef7e 0xbef7f 

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

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

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

bcdedit /set {badmemory} badmemoryaccess no

bcdedit /set {badmemory} badmemorylist 0xbef20 0xbef21 0xbef22 0xbef23 0xbef24 0xbef25 0xbef26 0xbef27 0xbef28 0xbef29 0xbef2a 0xbef2b 0xbef2c 0xbef2d 0xbef2e 0xbef2f 0xbef30 0xbef31 0xbef32 0xbef33 0xbef34 0xbef35 0xbef36 0xbef37 0xbef38 0xbef39 0xbef3a 0xbef3b 0xbef3c 0xbef3d 0xbef3e 0xbef3f 0xbef40 0xbef41 0xbef42 0xbef43 0xbef44 0xbef45 0xbef46 0xbef47 0xbef48 0xbef49 0xbef4a 0xbef4b 0xbef4c 0xbef4d 0xbef4e 0xbef4f 0xbef50 0xbef51 0xbef52 0xbef53 0xbef54 0xbef55 0xbef56 0xbef57 0xbef58 0xbef59 0xbef5a 0xbef5b 0xbef5c 0xbef5d 0xbef5e 0xbef5f 0xbef60 0xbef61 0xbef62 0xbef63 0xbef64 0xbef65 0xbef66 0xbef67 0xbef68 0xbef69 0xbef6a 0xbef6b 0xbef6c 0xbef6d 0xbef6e 0xbef6f 0xbef70 0xbef71 0xbef72 0xbef73 0xbef74 0xbef75 0xbef76 0xbef77 0xbef78 0xbef79 0xbef7a 0xbef7b 0xbef7c 0xbef7d 0xbef7e 0xbef7f 


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

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

c:\>bcdedit /enum {badmemory}

RAM 不良
--------------------------------
identifier              {badmemory}
badmemoryaccess         No
badmemorylist           0xbef20
                        0xbef21
                        0xbef22
                        0xbef23
                        0xbef24
                        0xbef25
                        0xbef26
                        0xbef27
                        0xbef28
                        0xbef29
                        0xbef2a
                        0xbef2b
                        0xbef2c
                        0xbef2d
                        0xbef2e
                        0xbef2f
                        0xbef30
                        0xbef31
                        0xbef32
                        0xbef33
                        0xbef34
                        0xbef35
                        0xbef36
                        0xbef37
                        0xbef38
                        0xbef39
                        0xbef3a
                        0xbef3b
                        0xbef3c
                        0xbef3d
                        0xbef3e
                        0xbef3f
                        0xbef40
                        0xbef41
                        0xbef42
                        0xbef43
                        0xbef44
                        0xbef45
                        0xbef46
                        0xbef47
                        0xbef48
                        0xbef49
                        0xbef4a
                        0xbef4b
                        0xbef4c
                        0xbef4d
                        0xbef4e
                        0xbef4f
                        0xbef50
                        0xbef51
                        0xbef52
                        0xbef53
                        0xbef54
                        0xbef55
                        0xbef56
                        0xbef57
                        0xbef58
                        0xbef59
                        0xbef5a
                        0xbef5b
                        0xbef5c
                        0xbef5d
                        0xbef5e
                        0xbef5f
                        0xbef60
                        0xbef61
                        0xbef62
                        0xbef63
                        0xbef64
                        0xbef65
                        0xbef66
                        0xbef67
                        0xbef68
                        0xbef69
                        0xbef6a
                        0xbef6b
                        0xbef6c
                        0xbef6d
                        0xbef6e
                        0xbef6f
                        0xbef70
                        0xbef71
                        0xbef72
                        0xbef73
                        0xbef74
                        0xbef75
                        0xbef76
                        0xbef77
                        0xbef78
                        0xbef79
                        0xbef7a
                        0xbef7b
                        0xbef7c
                        0xbef7d
                        0xbef7e
                        0xbef7f

c:\>

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

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

まとめ

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

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

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

(参考URL)
Blacklist bad memory addresses in Windows

Blacklisting RAM Pages (MemTest86 Technical Information)

Views: 99

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

コメントを残す

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