Penyetelan 4-Gigabyte: BCDEdit dan Boot.ini

Pada edisi Windows 32-bit, aplikasi memiliki ruang alamat virtual 4 gigabyte (GB) yang tersedia. Ruang alamat virtual dibagi sehingga 2 GB tersedia untuk aplikasi dan 2 GB lainnya hanya tersedia untuk sistem. Fitur penyetelan 4 gigabyte (Penyetelan RAM 4GT atau 4GT), diaktifkan dengan perintah BCDEdit /set increaseuserva , meningkatkan ruang alamat virtual yang tersedia untuk aplikasi hingga 3 GB, dan mengurangi jumlah yang tersedia untuk sistem menjadi antara 1 dan 2 GB.

Untuk aplikasi yang intensif memori, seperti sistem manajemen database (DBMS), penggunaan ruang alamat virtual yang lebih besar dapat memberikan manfaat performa dan skalabilitas yang cukup besar. Namun, cache file, kumpulan halaman, dan kumpulan yang tidak disebarkan lebih kecil, yang dapat berdampak buruk pada aplikasi dengan jaringan berat atau I/O. Oleh karena itu, Anda mungkin ingin menguji aplikasi Anda di bawah beban, dan memeriksa penghitung kinerja untuk menentukan apakah aplikasi Anda mendapat manfaat dari ruang alamat yang lebih besar.

Untuk mengaktifkan 4GT, gunakan perintah BCDEdit /set untuk mengatur opsi entri boot increaseuserva ke nilai antara 2048 (2 GB) dan 3072 (3 GB).

Windows Server 2003 dan yang lebih lama: Untuk mengaktifkan 4GT, tambahkan sakelar /3GB ke file Boot.ini. Sakelar /3GB didukung pada sistem berikut:

  • Windows Server 2003
  • Windows XP Professional

Sakelar /3GB membuat ruang alamat virtual 3 GB penuh tersedia untuk aplikasi dan mengurangi jumlah yang tersedia untuk sistem menjadi 1 GB. Pada Windows Server 2003, jumlah ruang alamat yang tersedia untuk aplikasi dapat disesuaikan dengan mengatur sakelar /USERVA di Boot.ini ke nilai antara 2048 dan 3072, yang meningkatkan jumlah ruang alamat yang tersedia untuk sistem. Ini dapat membantu mempertahankan performa sistem secara keseluruhan ketika aplikasi membutuhkan lebih dari 2 GB tetapi kurang dari 3 GB ruang alamat.

Untuk mengaktifkan aplikasi untuk menggunakan ruang alamat yang lebih besar, atur bendera IMAGE_FILE_LARGE_ADDRESS_AWARE di header gambar. Linker yang disertakan dengan Microsoft Visual C++ mendukung sakelar /LARGEADDRESSAWARE untuk mengatur bendera ini. Mengatur bendera ini dan kemudian menjalankan aplikasi pada sistem yang tidak memiliki dukungan 4GT seharusnya tidak memengaruhi aplikasi.

Pada Windows edisi 64-bit, aplikasi 32-bit yang ditandai dengan bendera IMAGE_FILE_LARGE_ADDRESS_AWARE memiliki ruang alamat 4 GB yang tersedia.

Edisi Itanium Windows Server 2003: Sebelum SP1, proses 32-bit hanya memiliki ruang alamat 2 GB yang tersedia.

Gunakan panduan berikut untuk mendukung 4GT dalam aplikasi:

  • Alamat di dekat batas 2 GB biasanya digunakan oleh berbagai DLL sistem. Oleh karena itu, proses 32-bit tidak dapat mengalokasikan lebih dari 2 GB memori yang bersebelahan, bahkan jika seluruh ruang alamat 4 GB tersedia.
  • Untuk mengambil jumlah total ruang virtual pengguna, gunakan fungsi GlobalMemoryStatusEx . Untuk mengambil alamat pengguna setingkat mungkin, gunakan fungsi GetSystemInfo . Selalu deteksi nilai nyata saat runtime, dan hindari menggunakan definisi konstanta kabel keras seperti: #define HIGHEST_USER_ADDRESS 0xC0000000.
  • Hindari perbandingan yang ditandatangani dengan pointer, karena dapat menyebabkan aplikasi crash pada sistem berkemampuan 4GT. Kondisi seperti berikut ini salah untuk pointer yang di atas 2 GB: if (pointer > 40000000).
  • Kode yang menggunakan bit penunjuk tertinggi untuk tujuan yang ditentukan aplikasi akan gagal ketika 4GT diaktifkan. Misalnya, kata 32-bit mungkin dianggap sebagai alamat mode pengguna jika di bawah 0x80000000, dan kode kesalahan jika di atas. Ini tidak benar dengan 4GT.

VirtualAlloc biasanya mengembalikan alamat rendah sebelum alamat tinggi. Oleh karena itu, proses Anda mungkin tidak menggunakan alamat yang sangat tinggi kecuali mengalokasikan banyak memori atau memiliki ruang alamat virtual yang terfragmentasi. Untuk memaksa alokasi mengalokasikan dari alamat yang lebih tinggi sebelum alamat yang lebih rendah untuk tujuan pengujian, tentukan MEM_TOP_DOWN saat memanggil VirtualAlloc atau atur nilai registri berikut ke 0x100000:

\ HKEY_LOCAL_MACHINE Sistem\CurrentControlSet\Kontrol\Manajer\ Sesi Manajemen\ Memori AllocationPreference

Batas Memori untuk Rilis Windows

Ekstensi Alamat Fisik

Referensi Teknis 4GT