読者です 読者をやめる 読者になる 読者になる

ʍoɹɐɥsのブ口グ

ส็็็็็็็็็็็็็็็็็็็็็็็็็ ส็็็็็็็็็็็็็็็็็็็็็็็็็ ส็็็็็็็็็็็็็็็็็็็็็็็็็ ส็็็็็็็็็็็็็็็็็็็็็็็็็ ส็็็็็็็็็็็็็็็็็็็็็็็็็ ส็็็็็็็็็็็็็็็็็็็็็็็็็ ส็็็็็็็็็็็็็็็็็็็็็็็็็ ส็็็็็็็็็็็็็็็็็็็็็็็็็ ส็็็็็็็็็็็็็็็็็็็็็็็็็ ส็็็็็็็็็็็

本当は怖いメモリ

TL;DR

ちょっと前から消費メモリが増えると不安定になるなぁと思っていた。

f:id:sharow:20160220205539j:plain f:id:sharow:20160220212823j:plain

もちろん買った時にmemtestでテストはしていた。エイジングにより不良が出ることを知ってはいたが、めんどくさいので2年以上テストせずにいた。久々にテストしたらこのありさま。

物はCORSAIRの永久保証メモリを新品で買ったものなので、新品or同等品への交換が受けられる筈。レシートが見つかり次第事を進める予定。

幸い虫が巣食ってる物理アドレスが後方なので後ろの物理アドレスを使わないようにすることで当分はしのげるだろう。

Windowsの場合、こういう設定はbcdeditで行う。これはブートエントリなどを設定をするツールだが、低レベルなメモリの設定も行える。そういえばLinuxの場合もmaxmemはGRUBの設定だったような。

物理アドレスの最大値はTRUNCATEMEMORYで指定する。今回のうちの例では

bcdedit /set TRUNCATEMEMORY 0x785b00000

を管理コンソールで実行して再起動。あとはsysinternalのRamMapとかで物理アドレスが制限されているか確認する。 ({ID}は省略すると現在の{ID}になる)

f:id:sharow:20160223153637p:plain

尻尾の1GiB程度を失ったが、4年ほど使ってるPCでこの程度なら合格点かな。

何が怖いのか

ソフトウェアやOSが落ちる程度ならかわいい。最悪、ファイルキャッシュにこの物理メモリが使われるとファイルが壊れる(Linuxで言うところのバッファキャッシュのこと)。幸い、大量のメモリを使わないと後方の物理メモリはあまり使われないようで、目に見える被害は今のところない。というか、Windows8から10にアップグレードしたときに直ってしまった。Windows8の時はイベントビューワのイベントファイルがぶっ壊れてたようで、イベントビューワが100%落ちるという状況だった。メモリ起因のファイル破損が原因だったと思われる。ああ怖い。

ECCメモリ

今回のように物理アドレスの後方だけが集中して壊れた場合はTRUNCATEMEMORYで対応できるが、いろんな箇所が分散して壊れた場合には対応できない。とてもよく分散して壊れた場合はTRUNCATEMEMORYではなくてBADMEMORYでページ(4KiB単位)ごとにブラックリストに手動で入れていくことができる・・が、本来はこれは自動で登録されるものだ。ECCメモリとECCメモリに対応したCPUを使っていれば、ECCエラーを検出したページをOSがBADMEMORYに登録してくれる。もちろん、これはLinuxでも対応している

もし長く使える堅牢な環境が欲しいなら、ECCメモリを狙うのもいいかもしれない。XeonE3あたりはそんなに高くない。・・・PC組んだ時にこっちにしておくべきだったと今更後悔している。組んだ当時は堅牢なPCが目的だったのになぁ。

PS

そういえば3か月前にはEIZOのモニタがぶっ壊れてお陀仏になったんだった。最近壊れるものが多い気がする。