81 / 273
Mar 2007

“It’s the final solution, at least for the lifetime of everyone reading this blog post today.”

Are you serious? I was a kid when we were still in the world of kilobytes, and now we’re tossing around gigabytes like candy. We could very well be fooling around with petabytes before I’m dead, though we probably wouldn’t be doing it on Vista.

“Suffice it to say that we won’t be running out of physical or virtual address space on 64-bit operating systems for the forseeable future. It’s the final solution, at least for the lifetime of everyone reading this blog post today”.

Wrong statement. I’m not yet in my 30, and I’ve seen how addressing has grown from 640k to 4GB and then became short. That’s a x6250 factor!! 4GB to 8TB it’s only a x2000 factor, and HD video and photorealistic games didn’t come yet.

So if I really want everything I get out of my memory, don’t I want 3x 1GB sticks, AND 1x 512MB stick?

Thanks for an interesting post. I’ll have to look into it some more because I’m faced with this same issue right now.

I have a ASUS A8N32-SLI Delux mobo with 4 gigs or RAM. (4 * 1GB - Dual sided). When I go into the bios, it tells me that there is 4GB installed but only 3.38 Avail for use. Now I’m not sure if this is a bios issue or a mobo issue but if anyone has any clue, I’d love to hear it. (I’m planning an upgrade to my bios sometime this weekend - maybe that might work?).

I also have Vista 64 bit installed with VPC 2007 (The reason for my 4gb is so I can run an XP image with ease).

Most of this went over my head, but I have a brand new intel core 2 with 4gb of ram, only 3070mb showing in windows. Dell support showed me in the bios that 4gb was there.

The issue is, I also had it installed with Office 2007 and what a memory hog it is! Right now I have Outlook 2007 open, along with a browser and I’m running at 55% of memory used.

I wondered if adding more memory was an option…guess not. :frowning:

Good read…thx for the info.

Ron

64-bit processors have been around, but not everyone buys or feels comfortable buying AMD. There are the hardheaded people that use what they grew up with and that’s Intel. However, it seems like EVERY system I see advertised either has a Intel 64bit or AMD 64bit processor in it. To all those people I say “your welcome” as I have been running my AMD FX55 since the thing came out. I tried XP 64-bit when it came out, and not only did I have driver issues, I had software issues getting Flash to run in IE, etc.

Now I am running Vista Business 64-bit edition and I must say there is great 64-bit driver support. If the company has a 32-bit Vista driver chances are they have the 64-bit edition too. Some companies like HP don’t have Vista drivers yet for all their printers, their short term resolution is to use the USB cable instead of the Network connection for things like Fax/Scanning. Other companies like Razer don’t even have Vista drivers yet.

This leads me to my point, how long have these companies known Vista was coming? You can truly see which companies are dedicated to ensuring there products work with any OS and those companies that are just too small to spend the time developing drivers for every OS. Logitech Razer, etc. Suprisingly about the only Vista driver Razer does have is for the Habu mouse they make for Microsoft.

But for those of you thinking about upgrading to 64-bit OS, do it! There is no distinguishable issues that I have run into outside of the lack of general Vista (32bit and 64bit) driver support for some of my devices. I am able to run IE, Firefox, Adobe CS2, Unreal Tournament 2004, Open Office, Office 2007, etc without issue. To me after I disabled all the extra stuff (Defender, Firewall, System Restore), I swear Vista boots faster then my old XP install.

And the Vista GA release doesn’t crash like the RC1 version did either. There is a good availability of virus software out there, personally I use Kasperky. If you bought or are thinking about buying a new system that has a 64bit CPU, you paided for it, might as well use it!

CrashCat had a good point.

“It’s the final solution, at least for the lifetime of everyone reading this blog post today.”

Note that you’re talking about problems addressing 4GB in 2007, and also quote Ian Griffiths mentioning how the 8086 (designed in 1976) had to carve up 1MB. If that growth rate were to continue, we’d be looking at addressing 16TB in another 31 years. Of course we won’t be using Vista then. (We aren’t really using it now but that’s another topic.)

I suspect it will be a lot less than 31 years until we see wide consumer adoption of some kind of terabyte-level optical memory or something else that leaves Moore’s Law in the dust.

Mac Pro handles up to 16GB of RAM and 3TB of disk space.

Kind of academic, since OS X itself is not fully 64-bit.

http://arstechnica.com/reviews/os/macosx-10.4.ars/4

So if I were you I’d qualify your recommendation before you get a horde of angry people beating a path to your door… Make it clear that you need to have a suitable chipset [to use 4 GB+ of physical memory]

Ian, good point, will do.

Exactly where is that magical PAE memory supposed to appear?

It’ll only “appear” in apps that explicitly code to support the AWE (address windowing extensions) API, which makes use of the PAE extensions in the CPU. I don’t think the base OS does this, but applications might.

When I go into the bios, it tells me that there is 4GB installed but only 3.38 Avail for use [and I am running a 64-bit OS]

As Ian pointed out, this is due to the BIOS; check your BIOS for an option that remaps IO memory above 4GB.

Well, you guys keep worrying about your need for 4GB RAM. Personally, my max RAM is 512MB, and since I run Linux, not WinDoZe, my systems run the latest software just fine with between 256 and 512MB RAM. My older Dell P3/Xeon can have 2GB RAM, but I only have 512MB, and even tho I looked at upgrading, I can’t see the point. My newer Dell Xeon 2.67Ghz only has 256MB RAM, and only because I had to use 2 sticks for the dual channel memory speed. It’s a server without even a GUI, so again, why do I need 4GB RAM? Oh yeah, you guys run that spy-ware, ad-ware, virus infested, buggy, full of holes and backdoors thing called WinDoZe. Well, like SpongeBob said to Plankton: Good luck with that!

I’ll stick with my Linux…

Not really knowing what the 32-bit Windows can or can not do, probably it does not know how to use memory at above 4 GB physical address, and you are stuck to 3 GB plus some. (Which for a salvaged memory is not too expensive…)

My current home computer is ASUS A8N-SLI Deluxe with AMD X2 (stepping 02) processor, and it definitely can use all 4 GB of installed memory.
However original BIOS didn’t setup the “memory hoisting” correctly, and the end result was rather horrible crash if I tried to “hoist” and to use the memory above that limit. Then very recently there came out a new BIOS release that did it correct, and I am happy big memory spender…

So, if the motherboard BIOS setup has “memory hoisting” buried somewhere in the advanced menus, turning it on may help - or maybe not.
Then running your 32-bit operating system with /PAE enabled may let your operating system to use all 4 GB, permitting more big programs to run simultaneously without resorting to swapping.

By the way, for performance reasons I do prefer to run 64-bit operating systems, and 32-bit applications.
This is equally true for SPARCs running Solaris, as well as PC hardware running whatever.
Very few applications do benefit from 64-bit pointers, but operating system core is usually a different story, especially if you do have more memory than fits inside the first 4 GB.

the real problem is that everybody keeps just going bigger with memory, meanwhile memory access time is only getting slower, not faster, instead of focusing efforts on speeding up processing power someone needs to get on top of that memory speed curve and push the limits a bit, if you could double your memory access speed you could exponentially increase the available address space for total memory because you could double-clock memory accesses. there are lots of smaller and single-purpose sdram chips that do this already, currently i’m using one because i’m designing an FPGA system with limited I/O pins and i’m sending video frames through ethernet from a submarine to a console. granted it’s much more feasible because my FPGA’s clocking at 50 MHz, so double-clocking the 133 MHz sdram isn’t a problem, but still…anyone who wants to set a market trend, there’s your place.

Maybe all programs in near future comes in a usb-memory-like device that holds its own memory usage? Even its own cpu… Would be nice.

Moving memory handling to the program instead of bios/OS… Every program runs in its own world (virtual machine) with pipelines in and out to communicate with the host OS.
The real machines memory mapping will be to handle those pipes.

Yeah, why mess with Windows when there are dozens of Linux distros with thousands of precompiled packages for the x64 architecture?

the behavior of the PAE switch on workstation versions of Windows changed beginning with SP2 for XP. Too many drivers were choking when handed addresses outside the 32-bit address range limit and MS was tired of being blamed for the resulting problems, so in SP2 they removed the portion of the PAE switch’s behavior that remapped otherwise-inaccessible RAM below the 4G boundary to above the boundary.

“Linux?”

umm Linux has the EXACT SAME PROBLEM so I’m not sure what this is in reference to. This is purely a hardware issue and has nothing to do with the OS. It is so funny to see how many people have absolutely zero idea how their system works… but are quick to recommend things like Linux to fix the problem rofl.

Reminds me of my first 60 GB hard drive.

Took me a while to realize why I was trashing the FAT table/drive every time I wrote beyond 32GB.

Why doesn’t 32-bit Windows support PAE correctly?

Here’s linux:

Linux 2.4.x does support greater then 4GB of physical memory (ie. RAM)

It does this by supporting Intel’s PAE (Physical Address Extension) features which are in all Pentium Pro and newer CPU’s.

It does this via indirect pointers to the higher memory locations, so there is a CPU and RAM hit for using this.

Benchmarks seem to indicated around 3-6% CPU hit just for using the PAE extensions (ie. it applies regardless of whether you are actually accessing memory locations greater then 4GB).

The PAE extensions allow up to a maximum of 64GB of physical memory that the CPU (not a process) can address.

PAE does not increase Linux’s ability for single processes to see greater then 3GB of RAM (see below).

What about dual channel mode? I have to be honest that I’m not exactly what the requirements for dual channel mode are, but would going 2x1GB and 2x512MB work properly with dual channel mode? Each channel would have 1x1GB and 1x512, so it seems like it should work…

Windows XP will use 4 GB, but you have to do some tuning. You can do this as described in some Microsoft articles. Here is an example: http://support.microsoft.com/kb/291988.

My understanding is that this will allow it use “most” of it, but even then, it may appear in XP as less then 4 GB… even though it is indeed using it for “most” software applications.

First it was the hard drive size in Windows 98, and now RAM. Microsoft doesn’t plan far enough ahead.

Joe: this problem does NOT exist on Linux. It’s been many years since this problem was fixed in the Linux kernel. With Linux you can use at least 8GB of RAM (I believe it’s 16GB, but not sure) on a 32bit architecture. And no, applications don’t need to specifically support it or any of that crap. It just works right out of the box, without you having to mess with it.
So this IS in fact a Windows problem. Sure, it’s caused because of the architecture’s 32bitness, but other OS’s have worked around this for a long time.

I run Vista 64 RTM as my primary OS. Not in a VM, but on my Dimension 9200 with 4 GB of RAM. I must say that I am very impressed with the driver support on it. Everything works, from my GeForce 7900GS (some major glitches with the driver right after RTM, but they’ve been fixed now) to my soundcard (a C-Media… – though it can’t pipe mike/line-in sound directly to my speakers… WTF…).

I’ve had a lot of iTunes crashes (until 7.1 came out, that fixed the problem) and VMWare Server still isn’t supported on my platform at all (though that’s a Vista thing I believe, not a Vista 64 thing). 32 bit apps run great (you’d never know they weren’t 64-bit), with the exception that Visual Studio.NET 2005 can’t do edit and continue on 64-bit apps (wtf?).

Other compatibility issues: some browser plugins (Flash, I’m looking in your general direction) aren’t compatible with IE7 64-bit, so I have to use IE7 in 32-bit mode most of the time. Not a big deal, though.

What I was most surprised at was the memory utilization. ALMOST ALL OF THE TIME, NO MATTER WHAT I AM DOING, over 2GB of RAM is used. I chalk a lot of this up to SuperFetch. And I must say that SuperFetch uses the memory WELL. Apps launch incredibly fast. VS.NET 2005 comes up (even with the .NET 3.0 CTP designers all installed) in about a second. So far, I’ve been extremely pleased. And yes, for a developer, 4+GB on a desktop with Vista is definitely worth it (especially if you also consider that apps intrinsically use more memory if they’re 64-bit native).

that is why i work on a mac. the g5 for the past 4 years gave us 64-bit memory space, worked great for us video editors, and there is no fall out between a 64-bit Mac OS X and a 32-bit. Acutally there is all this talk about dual binary (intel. ppc) for the past year but apple has been doing this since they had the G5 out there, 64-bit or 32-bit. now with the intel core duo 2s people can use more then 4GB of Ram… 64-bit CUP and all

cheers

Brandon: seriously, when you’re claiming the Mac is “behind the times technology-wise”, you’re making a total fool out of yourself (and no, I’m not a mac fanboy - I don’t even own one).

The effect of using the PAE switch on 32 OSs is NOT uniform based on how many cpu’s are in place. I’ve seen 1gb or less allocated to the OS and the remainder available for application use. When you expand beyound a single cpu, the partitioning of memory is not uniform either
the scheduler is very actively trying to spread out the load across multiple CPU’s. … Also PAE induces a translation table which degrades performance versus direct access. Memory above 4gb can only be used for db buffer space.

If we were all using DEC/Compaq/HP Alpha Processors invented
by Digital Equipment Corp and runs Windows NT 64, Linux, Tru64 Unix,
VMS, etc this discussion would be moot. The Alpha world was done
clean as 64bits from the ground up, 64 bit cpu registers, cache, and
memory, file system, etc etc. Intel stole proprietary info about
the Alpha from DEC, got caught, and guess what the punishment was?
They had to make Alpha chips for DEC at LOW cost for several years
in a brand new foundry. The Alpha processor (now hanging on only by
the virtue of the endless popularity and reliability of VMS which
everything from Blockbuster Video to Wall Street to hospital systems
to …:wink: is pretty much the only exciting thing to happen in hardware
IT since the VAX which was the most exciting thing since the PDP-11.
Oh well, we always take a step forward and then take 2 back and we
have Intel to blame. You’d think they would have learned something
from what they stole about Alpha’s internals but no, we get the
Itanium and Itanium 2 abominations. All because everyone wants to
run ancient software FOREVER.

An interesting article. Thanks.

I still don’t own any computers with more than 512MB of ram, but me and my friend were arguing the possible benefits or myths of a 64-bit operating system just two days ago. This was very interesting.

What’s worse is that you’ve got a 64-bit processor (hey, wouldn’t that cover the 4GB’s of RAM) and you’re only running a 32-bit OS. Get a 64-bit OS and get rid of the problem, no hardware upgrade necessary.

Why are you running 32-bit Windows on a 64-bit machine anyways?

For those claiming that 32-bit flash will not work with 64-bit Firefox, do a search for “nspluginwrapper”. I have it loaded, and I can view any flash site in 64-bit Firefox 2.0.0.1 (on Linux).

Hmm, seems like it’ll only work on *nix platforms at the moment. Here’s the link if you’re a 64-bit Linux user and want to try this

http://gwenole.beauchesne.info/projects/nspluginwrapper/

Also check your distro, they may have this available as a package (Gentoo did).

In the interest of correcting the inaccurate information posted in this thread.

Physical Address Extensions (PAE)
Every IA32 processor since the Pentium Pro has had PAE36 allowing 64GB of memory to be physically addressed. Most AMD64/EMT64 processors have PAE40 allowing 1TB to be physically addressed however I believe the early 64bit P4s didn’t.

Cacheable Area.
On many processors the address space cacheable by the processor, and therefore practically usable is less than the size of the address space. For example the old Slot 1 Celerons could only cache 512MB and PII era Slot 1 CPUs could only cache 4GB. Having a 64GB cacheable area starting in the Xeon line and migrated down.

PAE OS Support
A poster further up was correct that a 32 bit OS cannot address more than 4GB. Address is the key word here it means that each process cannot have no more than 4GB of virtual address space. Nothing says that has to map onto physical RAM below 4GB. However the original poster was correct in that device memory must be below 4GB.

Microsoft artificially limited desktop versions of Windows to only support 4GB of physical address space probably due to the issues with device driver quality. However some server versions can address more, Microsoft can very tightly control what device drivers run on systems running these versions of Windows and therefore allow the PAE suport code to be switched on.

Windows 2000 Advance Server - 8GB Physical
Windows 2000 DataCentre - 32GB Physical
Windows Server 2003 Enterprise - 32GB Physical
Windows Server 2003 DataCentre - 64GB Physical

All other versions of Windows including Windows Vista do not have the PAE code enabled and cannot access memory which has been relocated above 4GB in order to make room for device memory.

Every version of Linux since the early 2.6 kernels has supported 64GB assuming the kernel was configured for it.

Chipset Support.
Even if the OS and the CPU support PAE it still might not be possible to map the physical RAM that has had to be moved to make space for the device memory above 4GB so it can be used. Chipset support is required to make this magic happen and, especially on laptop and “value” segment chipsets this magic is not present. This is the reason the MacBook Pro cannot support more than 3GB of physical RAM but the Mac Pro (based on Xeon processors and chipsets) can.

Address Window Extensions
This is a Windows API to allow a 32 bit process to address memory outside it’s 4GB virtual address space. It works by remapping memory below the 4GB barrier. It’s a horrible slow hack and never really caught on. MS did it because they needed it internally for things like the 32 bit version of SQL Server and Exchange.

AMD64/EMT64
As noted above processors implementing a 64 bit x86 instruction can address 40 bits or 1TB of RAM. A 32 bit program running under a 64 bit OS can still only use 4GB of virtual address space, where as a 64 bit program can use 64GB of virtual address space. The machine is therefore capable of physically addressing less memory than the programs running on it can virtually address.

Both MacOS and Linux support running both 32 and 64 bit binaries on a 64 bit kernel with no slow down.

Windows cannot do this and requires and emulated 32 bit subsystem called WOW (Windows on Windows) which incurs a slow down. Exactly the same was done with the transition from 16 to 32 bit Windows, in that case having a 16 bit emulated system on 32 bit Windows.

Real Big Iron processors such as POWER, Alpha generally have 48 or 50 odd bits of physical address space. In fact when the Alpha was being designed a customer complained that the processsor couldn’t do 64 bit physical addressing. DEC replied that if the customer was willing or order enough RAM from DEC to require the physical address space DEC would redesign the processor to support it :slight_smile:

To sum up

A good idea (PAE) was hamstrung in the consumer market by lacklustre OS support from Microsoft leading to supporting hardware not being designed to be compatible with it and driver support being broken.

PAE did extremely well in the server market due to rapid OS support via Linux and the ability for third parties to fix broken drivers in this OS. As it was in constant use supporting chipsets were designed and qualified to support it. Microsoft also eventually supported it in the server market but attempted to charge a premium for it.

PL - you asked “what 64 bit chipset uses 32 bit addressing ? That is by definition not a 64 bit chipset then”

Plenty of systems ship 64-bit processors with 32-bit chipsets. So you’re asking the wrong question. You’re right that no 64-bit chipsets use 32-bit addressing. But that doesn’t stop vendors wiring a 64-bit CPU into a 32-bit chipset. (In just the same way that the presence of a 36-bit address bus on most of the CPUs Intel has shipped since the Pentium Pro hasn’t stopped vendors only providing 32-bit addressing in the chipsets.)

Matti - you said “Not really knowing what the 32-bit Windows can or can not do, probably it does not know how to use memory at above 4 GB physical address,”. Not true. You’ve been able to use more than 4GB on 32-bit versions of the server versions of Windows for years. (Although not all editions supported it.) It was possible even back on Windows 2000. (Maybe even NT 4 - I can’t remember exactly when they brought in this support.)

Incidentally, the ‘double buffering’ DMA issue has been with Windows since NT 3.1 - I know this because I used to write device drivers for NT back then… You had to do it for the various RISC systems (Alpha, MIPS, PPC) because most of those systems did something completely different from the x86: the physical addresses seen by the CPU were, in general, not the same as the physical addresses presented on the peripheral buses like PCI. They had a mapping layer in there of exactly the same kind that you need for a 32-bit PCI device to be able to DMA into a 64-bit address space. Drivers are supposed to use the APIs that work with this mapping layer on all hardware. (The exact details of the mapping layer, and whether it was even present, were dealt with by the HAL - the Hardware Abstraction Layer. On typical pre-PAE x86 hardware, the HAL would provide a ‘do-nothing’ mapping layer.)

Device drivers that are written correctly should just work - you don’t need to do anything different to enable a device on a 32-bit bus to DMA into the higher ranges of a 64-bit physical address space. The Windows NT memory APIs have supported the necessary mechanisms since day 1, and a driver written back in, say, 1995 that used the APIs correctly should work today with 4GB on a /PAE-enabled system.

However, lazy device driver writers may have noticed that the relevant APIs for mapping from CPU physical addresses to bus-specific physical addresses are always a NOP on 32-bit x86 systems, as are the APIs for creating DMA mapping ranges. So if they decide not to bother calling the appropriate APIs those drivers will stop working when you enable /PAE. This has never been ‘correct’ - it’s in clear violation of what the documentation tells you to do. However, it happens to work on the vast majority of x86 systems, so you just know there will be some drivers out there that do this. (I would hope that any that have been through the WHQL certification won’t have this problem, but loads of drivers aren’t certified.)

My understanding is that this is the issue that makes /PAE a potential non-starter even where your motherboard happens to support it. The reason switching to a 64-bit OS makes this a non-problem is that the driver writer will have had no option but to write the driver correctly, whereas if you’re using 32-bit drivers, you have to hope that it was written correctly. And there are a lot of crappy drivers out there.

I have read the posts and most if not all is way above me. But is there a consensus about how much RAM the average user should get? So if I a person buys a PC or makes one, and plans on using Vista 32, they only should invest in 3 gigs of memory because anything over that won’t be seen without some workarounds. Is this right?

If anyone is interested, I managed to get the FULL 4GB to get recognized on my machine. Its an A8N32-SLI Deluxe and previously was only getting about 3.3GB.

  1. Update bios to v1303.
  2. Enable Memory Hole. (This is Important!!)

I also disabled the serial parallel port and a few other things but I’m pretty sure thats not of much concern.

Cheers.

Thank you for the clarification. So the most common Windows versions (XP and Vista) actually don’t support PAE to access RAM beyond the 4 GB limit, due to concerns about driver compatibility.

That explains why I only see 2 GB under XP when telling my BIOS to remap memory around the PCI “hole”, even though Memtest can see all 4 GB. So PAE is really a nonstarter for most readers of this blog.

xp and vista is no god I personaly stick whit my win 2003 server

i have sql servers whith 16 G of ram

but a guy from microsft told me that 2003 server will not work whith more then 20G of ram i have a server where ai can plug 120G of ram :smiley:

This is confusing. Even the “sum up” has a few points wrong.

Enabling “PAE” means that an extra level of page tables gets used. This leads to the following changes:

  • One extra level is added to the page table lookup. This can possibly make memory address slower, but usually the difference is not noticeable since the lookup is cached in TLBs.

  • Data Execution Protection (DEP) is possible. Adding the extra level of page tables frees up a few bits in the page table descriptor. One of these newly freed bits is now used to mark a page as not-executable.

  • Access to up to 16 GB of physical memory is possible.

  • Some kernel pointers are now 64 bits.

So if you enable PAE, and your motherboard actually connects at least 33 address pins from the CPU to the memory, and your BIOS supports memory remapping, you should be able to get a full 4 GB of RAM, right?

Nope. Not if you have XP SP2 or Vista, anyway.

Notice that part about kernel pointers being 64 bits. A whole bunch of drivers don’t handle that correctly. So as of XP SP2 (also in Vista), even in PAE mode, pointers are limited to 32 bits. Even though the OS and the hardware is fully capable of working with more memory, the OS never touches anything above the 4GB boundary. This was a conscious decision. Stability of the system was considered more important than access to the extra physical memory.