言いたいことは今日のうちに

ただ書きたいことを書く、それだけ

仮想メモリの話 Windows7編 ver.2.0 2018-12-16

SFTBNKとかいう三大キャリアの屑は、障害を発生させても何の詫びもしない時点でお察しな気がしてきた。そもそもSFTBNKを使っているのはYahoo!プレミアムが実質無料であるというだけなので、これがなくなったら移籍も十分ありえるわけである。今度はMVNOにして、ポケットWifiを持っていけばいいかもしれない。どうせ4Gも使うことは少ないことだろう。ところでSFTBNKは詫びTポイントあくしろよ。

 

そんなKNCLUNEIやNCNCUNEI並みに屑のSFTBNKの話はゴミ箱に捨てて、みんな大好きPCの話をしよう。以前書いた仮想メモリの話が良く伸びているようなので、今回は仮想メモリの構成に苦しむ初心者でも快適になるように改訂版のような形で書いていく。直接飛んできたという人はとりあえず前回の分を見てほしい。

 

linkskibe.hatenablog.com

 

なお、今回新たに仮想メモリの話を書く時点でPCが新しくなっているので、その情報も載せながら書いていく。実は2号機は電源が入らなくなってしまい使用不可能になったので、前もって調達した3号機に更新したのである。

新たな環境

PC Name: HP EliteBook 8570w Mobile Workstation

ここで、もう動かないのなら不要と考えたため、2号機から使えるパーツのみを取り出したため、前回の記事から一部使いまわしている。入手した8570wはK2000Mが標準装備のものを選んでいるため、あと2つRAM装着領域が存在していた。そのためそのまま装着して24GB化したのである。

また、8570wは内部にmSATAも装着できる。ただし、これをブートディスクとして扱うことはできないようで、インテルRSTのキャッシュ領域として使用するために置かれているようである。残念ながらmSATAが間に合わなかったため、詳細は別の方に預けるものとする。

相変わらず、密林ではぼったくり価格なので、密林以外で探すこと。

 

作業開始: 仮想メモリをOFFにする

仮想メモリをなしにした場合の弊害については既に前の記事で説明したため、今回はユーザがすべき作業についてまとめる。

  1. コントロールパネル>システムとセキュリティ>システム から、左の「システムの詳細設定」を開く。
  2. 新たに開いたウィンドウ「システムのプロパティ」で「パフォーマンス」の設定を開き、「詳細設定」タブを選択する。そこの「仮想メモリ」の変更を開く。
  3. 最初に仮想メモリの断片化を修正するため、ページング ファイルなし(N)を選択して設定を押す。設定を押さないと反映されないので注意。何か警告が出るが無視していい。確認後OKを押して閉じる。再起動要求をされたら再起動する。

f:id:murakoshi6etu:20181217154606j:plain

素直に再起動する

大抵このように警告されるので、素直に再起動する。

 

再設定: メモリ実装値分設定、初期サイズ=最大サイズ

再起動したら再度同じ場所を開く。まず、「自動的に管理する」のチェックをはずす。そうしないと悲惨なことになる。チェックがはずれていることを確認したら、「カスタムサイズ」を選択し、パーティションを切っている場合はシステム以外のドライブに仮想メモリを設定する。切っていない場合はそのままでいい。設定後に再起動要求をされたらもう一度再起動する。

ここで初期サイズと最大サイズはどうすればいいか、という話が出てくるが、今までやってきて出ている結論として、まず初期サイズ=最大サイズとすること、そして設定するのは現在実装されているRAM分設定しておくべき、ということである。サイズ統一は断片化を防ぐ目的があり、実装RAM分の設定はRAM内に残ったハードディスクに書き込まれていないデータを書き込むために必要であるからである。後者については説明が必要なので、後述する。

f:id:murakoshi6etu:20181217160856j:plain

1024x(実装RAM)で計算するとわかりやすい

 

余談: 断片化しやすいもう1つのシステム

ここまで設定が完了したところで、断片化の整理をする目的で触れておきたいのが、Windowsの「休止モード」である。このモードは簡単に言えば、超省エネスリープモードである。RAMのデータをハードディスクに退避して、RAMへの電源供給をカットする。そのためかなりの節電になるが、RAMのデータは蒸発するので再起動時は退避したデータをもう一度RAMに起こす作業が入る。そのため再起動に少しだけ時間がかかる。なお、この機能はラップトップの節電のために使われることの多い機能で、バッテリー等の制約がないデスクトップには実装されていない場合があるので注意。

この休止モードも、RAMを丸ごと退避する関係上、実装されているRAM分の領域を必要とする。また、RAMを交換した際はシステムが自動でその領域を拡大する。本来であれば領域はハードディスク上で一続きの領域になるが、大抵ほかのデータが途中にあるため、確実に断片化しやすい。また、通常のデフラグでは修正できないため、一度休止モードを無効にして再度有効にすることでデフラグするようにする。

なお、この操作はコマンドプロンプトを使用する。たった2行で済むが本来は上級者向けであるので、初心者は迂闊に実行してはいけない(戒め)。

  1. CMD(コマンドプロンプト)を管理者権限で開く。
  2. powercfg.exe /h off
  3. powercfg.exe /h on

これだけでOK。一度切ってから再度設定することで、自動で一続きの領域を設定してくれる。これで断片化の整理は完了した。

 

本編へ戻る: なぜ実装RAM分仮想メモリを設定するのか

断片化の整理も終わったところで、なぜ実装RAM分仮想メモリを設定したほうがいいのか、という話をする。これには1つ推測したことがあり、前回の記事で挙げたempty.exeとRammap.exeの"Empty Modified Page List"実行後の「変更済み」領域についてである。

仮想メモリがない場合、上記2つを実行しても何の反応もないままメモリが占有されてしまう現象、そして仮想メモリを実装していると実行と同時に「変更済み」領域が減少していく現象を前回の記事で述べている。このことから仮想メモリはRAM用の書き込み領域でもあり、これがない場合「変更済み」領域をディスクへ書き込むことはできず、設定されている場合ディスクに書き込まれ、変更が元のデータに書き込まれた後「変更済み」領域はクリーンになる、ということを推測した。推測なのは、OSやサービスの構造を熟知しているわけではないのと設計者でもないため、詳細は分からないためである。

この推測はただの推測の域を出ないため、正解も不正解もない。しかし、(システムの構成上ありえないが)RAM上限8GBで、8GBフルに「変更済み」だったとすればどうか、という話である。これも結局推測だが、仮想メモリ設定が4GBなら4GBしか書き込まれない、となるだろう。このことはゲームなどをして検証してみなければ分からないのだが、そもそもの話、いくら8570wが以前よりハイスペックといっても、これでゲームできるほどではないからである。やるなら素直にRTX2070くらいを搭載したデスクトップでやりたい。

それはともかく、一度に大量の「変更済み」メモリを書き込むには、その占有RAM以上の仮想メモリの設定が必要であると考える。したがって、最悪の事態を想定して、実装RAM分設定しておくのが最適解であると結論付ける。常に最悪を考慮することで、仮にその事態に陥ったとしても切り抜けることが可能だからだ。

なお、前回述べた、「ゲームプレイ時は実装の2倍」説に関しては、実装RAMが8~16GBの少なすぎる場合に設定すべき数値で、最低32GBあれば実装と同じでかまわないと考えている。もっとも、ゲーミングPCのRAMがそんなに低いわけがないのだが(HP OMENみたいなゲーミングノートならありえる)。

よって、結論

仮想メモリは実装RAM分設定しておけ。

Q.E.D.

 

補足: 起動時RAM占有現象について原因が判明

前回の記事にて、netprofmが最初の5分、RAMを占有してしまう現象について述べた。当時は解決法がないため放置をしていたが、後にレジストリの異常であることが判明した。その解決方法を載せておく。同じ現象に悩んでいる人がいたら、是非試してほしいものである。なお、例によって初心者は迂闊に実行してはいけない(戒め)。

  1. 窓+Rで"regedit"と入力してレジストリエディターを起動する。
  2. HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows NT\CurrentVersion\NetworkList\Signatures\(16進数の何か) に次の値がある。"Category"=dword:00000001 これを削除し、そのディレクトリも削除する
  3. HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows NT\CurrentVersion\NetworkList\Signatures\(16進数の何か) に次の値がある。 "NetworkName"="VPN Network", "Icon16"="", "Icon24"="", "Icon32"="", "Icon48"="" これらを削除し、そのディレクトリも削除する。
  4. 再起動してRAMが異常に増えなければ成功。

レジストリキーの名前から、おそらくVPNに関わるものだと思われる。VPNを導入した後で重いと感じたら疑ったほうがいいだろう。ちなみに、上記のせいで不要なファイルも溜まっているので、ついでにこれも掃除しておくと快適になる。その場合、次のディレクトリ "C:\Windows\System32\NetworkList\Icons" に、異常にファイルサイズが大きい.binファイルがあるので削除する。目印として、当時の環境では2GBごとに区切られた.binファイルが存在していた。そうでなくとも、異常にサイズが大きいのが犯人なので削除してやる。レジストリを削除した後なら復活することもないので、少しばかり容量に余裕ができる。いらないものはどんどん排除していこう。

 

長くなったが、仮想メモリはいつの時代もみんなの悩みの種らしい。Windows7もサポートが切れるとはいえ、(擬似iPhoneAndroidみたいな)Windows10を使いにくいと思っている人はまだまだいるということであり、Windows10に完全以降した後でもおそらくこの話はしばらく重宝されることだろう。

また、環境がWindows10になった場合は、その場合の設定方法でも書くことにする。その頃には新しいバージョンになっている可能性もあるが、仮想メモリで困っているのなら、仮想メモリの設定の仕方はここで解決してほしいものである。他にも多数の情報が載っているとは思うが、その中からここを選んでくれたことを後悔させたくないので、PC関連の話はかなり気合を入れて書いている。そして解決してくれれば、それに越したことではない。こういうタイプの知識の共有は、もっと促進されるべきでもあると思う。

何かPCの話題で知識の共有をすべきことを見つけたら、こうして書きたいと思う。それじゃあ、また。

 

今回の一言

ゲーミングノート買うなら素直にゲーミングデスクトップ買え。