四年的误解

2006年7月31日

大约在 2002 年左右,我开始用 NT 系统。我对于 NT 系统并不熟悉,并且习惯了在 Windows 9x 中搞“优化”,因此刚开始的时候就找了些软件和资料。

在这些软件和资料中,说到过两个与磁盘缓存相关的注册表键值。一个是 LargeSystemCache。另一个是 IoPageLockLimit。前者比较好理解:一般在内存较空的情况下,NT 4 总是给应用程序预留 32MB 的内存空间,这样即使应用程序分配大量内存,也不会引起换页。而 LargeSystemCache 则把这个 32MB 大小的预留空间变成了 4MB。后者不太好理解。我当时也没有完全理解。它的字面意思是:输入/输出锁定(物理)内存上限。

然后,我根据某些文章里面说的去调了。调整 IoPageLockLimit 的规则是:最小不低于 512KB,最大不超过物理内存的 1/8。我看了某些文章,这个值的单位是 KB。然后我填进去 4096,意为 4MB。

四年过去了,前几天我突然发现:有人说 IoPageLockLimit really is gone in XP! 为什么呢?原来,IoPageLockLimit 这个参数现在再也不起作用了,Windows 将自动管理它。这是从什么时候开始的呢?从 Windows 2000 SP1 就开始啦!当然,在 NT 4 里面还是有用的。但是,千万注意,根据 MSDN 官方文档,它的单位是 字节,不是 千字节!

IoPageLockLimit 的实际意思是:当进行连续的输入/输出时,最高达到这个指定量的物理内存能被锁定,并作为输入输出的缓冲区(buffer)。注意缓冲区的概念:它和缓存(cache)是不同的。缓存的意思是:我把数据藏起来,等到要用了你过来拿就是了。缓冲区的意思是:你已经要数据了,那么我先把它临时放在这儿,过后你马上拿走。

Windows 的缓存机制中,磁盘缓存的页是可以被换出的。因此,不一定所有的磁盘缓存页都在物理内存中。某些可能在交换文件中,某些可能被映射到磁盘上的 EXE 或 DLL(只读的页)。因此,有时候在扩大磁盘缓存的时候会引起换页。不过据我观察(用性能监视器),一般情况下这种换页并不十分频繁。

“四年的误解” 已有 2 条评论

  1. Jin 在

    无意中看到您的space,加我msn吧。

  2. Robbie Mosaic 在

    Hello,

    let me also add yours, haha!

留下您的评论