Last week I was asked by my boss that how do we know that if production server has PAE enabled ?? Since we are using Windows Server 2003 x86 with about 16Gb Ram, we’ve always assumed that we have it enabled because in task manager we can find that OS actually “see” all 16Gb ram. But what is the proof of it ??
Before I tell you how did we find the answer, few things about PAE and 32-bit OS. As we know that 32-bit OSes are bound to max limit of 4Gb RAM. Which means that even if we have more than 4Gb ram, OS will not actually use it since it can’t map that memory with registers (2^32 = 4294967296). The answer to this limitation is use of PAE switch which actually makes OS to behave as a 36-bit system so now it has additional 4 bit which can be used to map more ram (2^36 = 68719476736). But these “extra” mapping requires to use a portion of ram as well, hence for some applications the performance is not as good as compared to 64-bit OS which has practically no limit (2^64 = 18446744073709551616) as of today, SQL Server is one of that applications (but that discussion is for some other time). So, in short using PAE we can actually enable our OS to use more that 4Gb ram.
Ok, so back to discussion… how do we know for sure that PAE is enabled in our OS ? There are few ways to answer this question. First method is to just check for Boot.ini file and see if it has /PAE. Your boot.ini file will look something like this (beware of that it may have different entries.)
multi(0)disk(0)rdisk(0)partition(2)\WINDOWS="Windows Server 2003, Enterprise" /fastdetect /PAE
As you can see it has /PAE switch which is clear indication of enabled PAE. But sometimes it is not that easy to find the answer (which was in our case ). If your server has hot-add memory ability (ability to add more memory without shutting down the server !!) or data execution prevention (DEP) is enabled then PAE will be enabled automatically !! And weird thing is you won’t see any related entry for PAE in your boot.ini file !! The way to check if you DEP enabled is to look for /NOEXECUTE switch in boot.ini file. So your file may look like something as follows,
multi(0)disk(0)rdisk(0)partition(2)\WINDOWS="Windows Server 2003, Enterprise" /fastdetect /NOEXECUTE
And that ended our quest to find the answer, how can we be sure that PAE is enabled in our 32-bit Operating System ?
That’s it for now…
It’s Just A Thought …