DisablePagingExecutiveregistry更改是否有任何实际效果?

在过去的许多机器上,跨越不同版本的Windows(2000,XP,没有Vista),我已经启用了DisablePagingExecutive来尝试和提高性能。 在每种情况下,我都有足够的记忆力,特别是在目前的情况下。 但是,启用这个registry调整和重新启动后,我已经检查任务pipe理器一段时间后,我仍然显示内核分页到磁盘的大块,即使我有2GB的物理内存空闲。

有没有人使用过这个调整成功? 自从? 当我检查任务pipe理器(性能选项卡 – >“内核内存”部分)时,也许我正在查看错误的指示器,但是我想阻止Windows将所有可以分配给磁盘的内容都分页,尤其是考虑到提供的内存量台式机这些天。 这似乎是一个“不要页面到磁盘,除非有极端的内存压力”选项应该存在 – 是否有一个?

互联网上有关于这个function的巨大的混乱。 该设置仅影响称为执行程序的内核的一部分,然后仅影响可分页的部分。 内核的其他部分完全不受此设置的影响。

内核分页与其他分页的方式相同。 经常访问的代码和数据将被保存在RAM中,而其余部分将保留在磁盘上 – 它所属的位置。 系统不会从RAM中删除内核的任何部分,除非它find了更好的使用方法。 微软已经对寻呼系统进行了大量的研究和testing。

在内核的情况下,“非分页”是指在任何情况下都不能被分页的代码和数据。 “Paged”表示可以在必要时分页的代码和数据。 从任务pipe理器无法分辨出实际分页的数量。 一部分被分页出来的代码从来没有从磁盘读取,因为它不是必需的。 并不是所有的内核都经常被访问。 您不应该期望分页和非分页数字受到相关设置的影响。

注意:当代码被分页时,它通常不会被复制到页面文件中。 这是没有必要的,因为它可以简单地从原始文件重新加载。 这适用于大多数代码,而不仅仅是kerenl。

有了合理数量的RAM,这个设置基本上什么都不做。 它只是防止系统分页出不想分页的数据。

我不知道你是否意识到这一点,但页面错误是Windows用来加载可执行代码的机制。 所以,例如,一个DLL被映射到虚拟内存,然后页面错误被用来根据需要从磁盘上进行实际的加载。 页面文件不涉及这个。

所以很多你认为的“分页到磁盘”可能是首先在磁盘上的东西。

DisablePagingExecutive调整不会停止分页,它的目的是防止“执行”(即内核本身)被分页,从而导致整个系统放缓,而不仅仅是个别分页的应用程序。

您可以尝试通过删除系统属性(或在HKLM \ SYSTEM \ CurrentControlSet \ Control \ Session Manager \ Memory Management \ PagingFiles)中的所有页面文件完全禁用分页。 这适用于我,但是当物理内存不足时,事情变得相当不愉快,而且必须有一个页面文件来debuggingSTOP错误。

系统级组件(如内核,执行程序和设备驱动程序)可以从两个池中分配内存。 这些是页面缓冲池,可以在内存pipe理员的判断下分页,非页面缓冲池必须一直保留在RAM中。 开发者根据自己的需要决定使用哪个池。 build议尽可能使用分页池,因为这样可以使系统内存pipe理器具有最大的灵活性。 这两个池的大小都是有限的,在32位系统中,这些限制可能会造成问题。 分页池相当大。 如果非分页池过度使用,可能会达到大小限制,这将导致一些严重的系统问题。

在任务pipe理器中标记为“分页”和“非分页”内核内存的项目显示这些池的分配。 它与实际被调出多less内存的dynamic状态完全没有关系。 “DisablePagingExceutive”registry项会影响页面缓冲池的一部分的dynamic分页状态,所以它的效果将永远不会被询问pipe理器显示。

只需添加一个此设置的附加用途: xperf堆栈行走所需的。

http://blogs.msdn.com/b/pigscanfly/archive/2009/08/06/stack-walking-in-xperf.aspx

禁用分页执行

为了使跟踪在64位Windows上工作,您需要设置DisablePagingExecutiveregistry项。 这告诉操作系统不要将内核模式驱动程序和系统代码分页到磁盘,这是使用xperf获取64位调用栈的先决条件,因为64位堆栈行走取决于可执行映像中的元数据,在某些情况下xperf堆栈行走代码不允许触摸分页出页面。

关于设置的另一条信息。 这个报价可以通过互联网find,我不知道它的主要来源。

DisablePagingExecutive只适用于ntoskrnl.exe。 它不适用于win32k.sys(远远大于ntoskrnl.exe!),其他驱动程序的可分页部分,页面缓冲池以及文件系统caching。 所有这些都在内核地址空间中,并被分页到磁盘。 在低内存系统上,这可能会迫使应用程序代码被不必要地分页并降低性能。 如果你有足够的内存来处理你的工作负载,是的,这不会有什么坏处,但是如果你的工作量足够大的话,系统不会分配太多东西。 此设置在debugging驱动程序时非常有用,通常build议仅在运行有限的众所周知的应用程序的服务器上使用

因此,人们可以得出结论:除了使用xperf之外,它的好处是模糊的:从本质上讲,它限制了一些“几乎随机”的东西,从寻呼和进一步思考 – 因此导致更多的东西被更频繁地换出。