misc.log

日常茶飯事とお仕事と

AWEの使用

4GT(/3GBオプションによるユーザープロセス用メモリ空間の拡張)については、http://d.hatena.ne.jp/frontline/20081009/p1 に書いたとおりだいたい期待通りの結果と設定が行えたので、次は/PAEオプションで大容量物理メモリを認識させて、AWEでそこを使って見るという話に。

とりあえずざっと検索すると出てくるのが、SQL Server 2008に関する記述。

SQL Server 2008オンラインブック/AWEの使用
http://msdn.microsoft.com/ja-jp/library/ms175581.aspx

ここによると、AWEはWindowsのAWE APIを使って利用できるようで...APIですか。苦手なんですが。これ自作のテストツールで試したりできるもの....なんでしょうね。出来る人には。

とりあえず...

  • AWEを使うには/PAEオプションがONである必要がある(←ONでなくても使えそうだが、あまり効果は無いし逆効果かもしれない)。
  • ホットアドメモリデバイスが使用されている場合は、/PAEは自動的にONになる。
  • ハードウェア(CPU)でDEPがONになっている場合は、/PAEは自動的にONになる。
  • /3GBオプションがONの場合は、PAEの制限でWindows Server 2003 Ent/Datacenter SP1までは16GBまで、SP2以降は64GBまでしかメモリを使えない*1。この制約を超える領域を使う場合は/3GBをOFFにすること。

ホットアドメモリって...あれでしょうか?電源ONの最中でも増設可能とか?
あと、SQL Serverでもサポートしているみたいだから、実際の利用に関する検証はSQL Serverを使うのが楽かもしれないなぁ...というわけで設定をみてみた。とりあえず自分PCに入っているSQL Server 2005でManagement Studioからツリーのデータベースルート部分を選択、右クリック→プロパティで表示される設定画面の「メモリ」のところにある設定項目が、上の画像。これか。

ちなみに、AWEを自力で使う場合には、以下のAPIを使うようですよ。

  • VirtualAlloc / VirtualAllocEx 仮想ユーザーアドレス空間内に、AWEで利用するウィンドウ領域を確保します。
  • AllocateUserPhysicalPages AWEで利用する物理メモリを割り当てます。
  • MapUserPhysicalPages AWE用に確保したアドレス空間をAllocateUserPhysicalPagesで確保した物理メモリにマップ、またはマップ解除を行います。
  • MapUserPhysicalPagesScatter MapUserPhysicalPagesと基本的な機能は同じですが、複数領域のマップやマップ解除が可能です。
  • FreeUserPhysicalPages AWE用に確保した物理メモリを解放します。

*1:Windows Server 2003 Enterpriseはどのみち64GBが上限なので制約ではないのだけど、Datacenterは本来128GBまで使えるところが64GBになる。