このページの本文へ

前へ 1 2 次へ

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からサポートされているインストール形態で、エクスプローラーやリッチなウィンドウシステムを持たない。完全なコマンドオンリーの環境ではなく、コマンドプロンプトは複数開け、メモ帳や「レジストリエディター」など一部のアプリケーションはウィンドウで使える。しかし、基本的にはすべての管理操作をコマンドで行なう。

画面1 簡易的なGUIのみを持つServer Core。マイクロソフトのシステム要件によれば、最小メモリ容量は512MBだ

 ほかに、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点を修正する仕組みである。

  1. ネイティブヒープを使ってアプリケーションヒープの利用状況を検証。アプリケーションが要求したヒープは、OSの管理領域であるネイティブヒープから切り出される
  2. アプリケーションヒープを確保するときに4MBぶんだけ余分に保持しておき、ヒープを誤って2回解放するリスクに備える
  3. アプリケーションヒープを余分に(最大4MB)確保しておき、確保したヒープ領域を超えてアクセスするリスクに備える

 Windows 7やWindows Server 2008 R2では、アプリケーションが異常停止しても、何度か連続で実行すると正常動作することがある。これは上記のような修正の仕組みが備わっているからだ。アプリケーションプログラマーはこうした自動修正機能に頼るべきではないが、ユーザーにとっては便利な機能といえるだろう。

(次ページ、「スケジューリングには新機能」に続く)


 

前へ 1 2 次へ

カテゴリートップへ

この連載の記事
  • 角川アスキー総合研究所
  • アスキーカード