As many of you know, I’m a huge advocate of running x86_64 operating systems on AMD64 or EM64t (Intel) systems. It’s just the “right” thing to do in my opinion, and you are simply wasting your hardware if you don’t, especially if you have more than 3GB of RAM; I say 3GB rather than 4GB since most “end-user” oriented PC’s do not have a BIOS capable of mapping the 800MB or so of upper memory to an area beyond the 4GB limit making all the RAM accessible.
Ironically, Linux embraced x84_64 computing in a huge way long before Microsoft did. SuSE had an x86_64 version of it’s distro as of version 8.1 way back in April of 2003, and Red Hat had a x84_64 version later that year in RHEL. All of this in the same year that AMD released the first Opteron’s and Athlon64’s based on the new K8 architecture.
Microsoft was a little slower coming up to the gate, not releasing x84_64 editions of it’s popular Windows XP or Server 2003 operating systems until 2005. Even then, adoption was horribly slow, and even Microsoft initially stated that in many ways XP x64 edition was a “public beta” of sorts. Windows XP x64 was a huge flop from the end user standpoint as people who were eager to try the new 64-bit OS on their hot new AMD 64 processors were plagued with application compatibility and device driver availability. Most folks also didn’t understand that XP x64 was actually based off of the Server 2003 kernel, which led to even more compatibility issues, especially with PC Games (gamers were the first end-users eager for the x64 OS).
Windows XP x64 and Server 2003 did go on to mature quite nicely, and Server 2003 x64 were slowly adopted more and more in the datacenter, and XP x64 found it’s niche in the high-end professional workstation segment; still separate from the home user sadly. Finally in 2007 with the release of Windows Vista, did home users really get to know x64 computing, as Vista x64 was released right along side of the x86 version of the new OS. Even still, however there were still compatibility issues, and driver issues which were even further compounded by the new operating system’s own compatibility issues with older software applications. Vista has matured over the last year, and the hardware and software vendors have really ramped up development of x64 native applications and drivers. Many games were released with special “x64 Editions”. I have Unreal Tournament x64 as well as Half-Life2 in x64. Half-Life was the most awesome experience, as it automatically detected if you were running an x64 OS, and would automatically enable the x64 mode. Running Vista x64, and as many true native x64 applications as possible has really made my Dual Core AMD x2 64 based system come alive, and the performance in unbelievable.
All that being said, what is x64, and why is it so important you ask. Well, on a traditional x86 processor, the registers which address memory are 32-bits wide, and since the largest number that can fit in 32-bits is 4,294,967,296 you are limited to approximately 4GB of RAM. Usually, though, around 800MB will end up being reserved for the high-memory area for devices, and although some servers and workstations can work around this, most desktop PC’s will only see between 3.2GB and 3.5GB of available RAM, and even then, Windows splits that virtual address space between kernel memory and application memory, and you wind up with only ~2GB available to you applications. Even with that amount of RAM, 32-bit versions of Windows can still suffer from memory constraints, as it wasn’t designed to hand that amount of memory, and if you applications try to address the full amount available you can still wind up with lock-ups and crashes since the Kernels memory is divided between “paged pool” (memory pages that can be swapped out), “non-paged pool” (pages that need to reside in RAM) and “System PTEs” (page table entries).
So, now, how does 64-bit help? The most obvious and frequently mentioned benefit to 64-bit computing is the vastly greater memory address space available. Table 1 highlights the difference between 32-bit and 64-bit memory limits. The x64 versions of Windows, rather than having a 4GB limit on addressable memory have a 16TB limit for it’s virtual address space. On an x86 Windows system, the Virtual address space per 32-bit process is 2GB (3 GB if system is booted with /3GB switch) and on a x64 system that limit is 4 GB if compiled with /LARGEADDRESSAWARE (2 GB otherwise), and the virtual address space per 64-bit process limit is 8 TB. Also rather than having the 470MB limit on the Paged Pool, 256MB limit on the Non-paged pool and 660-900MB available for the PTE, you have 128GB available for all three in an x64 OS.
One other factiod to note, is that x64 versions of Windows (and Linux for that matter) are really only 40-bit operating systems. The theoretical maximum of a full 64-bit address space is 2^64, or 16 exabytes (1.6×1019), however Windows x64 actually only use 40 bits for addressing memory, yielding an address space of 2^40, or 16 TB.
So, if you have an AMD64 or Intel EM64T enabled system (with enough RAM to make a difference), and want to fully utilize your hardware to the fullest extent, go ahead and load up an x64 OS - you’ll be glad you did!