You experience performance issues in applications and services in various versions of Windows XP, Windows Vista, Windows Server 2003, Windows Server 2008, and Windows Server 2008 R2. Additionally, you notice the following symptoms:
Available memory is almost exhausted.
The system file cache consumes most of the physical RAM.
There is a continuous and high volume of cached read requests to the hard disk.
Memory management in Microsoft Windows operating systems uses a demand-based algorithm. If any process requests and uses a large amount of memory, the size of the working set (the number of memory pages in the physical RAM) of the process increases. If these requests are continuous and unchecked, the working set of the process will grow to consume all the physical RAM. In this situation, the working sets for all the other processes are paged out to the hard disk. This behavior decreases the performance of applications and services because the memory pages are continuously written to the hard disk and read from the hard disk.
This behavior also applies to the working set of the system file cache. If there is a continuous and high volume of cached read requests from any process or from any driver, the working set size of the system file cache will grow to meet this demand. The system file cache consumes the physical RAM. Therefore, sufficient amounts of physical RAM are not available for other processes.
On 32-bit versions of Microsoft Windows operating systems earlier than Windows Vista, the working sets of the system file cache have a theoretical memory limit of less than 1 gigabyte (GB). The limitation of the virtual address range prevents the working sets of the system file cache from exhausting the physical RAM.
On 32-bit versions of Windows Vista operating systems, kernel resources are allocated dynamically. The working set of the system file cache increases to consume the virtual address range of the kernel mode at the expense of other kernel resources. The limitation of this memory range is less than 2 GB. If the computer has more than 2 GB of physical RAM, the cache cannot exhaust all the physical RAM. However, the cache can exhaust the virtual address space in the kernel. This can cause allocation failures for other kernel components.
On 64-bit versions of Windows operating systems, the size of the virtual address range is typically larger than the physical RAM. In this situation, the working set for the system file cache can increase to consume most of the physical RAM.
To work around this issue, use the GetSystemFileCacheSize API function and the SetSystemFileCacheSize API function to set the maximum or minimum size value for the working sets of the system file cache. The use of these functions is the only supported method to restrict the consumption of physical memory by the system file cache.
The Microsoft Windows Dynamic Cache Service is a sample service that demonstrates one strategy to use these APIs to minimize the effects of this issue.
Installing and using the Microsoft Dynamic Cache Service does not cause the exclusion of support for Microsoft Windows. This service and its source code are provided as an example of how to use the Microsoft supported APIs to reduce the growth of the file system cache.
You can obtain the service and source code from the following Microsoft website:
Microsoft has confirmed that this is a problem in the Microsoft products that are listed in the "Applies to" section.
The memory management algorithms in Windows 7 and Windows Server 2008 R2 operating systems were updated to address many file caching problems that were found in earlier versions of Windows. There are only certain unique situations in which you have to implement this service on computers that are running Windows 7 or Windows Server 2008 R2.
How to determine whether your system is affected
To determine whether your system is affected by this issue, install the SysInternals RamMap tool. You can obtain the tool from the following Windows Sysinternals website:
When you run the tool, select the Use Counts option. This displays several columns that show the current pattern of memory usage. Click the Active column to sort by the number of bytes used, and note the top usage directly under the total.
If the top use count is “Metafile,” and if a large part of available memory is being used, you are experiencing the System File Cache issue that is described in the "Symptoms" section. You can verify this by using Performance Monitor to monitor the Memory\System Cache Resident Bytes counter and see the cache grow continuously over time.
Figure 1. Example RamMap output in which the computer is experiencing the issue.
Figure 2. Example RamMap output in which the computer is not experiencing the issue.
If the Memory\System Cache Resident Bytes counter in Performance Monitor shows an upward trend over time, the computer is experiencing the issue, as shown in Figure 3.
Figure 3. Example Performance Monitor output in which the computer experiences the issue over time.
You do not have to restart the computer when you install, uninstall, or use this service.
Microsoft Windows XP Professional x64 Edition, Windows Vista Home Basic, Windows Vista Home Premium, Windows Vista Business, Windows Vista Enterprise, Windows Vista Ultimate, Windows Vista Home Basic 64-bit Edition, Windows Vista Home Premium 64-bit Edition, Windows Vista Enterprise 64-bit Edition, Windows Vista Ultimate 64-bit Edition, Microsoft Windows Server 2003 R2 Datacenter x64 Edition, Microsoft Windows Server 2003 R2 Enterprise x64 Edition, Microsoft Windows Server 2003 R2 Standard x64 Edition, Microsoft Windows Server 2003, Datacenter x64 Edition, Microsoft Windows Server 2003, Enterprise x64 Edition, Microsoft Windows Server 2003, Standard x64 Edition, Microsoft Windows Server 2003, Datacenter Edition for Itanium-Based Systems, Microsoft Windows Server 2003, Enterprise Edition for Itanium-based Systems, Windows Server 2008 Datacenter without Hyper-V, Windows Server 2008 Enterprise without Hyper-V, Windows Server 2008 Standard without Hyper-V, Windows Server 2008 Datacenter, Windows Server 2008 Enterprise, Windows Server 2008 Standard, Windows Server 2008 for Itanium-Based Systems, Windows Server 2008 R2 Datacenter, Windows Server 2008 R2 Enterprise, Windows Server 2008 R2 Service Pack 1, Windows Server 2008 R2 Standard