4-Gigabyte Tuning

4-Gigabyte Tuningまたは4GT RAM Tuningとは32ビットWindows NT系にて仮想アドレス空間のユーザ空間とカーネル空間の割り振り量を変更するための機能である。略称は4GT。/LARGEADDRESSAWAREや/3GBと称される事があるが前者はVisual C++のリンカとEditbin.exeにおける4GT対応アプリケーションを作るためのオプション名、後者はXP/2003までのWindowsで4GTを有効にするためのオプション名であり機能名を指す場合には正しくない。
概要.
32ビットWindows NT系では4GBの仮想アドレス空間をユーザーモードとカーネルモードで共有しており、既定では下位2GBをユーザ空間、上位2GBをカーネル空間に割り振っている。4GTを有効にする事でこの割合をユーザ空間を2GBから3GBの間で増やし、カーネル空間を2GBから1GBの間で減らす事により実質的にアプリケーションが使えるメモリを増やす事が出来る。4GTに対応したアプリケーションの開発にはPEヘッダに4GT対応を表明するIMAGE_FILE_LARGE_ADDRESS_AWAREビットが立っているだけでよく、Address Windowing Extensions APIのような大きなソースコードレベルでの変更を必要としない。このため行儀のいいコードで書かれたアプリケーションであれば非対応となっていても後から実行ファイルに変更を施し対応表明を行うことが出来る。
対応エディション.
4GTは以下のエディションで設定可能である。
Windows 9x系には設定を行う項目自体が無く、上記以外のNT 4.0 Server、2000 Professional、2000 Server等においては4GTを有効にする設定を行った場合カーネル空間が1GBに減るだけでユーザ空間は何の恩恵も受けることはない。
デメリット.
カーネル空間が既定の2GBから減ることにより主に以下のペナルティが生じる。
これらの減少によりカーネルリソースを多く利用するアプリケーションでは動作が不安定になるため4GTの利用は非推奨であるうえ、利用する際は徹底的にテストを行うよう指示している。とりわけソケットを多く使うWebサーバーでは甚大な被害と呼ぶほどである。XP/2003以降では問題の緩和のため4GT有効時の割り振りをNT 4.0/2000でのユーザー3GB固定ではなく2GBから3GBの間でエンドユーザーが任意に調整できるようになり、XP/2003ではカーネルに戻された分はシステムPTEとして使われるがそれ以外のメモリプールは減ったままである。これらのペナルティはDynamic Kernel Address Spaceを採用したVista/2008以降のカーネルでは大幅に緩和されてはいるものの、それでも既定よりカーネル空間が減った分のカーネルリソースの利用可能最大値は減少する。
64ビットWindowsにおける4GT.
64ビットWindowsには4GTのようなユーザー空間とカーネル空間の割合を調整するオプションは用意されていない。仮想アドレス空間が16TB以上あり必要とされておらず、設定もなんの効力も持たない。
WOW64上では4GT対応アプリケーションに対しアドレッシング可能な4GBをカーネル側のペナルティ無しで使用できる。32ビットプロセスでアクセス可能な仮想アドレス空間にカーネル空間が存在せず、4GB全部をユーザーに割り当てられるためである。