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になる。