Last week, while planning blog posts for April, it occurred to me that although we had provided information on using the /3GB switch in the boot.ini file on Windows Server 2003, we hadn’t followed up with a post about how to implement this same functionality in Windows Vista and Windows Server 2008. Beginning with Windows Vista, boot configuration parameters are stored in the Boot Configuration Data (BCD) store. We’re not going to go into details on the BCD Store, or the utility to manage the BCD Store, BCDEDIT.EXE. If you want to read more about it, there is a BCD FAQ on TechNet that goes over the new functionality.
Configuring the /3GB functionality using BCDEdit is not a difficult task. You’ll need Administrator privileges, and an elevated command prompt. The command itself is actually very simple: BCDEDIT.EXE /Set IncreaseUserVa <value>. <Value> in this command represents the number of megabytes that a user-mode process can use. If you think of 1GB as 1024 MB (2^10) then to allow 3GB of memory we allot 3*1024 MB = 3072 MB. Thus our command becomes BCDEDIT.EXE /Set IncreaseUserVa 3072. We can tune this value as needed, just like we did when we combined /3GB and /USERVA in the boot.ini. To set /3GB /USERVA=2970, we would BCDEDIT.EXE /Set IncreaseUserVa 2970. Fairly straightforward, right?
Let’s see what it looks like. I ran through this scenario on a Windows Vista Enterprise SP1 machine. First, let’s use Process Explorer to take a look at the default configuration where the Virtual Memory space is split equally – 2GB for kernel mode, and 2GB for user mode
And then let’s take a look at this information in a debugger:
Now that we have a decent idea of what our baseline system looks like, let’s set the IncreaseUserVa value to 3072 (3GB).
And we can see below that our value has been set in the BCD Store.
Following a reboot to allow the change to take effect, let’s look at our Process Explorer and Debugger information again:
As we can see, our Paged Pool limit has decreased by around 50% and our free Page Table Entries have also decreased significantly.
Should you find yourself in a situation where you need to reset the IncreaseUserVa value back to a default setting on a 32-bit system you can either re-run the BCDEDIT.EXE command and set the IncreaseUserVa value to 2048, or … you can remove the user-defined value from the store as shown below:
Remember that whenever you modify this value, you will need to reboot your system for the change to take effect. And with that, we’ve reached the end of this post. Until next time …