SP1までわかる!Windows Server 2008 R2入門 第3回
スケジューリングには新機能
Windows Server 2008 R2はメモリ管理も強化
2011年06月01日 06時00分更新
前回は、Windows Server 2008 R2のカーネル周りの新機能として、最大256コアにも対応するマルチプロセッササポートの強化を紹介した。続いては、メモリ関連、そしてアプリケーションのスケジューリングに関する新機能を見ていこう。
メモリ管理の強化
Windows Server 2008 R2では、メモリ管理の仕組みが改善されている。従来、OSが割り当てる物理メモリ(ワーキングセット)は、システム領域を一括して割り当てていた(図1)。これが、Windows Server 2008 R2からは用途別に分割されたのだ。

図1 ワーキングセットの割り当て
これにより、大きなファイルをコピーするときにキャッシュサイズが肥大化し、システムコード領域が圧迫されてページアウトしてしまう事態を防げるようになった(図2)。また、デスクトップウィンドウマネージャーのメモリ使用量を50%削減し、GUIのオーバーヘッドを低減している。

図2 システムキャッシュの肥大化
さらにメモリ使用量を下げたい場合は、Server Coreとしてインストールすることも可能だ(画面1)。Server CoreはWindows Server 2008からサポートされているインストール形態で、エクスプローラーやリッチなウィンドウシステムを持たない。完全なコマンドオンリーの環境ではなく、コマンドプロンプトは複数開け、メモ帳や「レジストリエディター」など一部のアプリケーションはウィンドウで使える。しかし、基本的にはすべての管理操作をコマンドで行なう。
ほかに、Windows Server 2008のServer Coreでは、.NET Frameworkが使えないためASP.NETやPowerShellが動作しなかった。だが、Windows Server 2008 R2からはこうした問題は解決されている。Server Coreのメモリ消費量は、フルインストールの半分と考えればよいだろう。利用可能なコンポーネントが少ないぶん、セキュリティ修正の個数もざっと半分である。
メモリ割り当ても改善
Windows Server 2008 R2では、メモリ使用量だけではなく、性能も向上している。Windowsでは物理メモリの割り当てを4096バイトのページ単位で行ない、ページはページフレーム番号(PFN:Page Frame Number)で管理している。PFNの割り当てを変更する場合、従来のWindowsでは管理情報全体をロックしていた(PFNロック)。
一方、Windows Server 2008 R2では、PFNロックを廃止。PFN全体ではなく、個々のPFN単位でロックを行なう。ちょうどディスパッチャーロックの改善と同様のアイデアを使うことで、大量のメモリを使用するアプリケーションの動作が高速になった(正確にはPFNロックによる速度低下が起きない)。
さらに、信頼性も向上した。マイクロソフトの調べでは、ユーザーモードアプリケーションが異常終了する原因の15%が「ヒープ」破壊によるものだという。ヒープとは、アプリケーションが自由に確保できるメモリである。アプリケーションはOSに対してヒープ上のメモリを要求し、不要になれば解放する。しかし、この手順を守らないとさまざまな不具合が発生する。たとえば、アプリケー ションが1MBしか要求していないのに2MBの書き込みを行なうと、OSがそれを検出して例外を発生させ、アプリケーションが異常終了してしまう。
この問題を解決すべく、Windows Server 2008 R2では「フォールトトレラントヒープ(FTH)」と呼ばれる機能が実装された。同一内容の異常停止が1時間以内に複数回発生した場合は、自動的にアプリケーションを修正する機能だ。ここで行なわれるアプリケーションの修正は、アプリケーション互換性維持の仕組みを応用したものである。通常、アプリケーションの修正は管理者やプログラマーが「互換性データベース」を明示的に設定することで行なうが、Windows Server 2008 R2では「FTH Shim」と呼ばれる修正が自動的に行なわれる。
FTH Shimは以下の3点を修正する仕組みである。
- ネイティブヒープを使ってアプリケーションヒープの利用状況を検証。アプリケーションが要求したヒープは、OSの管理領域であるネイティブヒープから切り出される
- アプリケーションヒープを確保するときに4MBぶんだけ余分に保持しておき、ヒープを誤って2回解放するリスクに備える
- アプリケーションヒープを余分に(最大4MB)確保しておき、確保したヒープ領域を超えてアクセスするリスクに備える
Windows 7やWindows Server 2008 R2では、アプリケーションが異常停止しても、何度か連続で実行すると正常動作することがある。これは上記のような修正の仕組みが備わっているからだ。アプリケーションプログラマーはこうした自動修正機能に頼るべきではないが、ユーザーにとっては便利な機能といえるだろう。
(次ページ、「スケジューリングには新機能」に続く)

この連載の記事
- 第9回 2008 R2で追加されたActive Directoryの新機能
- 第8回 Windows Serverのブランチオフィスサポートの実力は?
- 第7回 R2とSP1の強化されたVDIで何ができる?
- 第6回 VMware対抗機能「ダイナミックメモリ」を搭載したHyper-V 2.0
- 第5回 バージョンアップしたHyper-V 2.0の実力を知ろう
- 第4回 カーネル改良で省電力を追求したWindows Server 2008 R2
- 第2回 R2の新カーネルは256コアもの大規模サーバーに対応
- 第1回 Windows Server 2008 R2はなにが変わったのか
- SP1までわかる!Windows Server 2008 R2入門<目次>
- この連載の一覧へ