Large initial Non-Paged Pool Memory is reserved after operating system boot-up

Applies to: Windows Server 2008 FoundationWindows Server 2008 StandardWindows Server 2008 Standard without Hyper-V


This article describes a difference in the values for Non-Paged pool memory when viewing/monitoring it with perfmon/task manager against Rammap/debugger.

More Information

It is important to understand that the values are correct in both. It is the interpretation and usage of terms that may confuse Users.

Since Windows Server 2008, the Windows operating system will reserve memory during system boot. 3% of the total memory is used for the initial Non-Pagable memory. This memory allocation cannot be verified from task manager or performance monitor counter. The tools like RAMMAP, Xperf or Memory dump file can be used to verify the information. Under RAMMAP, this area will be shown as Non-paged pool area.
Note that the Non-paged pool area seen under RAMMAP is not the same as the non-paged pool usage observed from task manager.

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, this memory will always be resident on the RAM. The PFN database itself shows up as pool in the data that the memory manager returns to RAMMAP, so it’s not just purely non-poaged pool, but other non-pageable memory manager structures as well. 

This becomes the main reason that we see a significantly high number for Non-Paged memory in Rammap.

Task manager and perfmon shows the actually consumed non-paged pool memory. For troubleshooting virtual memory consumption, the perfmon tool should be used for correct information.

For examples

Under kernel dump file:

kd> x nt!mmsizeofnonpagedpoolinbytes
fffff800`01ac61c0 nt!MmSizeOfNonPagedPoolInBytes = 0x00000003`d6fe3000

kd> ?0x00000003`d6fe3000
Evaluate expression: 16491884544 = 00000003`d6fe3000
From above example, the value 16491884544 = 00000003`d6fe3000 represents that the machine has 512 Gigabytes memory and the initial non-paged pool size is 16 Gigabytes around. (3% * 512GB) 

Under Rammap vs. Task Manager

Note: The use of tools mentioned in this article totally depends on what you need to know. If you want to know the state of the RAM in respect to the page states then RAMMAP is the best tool to use.