ホワイトペーパー: Windows のメモリ管理の進歩

Windows のメモリ管理の進歩 (via id:kkamegawa:20071024:p2)
ちょっと目を通してみました.軽くメモ.

Feedback

この資料に関してのフィードバックはこちらへ.
http://connect.microsoft.com/Survey/Survey.aspx?SurveyID=4925&SiteID=221

Page-File Writes

  • Windows Vista では変更済みページの内容をチェックして,ページ内容が全て 0 であれば zero page に差し替えるようになった.調査では 7〜8% の書き出しがこの改良で回避される.*1
  • 以前のバージョンの Windows ではページファイルへの書き出しは 64 kbyte 単位で行われていて,ディスク I/O の回数が多くなっていた.Windows Vista では,書き出し単位の制限を撤廃し,一度にまとめて書き出しできるようになった.Vista での典型的な書き出しサイズは 1 MB である.
  • 以前のバージョンの Windows は可能な限り速やかにページファイルへ書き出しを行うように設計されていた.Windows Vista では,連続領域のまとまった書き出しを優先させる.
  • Windows Vista SP1 と,Windows Server 2008 では,空き物理メモリと HDD の電源状態に応じてページファイルの書き出しタイミングを遅らせるようになる.これによりノート PC での電力削減に繋がる.

Address Space Layout Randomization (ASLR)

  • ASLR をサポートしない DLL は今まで通り
  • ASLR をサポートする DLL は,初回ロード時にアドレスがランダムに決定される.以降のプロセスでは同じアドレスを使うことで,メモリ共有の効率を悪化させないようにしている.全てのプロセスから DLL がアンロードされると,次回のロードでは再び ASLR が行われる.
  • Visual Studio 2005 SP1 以降の linker で,/DYNAMICBASE と /NXCOMPAT オプションを付けると,ASLR をサポートするようになる.

Large page support

  • Windows Server 2003 から,ユーザーモードアプリケーションでも large page が使用できるようになった.Windows Vista でもサポートされる.VirtualAlloc に MEM_LARGE_PAGES フラグを付ける.large page の最小サイズは GetLargePageMinimum で取得できる.

Diagnosis of Hardware Errors

  • zero page の内容が本当に 0 か確かめるようになったことで,DMA に関するエラーや宇宙線による soft error,不良メモリ等によるビット化けがイベントログに足跡を残すようになる.

What You Should Do

  • ハードウェア製造業者むけのメッセージは次の一言.


感想

メモリ搭載量が GB という時代らしい改良が多い.

  • 仮想アドレス空間/物理メモリ空間が巨大になってきたことで,最初からアドレスを決めうちするより,実行時にアドレスを決定する方向に移行してきている.特に今回カーネル空間のメモリ配置ががらっと変わった.
    • パラメータよりメカニズムという観点でこういう変更は必要.
  • HDD のレスポンスタイム/スループットの向上よりも,CPU 速度の向上の方が速いことが,ソフトウェアサイドの改良の素地を作っている気がする.
    • 0 ページ書き出しの回避などはその例か.
  • ECC の件については激しく同意.(Soft Error and PAGE_NOT_ZERO stop)

*1:この改良によって,id:NyaRuRu:20071011:p1 で懸念していたゼロクリアデータの書き出しは,Windows Vista 以降では回避されることが分かります.