2014.11.17:登録カテゴリーの変更
過去記事
「Windows 8/8.1 で気をつける事メモ(hiberfil.sys,pagefile.sys)」
の一部を訂正し、それに伴う更新です。
Windows8/8.1の「swapfile.sys」は、何のためのファイルか?どういう役割を果たしているのか?という疑問を解決する為のページです。
該当記事のコメント欄でツッコミと参考リンクを頂き、ようやく理解しました。
参考リンク1
Windows 8 / Windows Server 2012: The New Swap File - Ask the Performance Team Blogs
リンク先の要約
Windows 8 や Windows Server 2012 で新しく登場した「swapfile.sys」は、モダンアプリのサスペンド/レジュームを素早く行うためのファイルである。
(高速起動に関する記述は一切無い)
ということで、swapfile.sysはメモリが不足した際のモダンアプリの挙動をスムーズにする為のファイルである、というのが正しい情報のようです。
※このページの最後に「hiberfil.sys 無効 & swapfile.sys有効で発生する問題」についての推察も記載しています。
参考リンク2 (本文から少し脱線)
Windows 8 でお届けする高速な起動 - Building Windows 8 - Site Home - MSDN Blogs
▲ページ中段に、Windows8がhiberfil.sysを利用して高速起動を実現している旨の解説が載っています。
また、Windows8が高速起動できるのは、マルチコア システムですべてのコアを並行利用し、休止状態ファイルの読み込みを行う旨が解説されています。
以下、ちょっと頑張って参考リンク1「Windows 8 / Windows Server 2012: The New Swap File」の内容を部分的にですがざっくり意訳してみました。
「参考リンク1」の一部 意訳文
このページでは、Windows8で登場した新しいスワップファイルについて紹介するよ。Windows8では、「どうして新しい仮想メモリ(ページファイル)が必要になったの?」と思うかもしれないけど、モダンアプリの導入や、それらで利用するメモリ領域を、「従来のメモリ領域とは異なった場所、異なった方法で」管理をする必要があったんだ。
そういうわけで、新しい仮想ファイル「swapfile.sys」が生まれたんだ。
Swapfile.sysとメモリマネージャの相互作用
Windows8はシステム全体を快適に作動させるため、メモリがひっ迫すると、休眠中のモダンアプリを停止させ、空きメモリを確保するんだ。
これは「『特定のアプリのみ』を(PCのスリープのように)休止させる」という感じだ。もちろん、PCをスリープから復帰させるような感じで、それぞれのアプリを復帰できる。メモリ使用量は、モダンアプリのプロセス単位でサスペンド/レジュームで空できたり、元に戻せたりするよ。
スワップ時の作動を図解
1.「プロセス・ライフタイム・マネージャ」(PLM)がメモリのひっ迫を検知すると、「メモリマネージャ」(MM)に「特定のモダンアプリのメモリを空にできないか?」という問いかけを行うんだ。
1.の図
▲クリックで拡大
メモリが足りなくなると、PLMが各プロセスをチェックし、サスペンド中のプロセスの情報をMMに送る。(リンク先の図解を見る限り、大量にメモリを消費しているプロセスを優先して避難させる感じかな?)
2.まずMMは「サスペンド中のモダンアプリ」をレジュームする前に、使用メモリを「modified page list」に移動させるんだ。
2.の図
▲MMはサスペンド中のモダンアプリのメモリを「モジュール・ページリスト」に移動させる。これでプロセスの使用メモリ・ページはとても小さくなるよ。
3.その後 MMは、「modified page list」に入ったデータをメモリからDiskへ非同期でバックグラウンドで書き出すんだ。
3.の図
▲「モジュールページリスト」に格納されたデータは、MMによって後から非同期でHDDやSSDに書き込まれるよ。
4.そしてモダンアプリの使用メモリがDiskへ書き出された後も、プロセスの使用メモリは「OSのスタンバイリスト」に無傷で残されるんだ。これはキャッシュの使い方として非常に有効で、必要に応じて他のモダンアプリで利用することが可能なんだよ。
また、このページをすぐに再利用する場合も、素早く呼び戻すことが可能なんだ。
4.の図
▲MMは、(HDDやSSDにデータを書き込んだ後も)必要に応じて「(残しておいた)モジュールページリスト」のデータを「スタンバイリスト」に送り込 むよ。
このような仕組みをとる事で、ユーザーが休止されたモダンアプリにすぐに戻る場合でも、ページファイルに移動したファイルは(modified page list、 standby list として)物理メモリに残っているので、素早くプロセスを呼び戻すことが可能になるんだ。
「モジュールページリスト」のデータが失われても、Diskやスタンバイリストに記憶された領域から呼び出せるから安心なんだね!
以上、意訳文おわり。
あとがき&推測
という訳で、リンク先ページを読む限り、Swapfile.sysはモダンアプリのサスペンドとその復帰に利用されるファイルのようです。
Windowsの高速起動に関する記述は一切なし、でした。
- pagefile.sysをゼロに設定するとswapfile.sysもゼロになるという挙動は、このリンク先の情報で説明が付きそうです。
- Windows8/8.1の高速スタートアップが無効化される現象は、「pagefile.sysやswapfile.sysの有無に関わらず、hiberfil.sysを無効にした場合にのみ、発生する」という感じで解釈するのが良いのかもしれません。
- hiberfil.sys無効・swapfile.sys有効の状態で再起動するとロールバックが発生する件は・・・
- デスクトップとモダンアプリ両方に跨っているプロセス (つまりIEやスタートメニューなど)が「スタンバイリスト」に入り、swapfile.sysに保存されているために起きるのかも知れません(私の勝手な予測)