jaijai’s blog

Cities Skylinesアセット作成に関するメモ・考察

bcdeditを使ったメモリ不良回避

Cities Skylinesをプレイ中に不定期にクラッシュ(不正終了)する、パソコン自体がフリーズするといった事があります。クラッシュはいろいろな要因で起こりますが、なかでも停止コードMEMORY_MANAGEMENTのブルースクリーンが出たり再現性に乏しいクラッシュに悩まされているならメモリ不良を疑ってみるべきです。

他のゲームは大丈夫なのに?

部分的にわずかだけメモリに不良がある場合、そこを使わない限り表面化しません。仮にその部分が使われたとしても必ずしもエラーに繋がるわけでもありません。

Cities Skylinesは大量にメモリを使用します。DLCを入れるだけで10GBを軽く超えます。そのため、普段使わないメモリ領域に不良があった場合フリーズやセーブデータ破損といった症状となって現れます。

メモリ診断

そこで、使用中のメモリに不良がないかしっかり調査する必要があります。

信頼性に乏しいWindowsメモリ診断

Windowsにはメモリ診断機能があります。この機能はすべてのメモリ領域を詳細に検査するわけではないのでほとんど役に立ちません。とはいえ一度やってみてください。ここでエラーが出るようだと戦況はかなり悪いです。

Memtest86

Memtest86の使用方法はここでは述べません。ぐぐると解説サイトがたくさん出てきます。注意点はMemtest86+の存在です。+のほうは開発が停止しているため最近のパソコンでは使えません。

エラーが出たら

f:id:jaijai_lt:20200501173005p:plain:w300
Memtest86でエラーを検出した例(Tomshardwareより)

Memtest86でエラーが検出される場合、エラー内容のなかの番地(アドレス)部分に注目します。検査はさまざまな種類のテストを何度も繰り返すので一見無数のエラーが検出されるように見えて実は同じアドレスのエラーを何度も検出していることがあります。

f:id:jaijai_lt:20200501183257p:plain
緑色の下線が引いてる箇所がアドレスです。

f:id:jaijai_lt:20200501201742p:plain
そのなかでも右側3文字を除いた部分で分類します。

同じアドレス群でエラーが検出されているように見える場合、Windowsに該当アドレスの使用禁止を設定することでメモリの不良を回避できます。どうやら規則性がなくランダムなアドレスに見える場合は残念ながら対処方法はないのでメモリの交換を検討しましょう。自作パソコンならメモリ速度を落としてみる手もあります。

メーカパソコンやBTOパソコンの場合は保証期間内であれば交換に応じてくれる場合があります。自作の場合は保証期間が最低でも1年程度あるので確認しましょう。最近は永久保証を謳うメモリ製品もよくあります。

bcdedit

Windowsにメモリの使用禁止領域を設定するにはbcdeditを使います。Windows10なら標準でついてきます。使うにはまずコマンドプロンプトを管理者として実行します。

f:id:jaijai_lt:20200501192524p:plain:w400
管理者権限で起動されたコマンドプロンプト

アドレスをまとめる

設定したいアドレスをまとめます。先の画像の場合は設定するべきアドレスは次のようになります。Windows10ではメモリ管理の最小単位が4KBなので下3桁は記述しません。またそれぞれのアドレスには16進数であることを示す0xを付加します。

0x2CEBB3 0x4069A3 0xB433B 0x4054D4 0x4069A4

この例だと5個ですが相当な数まで設定できるようです。

bcdeditで設定

まず登録するメモリアドレスの使用を禁止する設定にします。コマンドプロンプトで次のコマンドを実行します。

bcdedit /set {badmemory} badmemoryaccess no

f:id:jaijai_lt:20200501195137p:plain:w400

上記でまとめたアドレスを登録します。次のコマンドを実行します。

bcdedit /set {badmemory} badmemorylist 0x2CEBB3 0x4069A3 0xB433B 0x4054D4 0x4069A4

f:id:jaijai_lt:20200501195727p:plain:w400

最後に正しく登録されたのか確認してみます。次のコマンドを実行します。

bcdedit /enum {badmemory}

f:id:jaijai_lt:20200501200110p:plain:w400
アドレスは正しく登録できたようです。最後にWindowsを再起動します。

注意点・メモ

  • Windowsを再起動するまでbcdeditでの設定は反映されません。
  • Windows10のバージョン(1809や1903のこと)が変わる大きなアップデートが来た場合これらの設定が消去されることがあります。
  • Memtest86でエラーが多すぎて画面が流れてアドレスを見逃してしまう場合、Memtestを短時間で終わるテストに絞り動画撮影すると確認できます。
  • この記事は Blacklist bad memory addresses in Windows – xf.is blog の内容ほぼそのままです。