Serendipity is an odd thing. Shortly after I wrote my previous entry, I stumbled across a possible solution to the problem while I was reading comments on an unrelated blog post. I spent a little time this morning checking it out.
According to Microsoft Technet, the LargeSystemCache registry entry controls file caching behavior. This key, which is stored at HKEY_LOCAL_MACHINE/CurrentControlSet\Control\Session Manager\Memory Management
, “[s]pecifies whether the system maintains a standard size or a large size file system cache, and influences how often the system writes changed pages to disk.”
There are two possible values: 0 and 1. Here’s what the documentation has to say:
Value | Meaning |
---|---|
0 | Establishes a standard size file-system cache of approximately 8 MB. The system allows changed pages to remain in physical memory until the number of available pages drops to approximately 1,000. This setting is recommended for servers running applications that do their own memory caching, such as Microsoft SQL Server, and for applications that perform best with ample memory, such as Internet Information Services (IIS). |
1 | Establishes a large system cache working set that can expand to physical memory, minus 4 MB, if needed. The system allows changed pages to remain in physical memory until the number of available pages drops to approximately 250. This setting is recommended for most computers running Windows Server 2003 on large networks. |
LargSystemCache
works in concert with the Size
value specified in HKLM\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters
. The documentation goes on to say:
Option setting | Large System Cache value | Size value |
---|---|---|
Minimize memory used | 0 | 1 |
Balance | 0 | 2 |
Maximize data throughput for file sharing | 1 | 3 |
Maximize data throughput for network applications | 0 | 3 |
That sounds promising. The registry settings on my Windows Server 2008 system were set for file sharing, with a LargeSystemCache
value of 1
.
Unfortunately, changing the settings had no visible effect on the machine’s behavior when reading large files from the server. I changed LargeSystemCache
to 0, set Size
to 1
, and restarted the computer. When it came back up, I verified the registry settings and then started copying a 60 GB file from the server to my workstation.
I opened Internet Explorer on the server and began surfing the Web. As expected, memory usage increased on the server as the file copy progressed. What wasn’t expected, though, was that when memory filled, Internet Explorer become unresponsive, as did other programs. This is the same behavior I saw when LargeSystemCache
was set to 1
.
I tried all of the documented values for Size
, rebooting the machine after each try, and found no difference in caching behavior.
It’s possible that the LargeSystemCache
value is no longer used. After all, the linked TechNet article was written for Windows Server 2003. A blog entry from February 2008, WS2008: Upgrade Paths, Resource Limits & Registry Values, shows the value as “Not Used,” although what that means is unclear. In addition, the last comment on this thread indicates that the value is not used in Server 2008.
I have no way to test whether the registry entries work as advertised in Windows Server 2003. My testing indicates, though, that they have no effect in Windows Server 2008.