Pushing the Limits of Windows: Physical Memory


This is the first blog post in a series I’ll write over the coming months called Pushing the Limits of Windows that describes how Windows and applications use a particular resource, the licensing and implementation-derived limits of the resource, how to measure the resource’s usage, and how to diagnose leaks. To be able to manage your Windows systems effectively you need to understand how Windows manages physical resources, such as CPUs and memory, as well as logical resources, such as virtual memory, handles, and window manager objects. Knowing the limits of those resources and how to track their usage enables you to attribute resource usage to the applications that consume them, effectively size a system for a particular workload, and identify applications that leak resources.

Here’s the index of the entire Pushing the Limits series. While they can stand on their own, they assume that you read them in order.

Pushing the Limits of Windows: Physical Memory

Pushing the Limits of Windows: Virtual Memory

Pushing the Limits of Windows: Paged and Nonpaged Pool

Pushing the Limits of Windows: Processes and Threads

Pushing the Limits of Windows: Handles

Pushing the Limits of Windows: USER and GDI Objects – Part 1

Pushing the Limits of Windows: USER and GDI Objects – Part 2

Physical Memory

One of the most fundamental resources on a computer is physical memory. Windows’ memory manager is responsible with populating memory with the code and data of active processes, device drivers, and the operating system itself. Because most systems access more code and data than can fit in physical memory as they run, physical memory is in essence a window into the code and data used over time. The amount of memory can therefore affect performance, because when data or code a process or the operating system needs is not present, the memory manager must bring it in from disk.

Besides affecting performance, the amount of physical memory impacts other resource limits. For example, the amount of non-paged pool, operating system buffers backed by physical memory, is obviously constrained by physical memory. Physical memory also contributes to the system virtual memory limit, which is the sum of roughly the size of physical memory plus the maximum configured size of any paging files. Physical memory also can indirectly limit the maximum number of processes, which I’ll talk about in a future post on process and thread limits.

Windows Server Memory Limits

Windows support for physical memory is dictated by hardware limitations, licensing, operating system data structures, and driver compatibility. The Memory Limits for Windows Releases page in MSDN documents the limits for different Windows versions, and within a version, by SKU.

You can see physical memory support licensing differentiation across the server SKUs for all versions of Windows. For example, the 32-bit version of Windows Server 2008 Standard supports only 4GB, while the 32-bit Windows Server 2008 Datacenter supports 64GB. Likewise, the 64-bit Windows Server 2008 Standard supports 32GB and the 64-bit Windows Server 2008 Datacenter can handle a whopping 2TB. There aren’t many 2TB systems out there, but the Windows Server Performance Team knows of a couple, including one they had in their lab at one point. Here’s a screenshot of Task Manager running on that system:

image

The maximum 32-bit limit of 128GB, supported by Windows Server 2003 Datacenter Edition, comes from the fact that structures the Memory Manager uses to track physical memory would consume too much of the system’s virtual address space on larger systems. The Memory Manager keeps track of each page of memory in an array called the PFN database and, for performance, it maps the entire PFN database into virtual memory. Because it represents each page of memory with a 28-byte data structure, the PFN database on a 128GB system requires about 980MB. 32-bit Windows has a 4GB virtual address space defined by hardware that it splits by default between the currently executing user-mode process (e.g. Notepad) and the system. 980MB therefore consumes almost half the available 2GB of system virtual address space, leaving only 1GB for mapping the kernel, device drivers, system cache and other system data structures, making that a reasonable cut off:

image

That’s also why the memory limits table lists lower limits for the same SKU’s when booted with 4GB tuning (called 4GT and enabled with the Boot.ini’s /3GB or /USERVA, and Bcdedit’s /Set IncreaseUserVa boot options), because 4GT moves the split to give 3GB to user mode and leave only 1GB for the system. For improved performance, Windows Server 2008 reserves more for system address space by lowering its maximum 32-bit physical memory support to 64GB.

The Memory Manager could accommodate more memory by mapping pieces of the PFN database into the system address as needed, but that would add complexity and possibly reduce performance with the added overhead of map and unmap operations. It’s only recently that systems have become large enough for that to be considered, but because the system address space is not a constraint for mapping the entire PFN database on 64-bit Windows, support for more memory is left to 64-bit Windows.

The maximum 2TB limit of 64-bit Windows Server 2008 Datacenter doesn’t come from any implementation or hardware limitation, but Microsoft will only support configurations they can test. As of the release of Windows Server 2008, the largest system available anywhere was 2TB and so Windows caps its use of physical memory there.

Windows Client Memory Limits

64-bit Windows client SKUs support different amounts of memory as a SKU-differentiating feature, with the low end being 512MB for Windows XP Starter to 128GB for Vista Ultimate and 192GB for Windows 7 Ultimate. All 32-bit Windows client SKUs, however, including Windows Vista, Windows XP and Windows 2000 Professional, support a maximum of 4GB of physical memory. 4GB is the highest physical address accessible with the standard x86 memory management mode. Originally, there was no need to even consider support for more than 4GB on clients because that amount of memory was rare, even on servers.

However, by the time Windows XP SP2 was under development, client systems with more than 4GB were foreseeable, so the Windows team started broadly testing Windows XP on systems with more than 4GB of memory. Windows XP SP2 also enabled Physical Address Extensions (PAE) support by default on hardware that implements no-execute memory because its required for Data Execution Prevention (DEP), but that also enables support for more than 4GB of memory.

What they found was that many of the systems would crash, hang, or become unbootable because some device drivers, commonly those for video and audio devices that are found typically on clients but not servers, were not programmed to expect physical addresses larger than 4GB. As a result, the drivers truncated such addresses, resulting in memory corruptions and corruption side effects. Server systems commonly have more generic devices and with simpler and more stable drivers, and therefore hadn’t generally surfaced these problems. The problematic client driver ecosystem led to the decision for client SKUs to ignore physical memory that resides above 4GB, even though they can theoretically address it.

32-bit Client Effective Memory Limits 

While 4GB is the licensed limit for 32-bit client SKUs, the effective limit is actually lower and dependent on the system’s chipset and connected devices. The reason is that the physical address map includes not only RAM, but device memory as well, and x86 and x64 systems map all device memory below the 4GB address boundary to remain compatible with 32-bit operating systems that don’t know how to handle addresses larger than 4GB. If a system has 4GB RAM and devices, like video, audio and network adapters, that implement windows into their device memory that sum to 500MB, 500MB of the 4GB of RAM will reside above the 4GB address boundary, as seen below:

image

The result is that, if you have a system with 3GB or more of memory and you are running a 32-bit Windows client, you may not be getting the benefit of all of the RAM.  On Windows 2000, Windows XP and Windows Vista RTM, you can see how much RAM Windows has accessible to it in the System Properties dialog, Task Manager’s Performance page, and, on Windows XP and Windows Vista (including SP1), in the Msinfo32 and Winver utilities. On Window Vista SP1, some of these locations changed to show installed RAM, rather than available RAM, as documented in this Knowledge Base article.

On my 4GB laptop, when booted with 32-bit Vista, the amount of physical memory available is 3.5GB, as seen in the Msinfo32 utility:

image

You can see physical memory layout with the Meminfo tool by Alex Ionescu (who’s contributing to the 5th Edition of the Windows Internals that I’m coauthoring with David Solomon). Here’s the output of Meminfo when I run it on that system with the -r switch to dump physical memory ranges:

image

Note the gap in the memory address range from page 9F0000 to page 100000, and another gap from DFE6D000 to FFFFFFFF (4GB). However, when I boot that system with 64-bit Vista, all 4GB show up as available and you can see how Windows uses the remaining 500MB of RAM that are above the 4GB boundary:

image 

What’s occupying the holes below 4GB? The Device Manager can answer that question. To check, launch "devmgmt.msc", select Resources by Connection in the View Menu, and expand the Memory node. On my laptop, the primary consumer of mapped device memory is, unsurprisingly, the video card, which consumes 256MB in the range E0000000-EFFFFFFF:

image

Other miscellaneous devices account for most of the rest, and the PCI bus reserves additional ranges for devices as part of the conservative estimation the firmware uses during boot.

The consumption of memory addresses below 4GB can be drastic on high-end gaming systems with large video cards. For example, I purchased one from a boutique gaming rig company that came with 4GB of RAM and two 1GB video cards. I hadn’t specified the OS version and assumed that they’d put 64-bit Vista on it, but it came with the 32-bit version and as a result only 2.2GB of the memory was accessible by Windows. You can see a giant memory hole from 8FEF0000 to FFFFFFFF in this Meminfo output from the system after I installed 64-bit Windows:

image

Device Manager reveals that 512MB of the over 2GB hole is for the video cards (256MB each), and it looks like the firmware has reserved more for either dynamic mappings or because it was conservative in its estimate:

image

Even systems with as little as 2GB can be prevented from having all their memory usable under 32-bit Windows because of chipsets that aggressively reserve memory regions for devices. Our shared family computer, which we purchased only a few months ago from a major OEM, reports that only 1.97GB of the 2GB installed is available:

image

The physical address range from 7E700000 to FFFFFFFF is reserved by the PCI bus and devices, which leaves a theoretical maximum of 7E700000 bytes (1.976GB) of physical address space, but even some of that is reserved for device memory, which explains why Windows reports 1.97GB.

image

Because device vendors now have to submit both 32-bit and 64-bit drivers to Microsoft’s Windows Hardware Quality Laboratories (WHQL) to obtain a driver signing certificate, the majority of device drivers today can probably handle physical addresses above the 4GB line. However, 32-bit Windows will continue to ignore memory above it because there is still some difficult to measure risk, and OEMs are (or at least should be) moving to 64-bit Windows where it’s not an issue.

The bottom line is that you can fully utilize your system’s memory (up the SKU’s limit) with 64-bit Windows, regardless of the amount, and if you are purchasing a high end gaming system you should definitely ask the OEM to put 64-bit Windows on it at the factory.

Do You Have Enough Memory?

Regardless of how much memory your system has, the question is, is it enough? Unfortunately, there’s no hard and fast rule that allows you to know with certainty. There is a general guideline you can use that’s based on monitoring the system’s "available" memory over time, especially when you’re running memory-intensive workloads. Windows defines available memory as physical memory that’s not assigned to a process, the kernel, or device drivers. As its name implies, available memory is available for assignment to a process or the system if required. The Memory Manager of course tries to make the most of that memory by using it as a file cache (the standby list), as well as for zeroed memory (the zero page list), and Vista’s Superfetch feature prefetches data and code into the standby list and prioritizes it to favor data and code likely to be used in the near future.

If available memory becomes scarce, that means that processes or the system are actively using physical memory, and if it remains close to zero over extended periods of time, you can probably benefit by adding more memory. There are a number of ways to track available memory. On Windows Vista, you can indirectly track available memory by watching the Physical Memory Usage History in Task Manager, looking for it to remain close to 100% over time. Here’s a screenshot of Task Manager on my 8GB desktop system (hmm, I think I might have too much memory!):

image

On all versions of Windows you can graph available memory using the Performance Monitor by adding the Available Bytes counter in the Memory performance counter group:

image 

You can see the instantaneous value in Process Explorer’s System Information dialog, or, on versions of Windows prior to Vista, on Task Manager’s Performance page.

Pushing the Limits of Windows

Out of CPU, memory and disk, memory is typically the most important for overall system performance. The more, the better. 64-bit Windows is the way to go to be sure that you’re taking advantage of all of it, and 64-bit Windows can have other performance benefits that I’ll talk about in a future Pushing the Limits blog post when I talk about virtual memory limits.

 


Comments (171)

  1. Anonymous says:

    Phileosophos: TechGuy is correct – XP SP2 enables PAE by default because it’s required for DEP. Prior to XP SP2, if you specified the /PAE switch manually, Windows didn’t truncate addresses above 4GB. During XP SP2 testing the driver problems were discovered and so the change was made then. I’ve updated the post to mention this.

  2. Anonymous says:

    @Harold

    Thanks for the feedback and for pointing out the typo, which I’ve fixed.

  3. Anonymous says:

    You mentioned that "On Windows Vista, you can indirectly track available memory by watching the Physical Memory Usage History in Task Manager, looking for it to remain close to 100% over time." But do you really want Physical Memory USAGE to be close to 100%? Shouldn't that be the opposite? Shouldn't it be closer to zero?

    I have a gadget from Windows that monitors the CPU usage and the RAM and the part that monitors the RAM reads exactly the same as the Physical Memory Usage History in the Task Manager. It also shows that higher percentages lead to "more threatening colors" 😉 (i.e. yellow, orange and red warning colors).

    Is RAM the same as Physical Memory? And is Physical Memory supposed to be high or low. Also is 57% usage good or bad?

  4. Anonymous says:

    I see that the memory of 2TB was verified by using "HP Integrity Superdome" in IA64. What hardware did you use in x64?

  5. Anonymous says:

    Mark Edwards: good call, it’s a superdome.

  6. Anonymous says:

    @Leon: Use the MemInfo tool to look at your Device Memory. I think you will find that your graphics card is using both onboard memory and shared memory. And the shared memory is larger when 4Gb is present (this might be configurable in the BIOS).

  7. Anonymous says:

    Great post.. And why you are showing Task Manager screenshots instead of Process Explorer!! 🙂

  8. Anonymous says:

    Yes — I have similar problems.  

    The part mark seems to be unaware of is that consumer versions of XP-32-bit disabled memory above 3GB in SP2 due to driver problems.  Used to be documented in some KB article — supposedly, in SP1, it wasn’t broken — but something else was — which you could have gotten a patch for at that time if you wanted the full 4GB.  But they never ported the patch to SP3 and left it with a 3G limit.  Doesn’t seem to matter whether I use the map-3G-to-user-space switch or not.  I also have a PAE processor that has no problem with seeing 4GB of memory under linux, but MS seemed determine to cripple XP — apparently they were afraid of some drivers not handling I/O to devices over 4G — but in Linux they solved that with ‘bounce’ buffers.  A bit slower — as it’s like "paging" memory pages in and out of ‘high-memory’, but if your option is to limit the memory to 3G and have 4G of memory page on and off of a 1GB-disk page file, vs. paging the ‘usable’ memory between low<->high memory, guess which is ALOT faster and better use of the hardware?  Sigh.  If only WinXP was open source and could be fixed.  (*hint*? — hey, the impossible sometimes happens; Bush is staying out Obama’s way and letting him deal with the financial crisis even though Obama isn’t president yet.  If we can get that type of cooperation out of Bush, Microsoft open-sourcing XP should be a comparative slam-dunk :-))

  9. Anonymous says:

    Thanks for the feedback and for pointing out the typo.

  10. Anonymous says:

    32-bit Windows Server 2003 running on 64-bit processors supports 128GB.

  11. Anonymous says:

    @JeffLebo

    Available includes system cache. Look for a future post on interpreting memory counters.

  12. Anonymous says:

    @Invalid Handle

    The limit is 64GB on 32-bit x86, but higher on x64 processors.

  13. Anonymous says:

    The behavior I describe in the post is the same for all releases of Windows client systems, including Windows XP, so if there’s a difference in behavior between SP1 and SP2, it has to do with a video driver or some other factor. You can confirm that by using the Meminfo tool to look at physical memory ranges and the device manager to see what’s using the the missing ranges.

  14. Anonymous says:

    Great post Mark. It really gives a background to things I half-knew before, heh. I’ve been running 64-bit Vista since the day it was made available to beta testers and it was certainly worth it.

  15. Anonymous says:

    Hello Mark, very useful article.

    Could you comment a bit on the LargePageMinimum fix (KB270715). The latest nvidia drivers documentation implies that the fix is still needed for PCI Express video cards and K8/Phenom cpus. What are the implications for the memory manager/os performance?

  16. Anonymous says:

    Very good !

    Thanks

  17. Anonymous says:

    You’re right, meminfo requires Vista.

  18. Anonymous says:

    @gareth

    The PFN database is sized according to physical RAM, with one entry per page. 4GT has no effect on physical memory, just the split of the virtual address space between the kernel and user mode.

  19. Anonymous says:

    Here is my experience and I am looking for the answer.

    Configuration:

    Base: Asus T3-P5G965

    Proc: Intel E6600

    Video: Asus X1350

    Mem: Corsair Twin2X 800 DDR2 4x1GB

    BIOS: memory remap feature is enabled

    (If enabled, only 2GB memory is available without PAE kernel. With this option, PAE is available.

    If disabled, 2.8GB memory is available without PAE kernel. With this option, PAE is not available.)

    Windows XP 32bit is not able to manage the whole physical memory, altough PAE is working as you can see in the following screenshots:

    https://www.netacademia.net/sqlimage.axd?name=tudastarpic&RecordId=24348&FName=winxp32.PNG

    https://www.netacademia.net/sqlimage.axd?name=tudastarpicorig&RecordId=24348&FName=taskman.PNG

    https://www.netacademia.net/sqlimage.axd?name=tudastarpicorig&RecordId=24348&FName=mem.PNG

    Linux:

    I tried Fedora 9 and 10 x86 distribution, and the basic install OS can show 2GB memory. However, I change to the PAE versioned kernel, the whole 4GB memory is available.

    Windows 2003 Server R2 Enterprise:

    This Windows edition can manage the whole 4GB memory like the PAE enabled linux.

    https://www.netacademia.net/sqlimage.axd?name=tudastarpic&RecordId=24378&FName=w2k3r2Ent32_props.PNG

    https://www.netacademia.net/sqlimage.axd?name=tudastarpic&RecordId=24378&FName=w2k3r2Ent32_taskman.PNG

    Here is the boot.ini with the default switches:

    [operating systems]

    multi(0)disk(0)rdisk(0)partition(4)WINDOWS="Windows Server 2003, Enterprise" /noexecute=optout /fastdetect

    multi(0)disk(0)rdisk(0)partition(1)WINDOWS="Microsoft Windows XP Professional" /fastdetect /NoExecute=OptIn

    So it is sure my hardware is capable to manage 4GB RAM on the 32 bit OSs (Fedora linux, Win2K3R2Ent32)

    Why the Windows XP 32bit cannot give me the whole memory while the PAE versioned kernel is used automatically as shown in the first screenshot?

    Have somebody ever seen Windows XP 32bit with 4GB RAM? Or Have somebody ever seen anybody to experience this?

    Thank you for your response!

  20. Anonymous says:

    Is there any way of actually finding out why a system is claiming much more ram in use than shown by currently running processes? In this case, I have a sql server running on windows 2003, with 8GB of ram installed. I had to add the /PAE and /3GB switches to the boot ini to get the system to see the full 8GB. In the task manager, I see the full 8GB of ram available, with about 10GB of swap. Now, as far as ram in use, it was roughly 7GB, with another 6GB of swap commited. Digging through the task manager’s process list, I could only add up about 3GB of ram in use. Is there anyway of finding out where that additional ram is? or is this a case of just having to reboot the system to reclaim it?

  21. Phileosophos says:

    It seems to me that you omitted something. To wit, the contribution of SP2 when dealing with Windows XP. I built a system with 4 GB of RAM roughly three years ago because I wanted the extra RAM for pro audio/video applications. By your article, my system should have had about 3.75 GB of free RAM under the 32-bit version  of Windows XP (in light of my video card’s 256 MB).

    But that’s only true with SP1. From what I’ve been able to gather, when Microsoft added the DEP feature to SP2, they made what strikes me as a stupid decision: to lop off the top gigabyte of memory altogether, rather than deal with driver issues that could be caused by interactions with DEP. When I boot into WinXP SP1 on that machine, I do have 3.75 GB of RAM available; when I boot WinXP SP2 on the very same hardware, using the very same drivers, I have 2.75 GB available.

    I have received conflicting answers to my support inquiries over the years from Microsoft personnel. Can you perhaps comment on the top gigabyte of RAM when using WinXP SP2 or later?

  22. tom says:

    Great article, thanks!  It’s always fun to see Task Manager screenshots from monster systems. 🙂  One thing I wondered while reading this article: are computer companies afraid to put 64-bit Windows on machines, or do they just not know any better?  At my company we bought several Dell PCs with 4GB last year.  They came with 32-bit Vista, which reports only 3.1GB as being available.  (With Vista SP1 it now reports 4GB in some places, as you mentioned…)

    By the way, I noticed one typo:

    "two 1MB video cards" (should be 1GB)

  23. Beric Holt says:

    Excellent article Mark.  I understood the x86 vs x64 memory issues before, but this explains much more in detail, and shows us how to actually discover exactly how much memory we are loosing on the x86 platform.

    Thanks!

  24. As always great article. Looking forward to more.

  25. Phileosophos says:

    First, thanks for the response. But second, what I find just doesn’t match what you say.

    For the record, I can’t use the meminfo utility you suggest because it requires Vista or later. I quote from the bottom of the linked page: "Please note that MemInfo requires Windows Vista or higher as well as full (elevated) administrative privileges."

    Sadly, device manager is no more illuminating, insofar as the memory shown in use is identical across both OS installs and yet SP1 install 3.5 GB of memory while SP2 reports 2.5 GB of memory–I’ve since upgraded to video that use 512 MB instead of the 256 MB I mentioned originally.

    What I find most interesting is that in order to make the most of my 4 GB of physical RAM, I must (1) run WinXP SP1, and (2) use the /PAE switch in my BOOT.INI file. Only by using the /PAE switch does WinXP SP1 report the extra RAM and make it available. That just doesn’t track with your statement that the behavior "…is the same for all releases of Windows client systems, including Windows XP, so if there’s a difference in behavior between SP1 and SP2, it has to do with a video driver or some other factor."

    I would *LOVE* to pursue this further somehow. You’re the brightest and most thorough developer I’ve had the privilege of chatting with, and this is an issue on which I would relish closure.

  26. Sarath says:

    Total Physical Memory 4,096.00 MB

    Available Physical Memory 2.09 GB

    4 GB RAM only 2.09 GB addressed 🙁

  27. Corwin says:

    Hi.

    I believe that Computer shops are holding back 64 bit OS’es because customer support. Home users have many more or less different gadgets that dont have 64 bit drives. Also – there is still lots of old 16-bit software what they need to run for some reason (mostly sentimental reasons).

  28. Chris Nahr says:

    Good article, but I’d like to add one thing: you may have to manually enable memory remapping in the BIOS to access all of 4+ GB RAM in a 64-bit system. Otherwise, part of it may be obscured by memory-mapped devices at the same location.

  29. Thessan says:

    Thanks! It would be interesting to hear your thought on the windows swapfile too (most likely you’ve already talked about this somewhere and I’ve missed it). I’ve heard a lot of different theories on how to handle the seap on system with large amounts of RAM. Some claim it’s better to have no swapfile, while others claim it’s better to let Windows handle it.

  30. Craig says:

    Excellent article as always!  Very informative.

  31. techguy says:

    @Phileosophos: "From what I’ve been able to gather, when Microsoft added the DEP feature to SP2.."

    FYI: From what I can remember, when DEP is enabled, /PAE (physical address extension) is also (implicitely) enabled, which may affect available RAM. (depends on system)

  32. Jose Olcese says:

    Mark,

    Excellent article!

    One question, in the system that you show where 7E700000 to FFFFFFFF is reserved for PCI, who’s responsible for this reservation? OS? Bios? who?

    Thanks!

  33. Hi Mark

    Correct me if I am wrong:

    Devices call Windows and say "Oi, Windows! If anyone passed you a pointer to the 4096th MB of the physical memory, that someone is actually addressing our device memory! We just didn’t think you have that much memory, now do you?" And Windows goes back and says: "OK. No problem. And no! I don’t think any computer with more than 512MB RAM ever exist!"

    Does that sound about right?

  34. Warp says:

    In another forum someone commented that the first image in this page represents the minimum hardware requirements for the next version of Windows. That made me LOL.

  35. David says:

    That 2tb 64 processor system looks a bit underutilized.

  36. raino says:

    Great post as always, I’m really enjoying this kind of technical writings.

  37. John says:

    *g* Vista x64 can address 4 times more RAM than "Server" Standard x64

  38. GrofLuigi says:

    Great article! One question though:

    Is the ‘taken’ memory actually used (do the actual I/O calls go through actual memory cells) or the address space is the only thing needed? In other words, would the system behave the same if there was no actual memory (or maybe just a dummy memory chip with no cells)?

    Now that I think about it, this wouldn’t be possible with graphic cards’ allocations, but what about other devices?

    GL

  39. TaylorMichaelL says:

    I can’t get over the initial screenshot.  On the 2TB system 95GB of memory is already in use.  They must be running some hefty apps.

  40. Greg Fri says:

    Very nice article, so if I have a video card with more on-board memory, say 512MB, will 512MB also be set a side of my main systems memory?  Will your article elaborate on the trade offs regarding video card memory, how its used, and why more may be better or worse in some cases – hard core gaming vs business use only. If I just use my computer for business use,is it better to have less video graphics card memory? – thank you

  41. alex says:

    Meminfo appears to require Vista …

  42. Stephen Reese says:

    I don’t think 8 gigs is by any means too much. Heck that’s how much I have in order to ensure that notepad is opening fast enough on my Vista box ;-).

  43. Mark Edwards says:

    Hmm, a 2Tb system, with what appeared to be 64 threads. Could that have been a HP Integrity Superdome running IA64 architecture?

    As always, Mark, a good read!

  44. Steve Boyko says:

    Like thessan, I would love to see an article on the Windows swap file. I have read conflicting opinions on whether it is really required in memory-rich systems, and I would like your expert insight into this.

  45. WEB Developer says:

    Is there any reasons to put into 32 bit computer 4GB memory? I think that developers who do it spend users’ money.

  46. Vadmyst says:

    What about Vista ability to use USB flash storage for page files? Does this affect memory consumption or memory addressability?

    Great article

  47. edwardk says:

    I’m actually dealing with an interesting, related topic currently.  My customer is looking to deploy Vista to 18,000 desktops currently running Windows 2000 with 1 GB of memory.  They’re looking for confirmation that their application portfolio will perform similarly under Vista as it did under w2k.  RAM would be the obvious potential bottleneck.  Would you say that monitoring available memory over time is an adequate measure to analyze?

  48. Security Man says:

    Thanks for the post. I’m looking forward to read a next bunch of information.

  49. stuart robertson says:

    Phileosophos did you read kb888137 as this seems to answer your question re sp1 and sp2 memory

  50. Jojo99 says:

    This is what I see on the performance tab for my Win32 SP3 system.  My available physical memory always stays around 1GB (out of 2GB).  

    I’ve always been curious about what "System Cache" is.  What does this memory represent and how is it managed?  Why is the number so high here?

    Totals

    Handles 23245

    Threads 879

    Processes 83

    Commit Charge (K)

    Total 1535908

    Limit 5009600

    Peak 3269464

    Physical Memory (K)

    Total 2095528

    Available 971408

    System Cache 890664

    Kernel Memory (K)

    Total 128680

    Paged 98196

    Nonpaged 30484

  51. vadim says:

    Mark,

    Thanks for your analysis. I have a practical question though. As someone has already pointed out a 64-bit Vista Ultimate can address several times more memory than Windows Server 2008 standard 32-bit or 63-bit. My question is about Windows Server 2008 32-bit in two flavors: Standard and Enperprise. The Enterprise version supports up to 64Gb despite being 32-bit. Is it possible to enable support for more than 4Gb of RAM in the Standard version? For example, I don’t a feature set of the Enterprise version but I need more RAM supported on a 32-bit system.

    Thanks.

  52. Wayne Robinson says:

    Mark you are a GOD! Thank You for an excellent read 🙂

  53. DaveC4 says:

    Mark, I just discovered your BLOG and this wonderful and informative post.  Please keep up the great writings – you are now in my blog subscriptions!

    PS – Is there anyway that you would post a full sized screen shot of that 64proc / 2TB RAM taskmanager?  i would love to pass that around.

  54. William Maynard says:

    This is the first time I have been here, and would like to know if you can provide me with an address to where I might be able to download a disk compactor for my hard drive.  I am running HP Windows Vista Home Basic with 14 1GB, of which I have 117GB left.  Sometimes I’ll have 123GB, then it will drop to 107GB, and then go up to varies degrees of memory.  My email address is:  billyblue3@verizon.net or mybillyblue@yahoo.com.

    I WILL appreciate anything you can do to accommodate me.  Thank you and have a nice day.

    Respectfully,

    William Maynard

  55. Ales says:

    Hi Mark,

    great blog post! I wonder if you’re willing to address Large Pages Support in Windows 2003/2008 in one of your following articles. I experimented with Oracle10g and Large Pages (on IBM machine with 32GB of RAM, Windows 2003 SP2, x64) and I don’t know how can one confirm that for example Oracle process memory was allocated with large pages or not!? Can we use some perf. monitor  counter or sysinternals tool for that? Even after I configured Oracle and setup Oracle server process to run under user with "Lock Pages In memory" privilege I observed considerable page faults for Oracle process – hence I suspect that process allocated memory with "ordinary" memory pages.

    Regards,

    Ales

  56. quux says:

    Excellent article Mark; I wish I’d know of it yesterday!

    As a rule of thumb, I use Perfmon and the Memory, Page Reads/sec counter. If that graph doesn’t tend to spend most of its time near zero, with the occasional and inevitable spikes being short and typically under 100, I assume the system has enough physical RAM. The higher that counter’s average goes (over long periods of time and at normal usage for the system), the more strongly I consider buying more ram or running less programs concurrently.

    Your thoughts on this as a rule of thumb?

  57. Anna N says:

    My rule of the thumb, 1GB for XP on subnotebook (more RAM means higher power and shorter battery life), 2GB for every other XP, 4GB for Vista. More than 4GB only on 64bit Vista AND only if you have profiled demanding application you need to use and it needs more RAM.

    Yes, there’s a reason to have 4GB under 32bit OS, and that is because most graphic cards have 512MB or less, so even after drivers’ memory holes you have usually much more than 2GB available, and that’s useful for caching (so for casual usage, too), especially under Vista. 4GB is (on current platforms) better than 3GB because of dual channel memory so 2x2GB means better memory performance than 2GB+1GB. This may change on triple-channel Nehalem, maybe 3x1GB will be better.

  58. Kenact says:

    "What about Vista ability to use USB flash storage for page files?"

    Actually, that capability has been available since Windows recognized USB.  I used to run my paging to an 8gb USB memory stick on a Windows 2k Terminal Server.  It worked just fine.  One caveat, use a memory stick that was designed to be used for paging.

  59. Steve Munson says:

    Fantastic article, which now leads to some questions…   I have an ASUS P4S8X motherboard running XP Pro SP2, with an ATI Sapphire AGP graphics card with 512MB on it, (64MB aperture on the motherboard) and the system has 3x1GB RAM (all 3 motherboard slots full and at max capacity).   I had been having difficulty with IE prior to going from 2GB to 3GB system RAM, where it would do really strange things to the display window, like flash the borders and scroll bars, and stop repainting at all – you could move the window, but it wouldn’t repaint the part of the desktop that you moved it from.   I suspected video drivers, but couldn’t be too sure.   I added the extra gigabyte of RAM figuring it sure wouldn’t hurt with as many windows as I have open at one time.   Much of the trouble went away, but has now returned.  I thus tried to change the motherboard graphics aperature to 512MB, and that locked up the system such that I couldn’t even boot to the POST screen.   I had to reset the CMOS and reconfigure to get it working again at the 64MB setting.  I’m going to have to take a closer look at the video drivers, but I’m real curious about why the graphics aperture change was such a significant piece of grief that I couldn’t even get past POST.   I use a 24" LCD with a 1920 x 1280 resolution for my monitor, and I also had a 19" CRT, so my system still thinks I have two active monitors (and thus two instances of the exe for the vid driver).  I have a copy of Vista Ultimate that I’m planning to install on my next system, although that might be awhile before I can afford the new machine (I’m not going to settle for any cpu less than a Q9450 quad-core with 8 GB RAM).  The question is, do I waste any time on researching my XP difficulties, or do I save the time and trouble and just tough it out until I get to Vista Ultimate 64?  I might learn something valuable though, so NOT toughing it out is certainly attractive from that perspective.

    Steve

  60. guest says:

    How does the flash memory with Vista work into this RAM usage?  i.e. readyboost

  61. netskink says:

    Where can we get the meminfo -r program for XP?  The one on the linked webpage is for Vista only.

  62. ASilver76 says:

    Question:

    Let’s say I’m running a 32-bit version of Winodws – for example, Windows XP SP2. I have installed 4GB memory, and only between 2.5-3.34 GB are accessible to the OS. The question I have is whether or not the remaining memory is still acceable for other system operations – for example, if I created a 1GB RAM disk, leaving me with 3GB, would Windows still recognize the RAM disk and the 3GB, or would it indicate that the RAM disk and only 2GB of free memory exists? I was under the impression that the additional "wasted memory" could, in fact, be repurposed in just such a manner, and would not affect the Windows perception of "available memory" at all. Is this correct?

  63. Peter Geany says:

    Hi Mark another excellent article thanks for posting it. Like some other posters above, I would like to hear what you recommend for pagefile / swapfile sizes.  There is very little really solid advice out there and what is documented is causing confusion as its all about how with little why and much is left unsaid.  I look after server systems with up to 64GB of RAM mostly 32 bit but we are slowly moving to 64bit Server 2003R2 as we refresh and because we have reached the 2 GB limit for some of our processes.  

    We occasionally have alerts from our older 2003 sp1 machines with 8GB of RAM and a 4GB page file alerting that the page file is full, yet the server shows that there is still 500Mb or more physical memory available. It happened on a 32GB 32bit system also when as far as I could tell only 12 GB of memory was being used at the time.

    My colleges feel that we should extend the pagefile beyond 4GB to 8GB, however I recall from the Sysinternals course I attended in London with yourself and David Solomon 18 months ago that maybe this is not the right thing to do on a 32bit system. As my memory is a little fuzzy now and systems have been updated and advice may have changed, some definitive written advice would be welcome.

  64. Ian Boyd says:

    ASilver76: "if you have a system with 3GB or more of memory and you are running a 32-bit Windows client, you may not be getting the benefit of all of the RAM"

    No, the system isn’t even using it. It’s not a practical limitation, it’s a limitation imposed to maintain stability. The RAM is available to the computer, but it is moved above 4GB. Since some drivers (somehow) can’t handle memory above 4GB, doing so would cause problems for users. So MS made the decision on 32-bit client operating systems to just not allow it.

    If you want the benefit of all the RAM, use a 64-bit operating system.

  65. Ian Boyd says:

    How is it that 32-bit drivers could even be given a memory address above 4GB? If it’s a 32-bit pointer, the maximum value is 32-bit.

    Unless pointer has been typedef’d to a 64-bit value for a long time now?

  66. David Willmore says:

    Who cares what physical memory mapping looks like?  Isn’t that what PAE is for?  To extend page table mappings to point to >4GB addresses and, thus, allow them to be mapped into addresses <4GB?  It seems that your post could go a little further into disambiguating the user memory map from the physical memory map.  Maybe I’ve been running Unix for too long.

    User processes don’t need PCI address space mapped into them.  Device drivers would, but not user processes.

    On 32 bit XP SP2, basically, they nerfed PAE support?

  67. Rowan Hawkins says:

    I have a question about the memory hole mapped for video drivers. Is this memory hole mapped on systems that have dedicated video memory or only for ones with video memory accessed as part of the systems total available ram?

    I could understand making a mapping for addressing the physical ram making on a system that used shared memory, but the other choice sounds like Memory Management by the Department of Redundancy Department.

  68. Robbie Mosaic Fan says:

    Great article, taught me quite some things.  Thanks Mark!

  69. Arlona says:

    I still need to know in plain and simple terms, how do I add more memory to my HP Vista. At this time my memory is at 0.99

    I need help soon.

    Thank you

    Arlona

  70. Linda Walsh says:

    How do I enable more than 3G on WinXP?  It seems that with Windows SP1 or SP2, a patch was put in to limit memory to 3GB — not 3.’x’.  But

    exactly 3Gig.  I’ve seen this confirmed by other users.  Something to do with driver security was the reason given.

    If I reboot into 32-bit linux, I see 3.5-3.7GB memory, and if I enable the PAE addressing, I see the full 4GB.

    So there are two separate issues — one is using addresses greater than 4GB to remap physical memory that overlaps device or BIOS reserved memory — that’s something that MS should have left enabled when using the "/PAE" boot switch.   If a user had a problematic driver, they could just ‘not use’ the PAE switch — but better yet — would be a RAMDISK that used any memory that would need >32bit addressing – that way ‘drivers’ could be shielded from ever seeing a >32bit addr, but users could still use the excess mem with only the OS seeing it.

    But the need for PAE mode doesn’t explain the 3GB limit.  I’m talking exactly 3GB — not 3.1 or 3.2GB, but 3*1024MB (3072).   The only info I could find was that memory was limited in SP2 to make certain security checks on memory addressing easier or some such nonsense that didn’t seem to make alot of sense.  

    So how can I undo this limitation — I do have a PAE enabled processor, and I’d even be so bold as to want to try PAE addressing mode, but even if it wasn’t stable, I could at least get an extra 15-20% of memory from memory ‘around’ the holes reserved by the BIOS.

  71. Richard Jones says:

    Hi Mark, thank you for an informative article. I’m a relative beginner to computer upgrading and found the information very useful.

    I have a question, if I may?  

    I’m running Vista Home Premium 32bit and have upped the RAM to 4Gb -(2x2Gb matched pair). Bios shows the full 4Gb as present but when both sticks are inserted, the computer will not boot past the POST screen. Inserting one stick only (either stick, either slot)allows a normal boot so I take that to mean both sticks and slots are functioning correctly?

    A search of the web has explained a great deal re: memory utilization but I can find nothing on this specific issue. Can you shed any light for me please?

    Thank you in anticipation

    Richard Jones  

  72. Thebitstream says:

    My laptop have 2GB of RAM and cannot be expanded often then I use ReadyBoost to add some speed on the system.

    Due to a superfetch in Vista 32bit can this lead do more memory utilization?

  73. Magumi says:

    Great article, as always. I just wonder how long it will take before we have 2TB of RAM in our laptops. 🙂

  74. Ken Schaefer says:

    To those asking about Readyboost – Readyboost is, effectively, a cache. Instead of reading data from your hard disk (which takes a relatively long time), data can be read from a flash-based cache with near-zero seek time. A file system filter handles this – it intercepts read calls for files and if the file is in the Readyboost cache, returns it.

    This has nothing to do with memory address space (virtual address space, system address space etc). Having a Readyboost cache doesn’t change the amount of virtual addresses that the OS will use.

    The same with the pagefile. The pagefile is for storing data that doesn’t fit into physical RAM (i.e. it is "paged" to the pagefile to be stored, and retrieve when required). Having a pagefile doesn’t change the virtual address space that the OS is programmed to use.

    @David Willmore – PAE is more than just expanding the amount of address space. NX requires PAE, because the fact that a memory page is not executable has to be stored somewhere. See: http://en.wikipedia.org/wiki/Physical_Address_Extension and http://blogs.msdn.com/oldnewthing/archive/2004/08/20/217683.aspx

    HTH

  75. alex says:

    Mark,

    Great article and love your Internal book series.  I have a general question for you- I had the oppurtunity to read your Internal books in tandem with William Stallings Operating System book- both terrifc reads and great when paired together.  Do you know any other great books like these to read?  Thanks

  76. Robert Gifford says:

    I Have two PNY 8 Gig. 2.0 Flash Drives . When I first got them they worked fine with ReadyBoost I had to re-format From FAT to NFTS Now ReadyBoost does not reconize them As being ReadyBoost capable . In other word when you open prop.Box to activate ReadyBoost the choice is not there??

  77. Paolo says:

    I have a strange behaviour:

    The computer property page reports 5,00GB RAM with a Window Server 2008 datacenter.

    BUT, if I look at the activity manager, it reports only 3966MB in use.

    Any suggestion?

    TIA

    Paolo

  78. Santhosh says:

    Hi Mark,

    PFN database represents each page of memory with a 28-byte data structure, the PFN database on a 128GB system requires about 930MB.

    I have a question on the above excerpt of the blog.

    If 128 GB system requires about 930 MB, then why is the 4GB system occupying 960 MB.  Effectively, shouldn’t it just occupy 29 MB.

    Please clarify my confusion.

    – Santhosh

  79. Dave says:

    re: Ian Boyd

    >How is it that 32-bit drivers could even

    > be given a memory address above 4GB? If it’s

    >a 32-bit pointer, the maximum value is 32-bit.

    >

    >Unless pointer has been typedef’d to a 64-bit >value for a long time now?

    "32 bit system" means "a virtual address is 32 bits".   The physical address size is somewhat wider (36 bits in Pentium Pro and onwards, since mid-1990s).  Likewise, 32-bit code is code that’s running in an address space where the VA size is 32 bits.

    For software addressing memory, the memory management unit maps 32-bit virtual into (larger) physical addresses.

    For devices addressing memory via physical addresses, the driver has to not attempt to store physical addresses in 32-bit variables. That’s been the case ‘for a long time’, but I suppose not all driver writers got that memo, which is why the artificial restriction exists in the client versions.

  80. Dave says:

    How is it that ‘datacenter’ versions of 32-bit Windows Server 2003 are able to support 128 GB?

    I was under the impression that the Pentium family had a 36-bit physical address space, which works out as 64 GB.  Where did the extra bit come from?  

    Did more recent versions of the processor grow another bit?  Maybe there’s some feature of a 64-bit-capable processor in 32-bit mode that I missed?

    Thanks/dave

  81. jugge says:

    PAE is implementation specific. The PTE is 64 bit in PAE mode, so there are a lot more bits in it that can be used for addressing. How many, depends on the specific CPU. Modern 64bit CPUs have a wider addressbus, and can therefore also make use of more of those bits.

  82. Rick says:

    Great clarifying paper which epxlains some often misunderstood points, i think.

    however, surely due to my lacking of some basis about the internals of windows memory menagement, i failed to totally understand the consequences in x64 windows systems of the reservation, done by chipset/bios if i have well understood, of some physical addresses ranges under FFFFFFFF, for devices:

    if those ranges of physical addresses are statically reserved, how can a x64 win. system really use all of the physical ram ? ok, in those system also memory above 4GB can be used, but it sounded to me that that memory reserved for devices is anyway lost.

    for example, in that mentioned 4GB of ram laptop with vista x64: ok it’s shown that those 500MB reserved to devices below FFFFFFFF are then addressed, unlike 32bit windows, above that boundary; but if physical ram still is 4GB, how can the totality of it be avaible to the user and system purposes, if part of it it’s statically reserved to devices ?

    or maybe i misunderstood the definition of "physical address", related to Windows mem. management, which is implicit in this paper and it happens something like: "physical" addresses cover not only the physical ram but also the amount of disk space allocated to the file(s) pagefile.sys, so that regions reserved to devices can be swappped to disk and really 100% of physical ram can be used, if needed.

    can someone help me to really understand the point ?

    thanks to Mr Russinovich for the paper and to him and/or to everyone else reading my post for his/her attention

  83. Brandon says:

    A while ago we had a problem with a 32bit Enterprise version of 2003 plus SQL 2005 Enterprise. The performance wasn’t as good as we expected it to be. Microsoft SQL consultants had previously said that the pagefile is not needed for a SQL server with enough (16 GB) RAM. So we set it up with 3 or 4 GB.

    Then we found this: http://msdn.microsoft.com/en-us/library/ms178067.aspx

    there it says "Under Windows Server 2003, dynamic AWE memory is supported on servers with less physical memory than the configured virtual memory limit. Windows 2000 required that the available physical memory exceed the virtual memory in order to enable AWE memory."

    Based upon this description we decided to do the normal 2.5x RAM sized pagefile (24GB), so that the physical memory would be smaller than the virtual memory limit… and performance improved, even though it wasn’t running low on memory.

    Why? Do we always need to have a larger pagefile than memory in a 32 bit environment? It just seems like a waste of space since SQL should stay in memory.

    Thanks,

    Brandon

  84. Rick says:

    i forgot in my previous comment: can anyone suggest a tool to see the layout of physical memory, like that "meminfo" mentioned in thi paper, but working on nt5.x class systems ?

    thanks in advance

  85. David Solomon says:

    re: Brandon’s commment "Based upon this description we decided to do the normal 2.5x RAM sized pagefile (24GB)"

    Fyi, although many MS formulas/defaults use RAM*n to size the pagefile, it’s actually nonsense – the more RAM you have, the smaller pagefile you need to run a given set of apps.  Windows won’t use more pagefile space if it’s there (it just means the system has a larger commit limit).

    –David Solomon

    coauthor, Windows Internals (MS Press)

    http://www.solsem.com

  86. David Solomon says:

    re: Rick’s question "if those ranges of physical addresses are statically reserved, how can a x64 win. system really use all of the physical ram?"

    the physical addresses are RESERVED by devices – the actual RAM is not taken up by that; however, since some amount of physical *addresses* are used up by (non-RAM) devices, the physical address for the upper part of RAM is above FFFFFFFF (e.g. the highest value you can have with 32-bits).  And since 64-bit Windows can go beyond that number, that’s why it can "use" (or maybe more clearly stated "address") all the RAM.

    Hope that clears it up…

    –Dave Solomon

    coauthor, Windows Internals

    http://www.solsem.com

  87. Luiz Santos says:

    Hi Mark,

    I have server with Windows Standard 64-bit with 16 GB of memory. I just set page file for "none", but after reestart I notice that in Task Manager it keeps saying that I am using 6 GB of memory and what is funny is that if i go to Performance Monitor I can see that the Page FIle counter is always 0. Do you know why Task Manager shows that?

    Regards,

    Gus

  88. jay says:

    So does this mean vista 32bit or xp 32bit can make full use of 3GB’s? If it all shows in task manager and it gets cached so is it all really being used? It must be if it gets cached correct?

  89. rsbroad says:

    The Intel Pentium has a 36 bit address bus. The 36 bit address bus is connected to the external Northbridge Chip, which is also called the Memory Controller. The Northbridge Chip has a second 40 bit address bus. This second 40 bit address bus is connected to the actual dram (dynamic ram) chips.

    The AMD Athelon has a 40 bit address bus. The Athelon has the Memory Controller circuitry integral to the CPU chip.

    In both cases of Intel and AMD:

    The maximum address space in 32 bit mode is 2^32, 4 gigabytes.

    The maximum address space in 64 bit mode is 2^36, 64 gigabytes.

    In both cases of 32 and 64 bit:

    Any memory access outside of the maximum address space requires the much dreaded bank switching.

    Bank switching works. It might seem like repairing furniture with duct tape, but it works. Therefor a 32 bit mode processor can conceivably access 2^40 bytes, 1 tetrabytes, or 1,099 gigabytes.

    Actually, bank switching works except when it doesn’t work. Therefor Windows 32 bit is limited to 2^32 bytes. In other words, Windows 32 bit would access 2^40 bytes if it could, but it can’t, so it doesn’t. Blame drivers.

    The practical challange of installing huge amounts of ram is in the electronics, not the software. Supplying power to 2^40 bytes of ram is science fiction. Supplying address signals and data signals to so much ram is fantasy.

    At any moment in time, Intel and AMD may increase or decrease the width of the Memory Controller address bus. Older Northbridge Cips had less than 40 bit addressing. Newer (as yet unannounced) chips may have more bits of addressing. Smaller devices, such as notebook computers, may have smaller Memory Controller chips in order to save power.

    There is no way to recover the lost dram in 32 bit Windows. But 3.2 gigabytes ought to be enough for everybody.

  90. Nick Kotarski says:

    Hi Mark,

    Another very interesting article.

    Shame that Meminfo won’t work on XP.

    Nick

  91. mrAndy says:

    Have an acer laptop. Ugraded from 1gb to 4gb (2x 2gb) RAM. however, the system seems to be missing 2gb. some scanning software identifies the missing 2gb so the RAM must be working.

    And yes the Upgrade is compatable with my system.

    Any ideas????

  92. prni says:

    So why not leave a way to allow access to above-4gb for those who are willing to risk it ?

    Pretty soon the h/w vendors would update their drivers…

  93. prni says:

    Hi Mark,

    Can you elaborate on the relationship between virtual and physical adresses in relation to this discussion, i.e. since each process has it’s own 32 bit virual adress space, could different processes use more than 4 gb of memory if the old PAE behaviour was brought back ?

    Thanks

    Per

  94. Bryan Fairchild says:

    Great article Mark, Thanks for defining the 4GB barrier and how 32bit and 64bit OS’s deal with it. I noticed you’ve got two GTX 280s, very nice! I just built my power house system but had to settle for one 280. I too realized quickly after getting my new system built that I needed to ditch 32bit. 64bit Vista runs great.

  95. mike says:

    Adobe does not have a flash player for our 64 bit computers. We use the internet to get new infromation on building products. Most of the sites require Flash Player to view the products. Since Adobe does not appear interested in providing a player for 64 bit machines do you know of a alternative Player that will work.

  96. Rick says:

    I want to thank Mr. Solomon for his kind and clear answer to my question

    (question originated, as i said, from my holes in the knowledge of mem. management in win., not from something missing in the paper)

    I’m also honored that the coauthor of "Windows Internals" took a bit of time to answer my question, thanks again.

  97. Const2 says:

    Why Windows itself does not use memory above 4GB for internal needs? With no dependences of h/w vendors drivers…

    May be internal buffers, PFN database or something else?

  98. alex says:

    Mark, I know sysinternals for a long time and always wonder, where do you find this kind of information? Are they public trhough C or C++ system API/dlls?

  99. Sudeep Kumar K S says:

    Very informative blog.Good work. I was working on capacity planning for VMWare and was analysing usage statistics for the current server. I was wondering how I can find out the Average memory utilization and the peak memory utilization. Looks like I should find out available MBytes and then subtract those values from the actual MBytes of memory in the server and then find out the avareage of that and peak from that

  100. Yuhong Bao says:

    BTW, I talked to Larry Osterman about adding the ability for 32-bit client versions of Windows to address more than 4 GB of RAM via PAE, needless to say that unfortunately failed.

  101. Evan Teran says:

    Thank you for providing accurate information on this subject. There is so much mis-information out there being spread by "experts" that it’s not even funny.

    One question though. Why couldn’t the RAM that gets displaced to above the 4GB mark be used for something guaranteed to be safe? Basically, you could create a separate pool for this RAM and only use it for things that are known to never use 32-bit DMA and such. Like for example, user space code pages?

  102. PLY says:

    OK – then am I wasting my money if I purchase a Windows XP Pro system with 4GB of RAM and a 1.5 GB video card?

  103. George Birbilis says:

    why not have the OS make a ramdrive at the extra memory and use it for speeding-up the system, similar to how Vista can use flash memory devices for system speedup?

  104. Jazmin says:

    Recently I have installed Windows 2008 32bits  on my board and it reports 1.34GB of Installed System Memory (RAM) and physically I have 1GB of Memory.

    I have checked Physically Memory field from msInfo.exe tool and it indicates that system has ~ 1GB.

    Do you know how I can figurate why windows increase the RAM installed?

  105. sandman says:

    Jaz, you likely have only 1GB (too little, btw) RAM installed, but I suspect you also have a video card with onboard RAM.

    This extra RAM on the video card receives an address for mapping, and may be what you are seeing as reported/used memory mapped.

    If you were to install further RAM to the full limit of 4GB, you would find that your memory in the machine can be discovered by utility tools and found to total perhaps ~4.3 GB, including both RAM and video, but only 3.5 GB will be available to the system due to this same video card taking up some of the RAM addresses.

  106. Steve W says:

    I’ve got a Toshiba M400 Tablet PC with Vista Ultimate (32-bit), 4 Gigs of 667 MHz RAM, and  45% free on a 7200 RPM, 180 GB hard drive.  When it was brand new it responded much more quickly and videos played smoothly.  However, it has become rather pokey of late.  It’s sloooow to respond to mouse clicks (especially the Start Menu), and videos of all formats stutter in WMP (but not as much in WMC).

    Someone recommended that I downgrade to Windows XP Tablet 2005.  Their rationale was that as an offshot XP Pro, XP Tablet 2005 can make better use of my Gigs of RAM. I don’t need all the features Vista has such as Aero and better handwriting recognition (the tablet function is usualy used to illustrate during PowerPoint presentations).

    Does this recommendation make sense?

  107. David Solomon says:

    re:  Athena’s comment: "The part mark seems to be unaware of is that consumer versions of XP-32-bit disabled memory above 3GB in SP2 due to driver problems"

    WRONG. There is no such limitation in XP 32-bit.

    Mark’s article is correct – re-read the sentence "While 4GB is the licensed limit for 32-bit client SKUs, the effective limit is actually lower and dependent on the system’s chipset and connected devices."

    So XP 32-bit will not access PHYSICAL MEMORY that happens to fall above the 4GB PHYSICAL ADDRESS barrier.  So depending on placement of device memory in the physical address range (such as video cards, PCI addresses), you might get 3.1, 3.2, 3.3, close to 4GB – who knows.  But there is no 3GB limit!

  108. DAKS says:

    I have the same issue that nagyandor has with WinXP SP 3. I have 4GB RAM but windows only reports 2GB. Why only 2GB compared to others showing over 3GB?

  109. Thief^ says:

    Re: DAKS

    "I have the same issue that nagyandor has with WinXP SP 3. I have 4GB RAM but windows only reports 2GB. Why only 2GB compared to others showing over 3GB?"

    Because your motherboard chipset has decided to reserve 2GB, and theirs hasn’t. If you update your chipset drivers, you could see more.

  110. nagyandor says:

    I still cannot find the answer to my question in the title.

    Why can I see the whole 4GB memory in linux and Win2k3r2 with PAE and why not in WinXP with PAE?

    (see my previous comment)

    Thanks,

    Andor

  111. Tayyab says:

    I am using xp, sp 2, media centre edition, i upgraded my memory to 4G, now it shows me 2.99G in system properties, and 4096Mb in system info, i-e physical memory,

    Need solution

  112. tayyab says:

    Same problem, i just need solution, i installed 4 gb of ram, and it shows 2.99 Gb in system properties, while in system info it displays 4 Gb, help plz

  113. r00t says:

    do you have 32 or 64 bit xp version?

  114. Octavius says:

    I recently purchased a "economic"Packard Bell PC overseas.It has a Pentium dual core E2180 2.0 GhZ with a Sis 671 chipset with Mirage3(32bit/64Mb)video card and 1Gb DDR2-667MhZ RAM and 32-bit Windows Vista "starter".This OS was the most OBSURD thing ive ever seen.It limited me to 3 programs open at once and didnt have nor support over half the features of Vista home basic.I found out that this Os was intended for entry level,low-cost PC´s in developing countries.Furthermore,the Os was NOT upgradable.So,i went and got myself Vista ultimateSP1 32-bit and Formatted my drive including the 8gig partition for recovery and the Os works fine,better than expected.I also noticed the 980Mb instead of the full 1gb RAM issue as everyone else,so i decided to get myself 4GB of RAM(x2-2GB)and a 128 bit,512 MB 9500 GT.I went to the SiS Page and the motherboard and proccesor support 64-bitOS.So my question is,if I buy the video card and the 4GB of RAM am I going to see a performance increase or should I upgrade to 64Bit first?

  115. maarten says:

    Thanks for publishing this. I knew about the artificial memory addressing limit of 4GB in 32 bit Windows versions, but this is the first time I read about why Microsoft decided to implement this limit.

    I can certainly understand going over 4GB would be a risk when some drivers will choke on it, but I suspect the marketing reasons you hinted at are at least as important. Otherwise they could at least have implemented a registry or BCD flag to enable true PAE.

    For me switching to 64 bit Vista is not an option yet, because some apps I use don’t run (as well) on it.

    Anyway, thanks again for sharing this!

  116. Catto says:

    Hey Now Mark,

    Great post. Lots of good info.

    Thx 4 the info,

    Catto

  117. tcsenter says:

    Andor,

    The answer to your question is explained fully under the section titled "Windows Client Memory Limits".  Beginning with Service Pack 2 for Windows XP, the PAE kernel in 32-bit client versions of Windows (e.g. XP and Vista) was modified to effectively limit total physical address space to 4GB, the same as without the PAE kernel.  However, this modification to the PAE kernel was not applied to 32-bit enterprise and database server SKUs (though entry-level server editions have the same limit).

  118. Nihar says:

    Mark,

    I have one question. I got this info from the shop owner of laptops. I went to a shop to purchase a laptop with 4GB RAM. The shop owner told me that if you are purchasing a laptop with 4GB of RAM then go for a laptop that has 64-bit windows OS because it uses the full 4 GB and if you are going for 32-bit Laptop then go for 3GB and don’t go for 4 GB because, it doesn’t fully utilize 4 GB.

    Is that true? I followed his advice and purchased Sony Vaio 3GB RAM Laptop with Windows Home Vista.

    Please let me know.

  119. operagost says:

    "So why not leave a way to allow access to above-4gb for those who are willing to risk it ?"

    Because that would not help sell copies of 64-bit Vista.

  120. tcsenter says:

    Nihar,

    64-bit OS is not a guarantee.  The hardware (CPU and chipset) must also support addressing beyond 32-bit.  Nearly all CPUs released in the past few years are 64-bit ready, but there are still several chipsets in use that are hard limited to 32-bit addressing.  In such cases, a 64-bit OS can be installed because a 64-bit ready CPU will run it, but system address space is still limited to the ‘old’ 32-bit standard by the chipset.

    Unfortunately, this was all too common until several months ago.  Major OEMs like HP, Dell, and others were configuring notebooks (and desktops to a lesser extent) with Vista 64-bit offering up to 4GB RAM, but the chipsets were often the same ‘old’ 32-bit architecture (Intel 945 Series was one of the more commonly used).  This went on for a good year before OEMs began to shift a larger percentage of their product lines toward newer chipsets with larger addressing support.  Many OEMs are still shipping notebooks with 32-bit chipsets, but its becoming the exception.

    So you can’t make too many assumptions about the hardware from the OS.  If the system hardware can support MORE than 4GB RAM (e.g. 8GB), that is a sure-fire indication the chipset can exceed 32-bit addressing limits.  But if the system hardware is advertised to support 4GB (MAX), you’ll need to dig deeper and ask more questions.  Some companies set an arbitrary support limit at 4GB in marketing specs even though the hardware is capable of supporting more.  In other cases, 4GB could be a real limit of the hardware rather than an arbitrary marketing decision.

  121. EL says:

    Hi,  Nice article!!  Very informative.

    However, I don’t understand the principle about the limit of 4GB vs devices.  Here’s what you said:

    [quote]

    If a system has 4GB RAM and devices, like video, audio and network adapters, that implement windows into their device memory that sum to 500MB, 500MB of the 4GB of RAM will reside above the 4GB address boundary, as seen below:[/quote]

    Like you said, you have a system with 4GB of RAM.

    If video,audio and network adapters took 500MB of 4GB of RAM, why you can go above 4GB of RAM (beyond the physical limit) to be able to use the "stolen" 500MB  ?  After all, they are reserved/used by the devices and I just don’t understand how it would be possible to use the "phantom" space above the physical limit of 4GB.

    Thank you in advance for clarifications!

  122. tcsenter says:

    EL,

    The quoted statement may lack some clarity.  The 500MB address space required for devices would displace an equal amount of RAM, requiring the RAM to be placed above 4GB so that device memory can occupy the space below 4GB.  The 500MB RAM then becomes inaccessible to an OS which is limited to 32-bit physical address space.  i.e. it cannot be utilized

    With 36-bit PAE or 64-bit OS, the 500MB RAM which is displaced above 4GB can be utilized.  I hope that helps.

  123. Garry Trinder says:

    About PAE. So when Microsoft supports 128 GB in their 32bit OSes that is 36+1 = 37-bit PAE?

  124. dopey says:

    Great article! I never knew why windows at up those gigabytes of ram before, and now I do!

    Thank you!

    /subscribing

  125. erez says:

    Let me ask a "reverse" quetion.  Given all of the above discussion, is there *any* non-datacenter (I think you refer to it as "client" above) 32 bit Windows based OS that can use more then 3.x GB?  I have a friend that does edits of huge images, and Photoshop is a huge memory consumer.  From my reading about Windows 7, it has the same limitations — as far as memory sizes…

  126. Stavi says:

    Erez has mentioned W7. Why W7 x32 has the same 4GB limit when all the drivers should have WHQL certification from Vista upwards?

    When all the drivers are certified the risk of enabling more than 4GB is almost none.

    Seems to me like marketing…

  127. cppprogrammer@live.com says:

    "What they found was that many of the systems would crash, hang, or become unbootable because some device drivers, commonly those for video and audio devices that are found typically on clients but not servers, were not programmed to expect physical addresses larger than 4GB. As a result, the drivers truncated such addresses, resulting in memory corruptions and corruption side effects. Server systems commonly have more generic devices and with simpler and more stable drivers, and therefore hadn’t generally surfaced these problems. The problematic client driver ecosystem led to the decision for client SKUs to ignore physical memory that resides above 4GB, even though they can theoretically address it."

    What a pathetic way around the problem. Instead on instituting REAL driver certifications, they fudge the driver rules to accommodate broken drivers. 64-bit windows is still not mainstream yet 4GB memory IS extremely common nowadays yet we can’t use 1GB+ of it.

  128. Auto says:

    I think that Windows Vista 32-bit can surely manage more than 4 GB with PAE, but there is only a license problem :-<

    Have a look at this very GOOD article:

    http://www.geoffchappell.com/viewer.htm?doc=notes/windows/license/memory.htm

    "Pushing the Limits of Windows" ?

    I think they want to push the 64-bit version of the operative system 🙂

    Stay well.

  129. Mikael Karlsson says:

    Please make a little article about Superfetch in Windows 7 and how/why it has been nutered, and touch on if there’s anything the user can do to make it work more similarly to what it does under Vista. We’re a few people here and there that has been in the dark over this for a long while now. Please.

  130. James Sutherland says:

    I’ve known about the "memory hole" issue and having machines with 4 Gb of RAM only showing around 3 Gb under 32 bit Windows; what surprised me recently was noticing the System Properties pane showing 18 Gb on my home PC (Vista Ultimate x64), despite only having 3 Gb of actual RAM installed! Presumably just an odd cosmetic bug – if the memory management subsytem really believed it had an imaginary extra 15 Gb, things would collapse almost instantly – but bizarre.

    I have a few imaging tasks (analyzing 3D images – CT scan data, as it happens) which are running into 2 and 3 Gb address space limitations; switching from the 2/2 split to 3/1 helped, but wasn’t quite enough for everything. I’m starting to move our systems to the x64 version of Windows where possible, but with existing machines and data that can be a pain. As others have said here, I do wish more hardware vendors would ship x64 Windows!

  131. Mehmet Iyigun says:

    This is in response to Mikael Karlsson’s comments regarding Superfetch.

    During Windows7 development, we made a number of improvements to how Superfetch manages memory. Many of these changes were directly in response to customer comments. At a high level, some of these improvements are as follows:

    (1) Be quieter: Even though Superfetch always utilizes low-priority I/O for its memory population in order to avoid interfering with foreground activity, we found that many users get annoyed at hearing the disk activity and seeing the disk light blink. In Windows7, Superfetch is a lot more respectful of user presence.

    (2) Be more selective: In Windows7, Superfetch still populates the OS cache with frequently-accessed data from the disk and prioritizes RAM contents, but the underlying algorithms have been improved over Vista. As a result, Superfetch now typically prefetches a smaller, but more relevant volume of data from the disk and prioritizes memory more effectively.

    Overall, our results (from a number of users over weeks) indicate that disk activity due to Superfetch is significantly lower in Windows7 compared to Vista while system responsiveness is much improved due to fewer hard page faults from the pagefile and other files.

    There is no way to make Windows7 Superfetch bahave like its Vista predecessor.

    Is there a specific scenario you’re worried about?

  132. Mikael Karlsson says:

    I appreciate your response very much mr Mehmet Iyigun, thank you.

    I fully expected some changes due to user feedback even if much of what I have seen users comment on Superfetch has largely been based on misunderstandings. I had hoped though that the changes were not going to be quite this drastic. To explain my concern I think that I do best to describe two situations.

    A: When Windows has started up and everything has become responsive, Superfetch continues its unobtrusive work by loading roughly 6-7GB of data into the otherwise unused RAM of my humble system. After or even during this is being done I can start up larger applications like Photoshop or my latest played games and they typically load up just as fast as if I had just run them minutes ago. This makes me feel very happy about having fitted my primary system with 8GB over a year ago with already then quite inexpensive memory modules. Inexpensive means that most anyone running a 64bit Windows on a desktop system can also afford having 8GB of RAM, and greatly benefit from it thanks to Superfetch.

    B: After Windows has started up and all the little apps has done so as well, Superfetch does very little for about six minutes, only then does it noticeably start to preload anything, but even then not much more than some 500MB of data into my 6-7GB of unused RAM. If I start for instance Photoshop in advance of those six minutes it starts as slowly as ever, and even after those measly 500MB have loaded none of my recently and often run games does not start up any bit noticeably faster than had Superfetch been turned off. Unless I carry out some file copy operations I rarely see more than half of the RAM being used at all for a whole day. In this situation the system might as well have had 4GB rather than 8GB. I would not notice the difference on a typical day, in stark contrast to situation A.

    I hope that Superfetch might become in some manner somewhat configurable in the not too distant future. The 64bit evolution is beginning to roll in earnest and it’s not too unusual for home user desktops of today to be able to sport even more than 8GB of RAM. Solid state drives won’t become fast enough or affordable enough to make preemptive file caching less interesting for several years still.

  133. TK says:

    It must be possible to write a ramdrive.sys that accesses the memory controller driver directly to allow access to PAE remapped ram above the 4G barrier that 32 bit windows is scared of using and use the upper unused RAM as the primary paging file drive letter for virtual memory use, even if it was just 1G it would be a significant performance increase over vista’s use of harddrive based paging file.

  134. Rune3 says:

    Mehmet Iyigun, what I have always tried to find out (but never had time to explore myself) is: Does Superfetch benefit from ReadyBoost?

    My guess is that it doesn’t. It would be a neat feature to have SF load stuff from a flash thingy rather than completely strangle my hard drives.

    From my POV, SF adds very little benefit. If I want to launch PS, I will launch PS. If I want to launch VS, I will launch VS. I do not need someone making educated guesses as to what I will do or not. My machine at work (XP incidentally) stays on most of the time, so everything is usually in the cache anyway. On my previous work machine I had Vista, and that machine I booted every day and SF was very annoying. At one point I had presented some pictures to friends, after which it would load a bunch of 18MB big raw files every time I started Vista…

  135. Harold says:

    Something confused me for a moment, so I believe you have a misprint you’ll want to correct. The memory limit for Windows 7 will be 192GB rather than 192MB. BTW excellent article.

  136. Mark Cleary says:

    Carmen Crincoli’s blog http://blogs.msdn.com/carmencr/archive/2004/08/06/210093.aspx says you can use that extra memory by specifying both /PAE and /NOEXECUTE in boot.ini.

    <quote> When you use the /NoExecute switch on these OS’s, ntldr now loads the PAE kernel, but in a special mode.  You don’t get access to over 4GB of RAM, and more importantly, your drivers don’t get physical addresses over the 4GB mark either. <snip/>  If you add the /PAE switch, you get the normal PAE behavior <snip/>

    While both /PAE and /NoExecute use the same kernel file (ntkrnlpa.exe or ntkrpamp.exe) and address translation mechanism, you need both switches in place to enable both features. </quote>

  137. Gregory says:

    Mark Cleary: Not in XP SP2 or SP3. Not in Vista, and very unlikely in Win7 either.

    You know what the real problem is? The real problem is that people have forgotten what an utter pain EMS (the expanded memory spec) was to work with, and PAE is nothing more than a jazzed up EMS. But worse? Worse is MSFT not allowing us to make up our minds. Far better would be MSFT enabling the use of PAE and memory addresses >4GB, and then disclaiming all support.

    Like that’s going to work in real life, though.

  138. Jamie Hanrahan says:

    Gregory: > PAE is nothing more than a jazzed up EMS.

    Sorry but that is completely wrong. PAE and EMS have nothing to do with each other.

    PAE is nothing more than virtual memory address translation just as x86 has always done, with the tables expanded to three stages of lookup instead of two, and with support for wider physical addresses. Without PAE there are two lookup tables (page table and page directory); PAE adds a third table, the PDPT, and makes all three tables 64 bits wide instead of 32.

    And far from being an "utter pain", PAE has no impact at all on the app programmer. Anyone who tells you an app has to be modified to "take advantage of PAE" does not know whereof they speak.

    Maybe they’re thinking of AWE, but AWE and PAE are completely independent things.

    And guess what? Address translation on x64 starts with the PAE scheme and adds a *fourth* table, the "page map level 4" table. So if you think PAE is "nothing more than a jazzed up EMS" then you must think x64 is even worse.

    Take a look at http://www.intel.com/Assets/PDF/manual/253668.pdf . Look at figures 4-2 (x86 without PAE), 4-5 (x86 with PAE), and 4-8 (x64). Now please explain why you think PAE is "nothing more than a jazzed-up EMS"?  

  139. Geoff Chappell says:

    "If you want [to be able to use more than 4GB in Vista] without contrivance, then pester Microsoft for an upgrade of the license data or at least for a credible, detailed reasoning of its policy for licensing your use of your computer’s memory. … [C]onsider
    Windows Server 2008. For the loader and kernel in Windows Vista SP1 (and, by the way, for the overwhelming majority of all executables), the corresponding executable in Windows Server 2008 is exactly the same, byte for byte. Yet Microsoft sells 32-bit Windows
    Server 2008 for use with as much as 64GB of memory. Does Microsoft really mean to say that when it re-badges these same executables as Windows Vista SP1, they suddenly acquire an architectural limit of 4GB? Or is it that a driver for Windows Server 2008 is
    safe for using with memory above 4GB as long as you don’t let it interact with the identical executables from Windows Vista SP1?"

    http://www.geoffchappell.com/viewer.htm?doc=notes/windows/license/memory.htm

  140. Geoff Chappell says:

    Just to be clear … where the post dated August 25, 2009 says "by Geoff Chappell", it must be some other Geoff Chappell than the author of the page at the cited URL. I, the author, did not post that.

    It looks like someone has copied from a third website and posted here under my name. I would never extract with that "… [C]" construction.

    To whoever did post it, even if your name is Geoff Chappell, please don’t link your name to my website. You’re not me, and you should be glad of that.

    Geoff Chappell.

  141. MTeixeira says:

    Thanks for another excelent article,

    a bit offtopic, why do we still have 4KBytes pages (since 80386 maybe earlier?), if we had say 1MByte pages we would need a much smaller PFN, and more importantly less address remaping by the OS/CPU (I am not sure how many real memory fetchs must be done to convert a VM address to a physical one – 3?)

  142. John Campbell says:

    Hi Mark,

    on my 32-bit vista, 3GB installed gives 2.86GB.

    However installing 64-bit vista and 64-bit windows 7 RC still gives me 2.86GB usable. Why is that? Would really really appreciate your help on how to solve it. Sony is refusing to help!

  143. cheap computers says:

    I too realized quickly after getting my new system built that I needed to ditch 32bit.

  144. itsme says:

    I’m glad to hear that the SuperFetch feature is less broken or maybe even fixed in Windows 7.

    In concept it’s a great idea.  The vista iplementation was so so so bad, with it being so eager to swap out something that I was using five minutes ago and would probably be using again in five minutes for something that I use every week or two.  It’s like the motto was do something, do anything, just stay busy.

    To the guy who was complaining about it not being aggressive enough I say so what.  For every person who thinks it’s not aggressive enough, twenty people think it’s too aggressive.

  145. gareth.douce says:

    I’m really going to repeat a question that Santosh asked about the PFN and didn’t seem to get answered.

    In the example it shows a 960MB PFN — it explains that the 960MB is required to address 32GB of RAM.

    What it doesn’t explain is whether the PFN is static in size or if it is scaled based on the amount of physical RAM.

    The obvious question then is when you implement 4GT and/or userVA is the PFN re-sized to leave more space for the kernel.

  146. KonradK says:

    I cannot find clear answer to one question. If I have Windows XP SP2 or SP3 and exactly 4GB of RAM installed and use /PAE switch, will I have 4GB available or is /PAE switch completely ineffectual since SP2?

    In other words: is a 4GB limit for XP an address space limit or it is an amount of usable memory limit?

  147. Thomas Vogler says:

    Thank you for that insightful article. But this all is and never was an issue for me with my 8 GB Notebook. Gaahh – wait – the label reads "MacBook Pro" – oops, wrong forum. I converted. 🙂

  148. Thomas SAmuel says:

    Hi Mark,

    Greetings!

    My HP Proliant DL 380 G4 server, has 6 GB of memory with Windows 2003 enterprise edition server(it was showing). I reconfigured RAID 5(added 3 more Hdd`s) and reinstalled windows 2003 enterprise edition server itself( same as earlier), now its showing only 3.5 GB of memory. No other changes made in server. Please help

    Thanks in advance

    Thomas Samuel Anish

  149. EW says:

    Thomas Samuel,

    Edit boot.ini and add the /PAE switch at the end of line in the section "operating systems".

    eg.

    [boot loader]

    timeout=3

    default=multi(0)disk(0)rdisk(0)partition(1)WINDOWS

    [operating systems]

    multi(0)disk(0)rdisk(0)partition(1)WINDOWS="Windows Server 2003, Enterprise – 6GB" /noexecute=optout /fastdetect /PAE

    multi(0)disk(0)rdisk(0)partition(1)WINDOWS="Windows Server 2003, Enterprise – 4GB" /noexecute=optout /fastdetect

    Greetz.

  150. Alef Sin says:

    As usual, great article Mark!

    I’m trying to understand what’s going on on my laptop: I’m running Windows 7 64bits and I have 4GB of RAM. The "Total memroy" reported by Windows is only 3447MB and the resource monitor is telling me that there is a 649MB "Hardware Reserved" area in the address space. Here is the meminfo report:

    Physical Memory Range: 0000000000001000 to 000000000009F000 (158 pages, 632 KB)

    Physical Memory Range: 0000000000100000 to 00000000D77D0000 (882384 pages, 3529536 KB)

    MmHighestPhysicalPage: 882640

    Given that I’m running a 64bits OS, I don’t understand why only 3.3GB of RAM is available to the OS. Could it be a chipset limitaion? (this is an old intel 945 chipset).

  151. Hi Alef,

    This thread seems to discuss what you are dealing with.  It does appear to be related to the chipset you’re using.

    http://social.technet.microsoft.com/Forums/en/w7itproperf/thread/7d63ee09-b33e-4ba6-a9fe-85b928f99ba6

  152. curious1 says:

    sooo… Given there are 2GB graphics cards out now, what happens when I put two of them in a system? Are we about to run into the next architectural limit?

  153. Charles Pathfinder says:

    Yep. it does looks like we are about to hit a brick wall of enforced memory limits.

    My issue is that I would like to upgrade my Graphics Card from an 8600 GT 512MB on a 32 bit MS VISTA system. All the good new graphics cards are 1GB+ in size.

    It is a bummer. There don’t seem to be utilities in the graphics card space to make large cards appear to have a smaller memory footprint and there are no elegant solutions in the OS space to manage the extra graphics memory space.

    /Charles

  154. palle says:

    The amount of VRAM and the amount of MMIO a gfx card takes up doesn’t have to be 1:1. Usually 256 MB is mapped per GPU.

    So just because the card has 2 GB VRAM doesn’t mean it takes up 2 GB in the CPU’s address space.

  155. tcsenter says:

    And in fact, Mark provides a very good example of this in the blog.  He shows the memory reservation in a system running 2 x 1GB GTX 280’s in SLI, each of which is only consuming 256MB (plus some additional dynamic memory space).

  156. Paul Alexandrescu says:

    I have an ASUS M2N-SLI with a Athlon x2 64 6000/ 4GB RAM /nVidia 8800GT 512 ( 1024 MB hardware reserved) and a Lenovo T400/2GB RAM/4500MHD Intel Video on board ( 284 MB hardware reserved) both  running windows 7 x64. I could swear that I didn’t have that problem initially and then something changed and triggered it.

    What I had done in my case was follow some tweaks suggestions to enable multiple CPUs (set to 2) and memory max (set to my memory size ) in msconfig / boot /advanced options. I know that in some places people say that setting these 2 settings are making the problem go away, but in my case unsetting both of these, on both computers made the hardware reserved memory size go to 1 MB.

    I think this is a Microsoft bug, since I can trigger on 2 very different systems and do it consistently.

    Hope it helps.

  157. JeffLebo says:

    Can someone explain how in Windows Task Manager ( XP w/SP2 ) under Physical Memory I have

    Total :        2095188

    Available :    1088052

    System Cache : 1189760

    How can Available + System Cache > Total ??  I can only assume that some amount of System Cache is being done in virtual memory ( pagefile ?)  If so, why doesn’t it use it from Available?  Or are either one not being calculated correctly?  

    Can someone help clarify?  

    Thanks,

    JeffL

  158. Arash Moshtaghi says:

    page fault(PF) is relatively good as general guideline to see if additional would help the system performance.

    Thanks

  159. Invalid Handle says:

    How the maximum physical limit of 32-bit Windows 128GB, given that the maximum physical address space that CPU can access in PAE mode is 2^36 i.e. 64GB.

  160. Invalid Handle says:

    Thanks for the response Mark but then I am confused by the statement :

    "The maximum 32-bit limit of 128GB, supported by Windows Server 2003 Datacenter Edition,…"

    Shouldn’t it be :

    "The maximum 32-bit limit of 64GB, supported by Windows Server 2003 Datacenter Edition,…"

  161. Yuhong Bao says:

    "The limit is 64GB on 32-bit x86, but higher on x64 processors."

    Yep, the rule for x64 processors is that the full physical address width is available in both PAE and long mode, subject to OS limits.

    "32-bit Windows Server 2003 running on 64-bit processors supports 128GB."

    Only Datacenter Edition, though.

  162. Hector Santos says:

    The meminfo.zip tool creates a GPF on my XP box.

  163. nc says:

    @Hector Santos:

    From the meminfo page linked to in the article:

    "Please note that MemInfo requires Windows Vista or higher as well as full (elevated) administrative privileges."

  164. eviltech says:

    Just a little question… Is your procesor 8-core ?

  165. mike says:

    Is it possible to do that in windows 7 ?

    "Edit boot.ini and add the /PAE switch at the end of line in the section "operating systems".

    eg.

    [boot loader]

    timeout=3

    default=multi(0)disk(0)rdisk(0)partition(1)WINDOWS

    [operating systems]

    multi(0)disk(0)rdisk(0)partition(1)WINDOWS="Windows Server 2003, Enterprise – 6GB" /noexecute=optout /fastdetect /PAE

    multi(0)disk(0)rdisk(0)partition(1)WINDOWS="Windows Server 2003, Enterprise – 4GB" /noexecute=optout /fastdetect

  166. pl80 says:

    Although PAE should be safe on Windows Server, some chance of the server crashing still exists.  

    Do AWE carry the same risk?  

    I really would like to implement AWE for our SQL server machine, but this is a production box – cannot take chances.  Our OS is: Win 2003 Standard 32-bit.

  167. Taras says:

    I found that on computers with integrated Graphic adapter – there is 2.74 GB usable and on computers with PCIe Graphic adapter – there is 3.2 GB GB usable. How this memory is allocated? I thought it should be in the beginning of memory, but in Device manager – the range dedicated to Graphic adapter is not in the beginning it is d0000000-dfffffff = 3489660928-3758096383 = 3328-3583.

    Please explain me what is the difference between integrated Graphic adapter and PCIe graphic adapter memory allocation. Windows nevertheless cannot use more than 4 GB.

  168. tcsenter says:

    Taras, the reservation will be hardware/configuration/BIOS dependent.  IOW, different hardware configurations and different BIOS programming decisions on different chipsets will yield different amounts of total useable memory.  e.g. there are motherboards with Intel integrated graphics that can effectively address up to 3.5GB RAM, such as my Dell Latitude D630 with Intel GMA X3100 graphics.

  169. tam says:

    I've got another way to use almost 100% physical memory.  Take any version of acrobat reader, including X, print an 87 page pdf with a lot of pictures.  While reader is 'flattening', watch the physical memory graph in procexp climb to the top, and your computer fall to the bottom.

  170. Sagar says:

    good post and i appreciate your work.. you are really possessive about it i suppose.. but what about linux..cant it puch itself to limits as win 7.. well iam a windows fanboy..

  171. Leon Schmetz says:

    I have a nice new laptop that had 2GB memory installed and Windows 7 32 bit reported 1.86 GB usable.

    So you might conclude that the system overhead on address space was 2.14 GB.

    When I upgraded the system (added 2GB), Windows 7 reported 2.92 GB usable.

    Again one might conclude that the system overhead is 1.08 GB.

    With all that has been explained here, I cannot explain this. Maybe one of you can.

    Thanks,

    Leon