针对特定工作负载调整 Windows 虚拟内存/分页

针对特定工作负载调整 Windows 虚拟内存/分页

我运行了一个特定的占用大量内存的程序,每次运行后都会使整个系统的速度降低数小时 - Windows NT 6.0 / 6.1 内核是否有任何可调参数来鼓励进程的工作集更快地分页回内存?

该程序将一个 1.5GB 的文件读入一个 1.5GB 的 malloc 缓冲区,进行一分钟的处理,然后退出。

在运行时,所有其他程序都会按预期调出到磁盘。当程序结束时,程序不会再调回。即使我等了几个小时,它们也不会调回来。这意味着当我出现并尝试使用我的电脑时,它会非常慢,而且在我使用它时,它会慢慢地将每个进程调回。

进程退出后,任务管理器中显示的“Cached”内存数量非常大,而“Free”内存数量非常低。每个正在运行的进程仅使用 1 或 2 MB 的“Working set”,而“Commit size”数量正常,表明其大多数页面都在磁盘上。

在我看来,Windows 正在使用 RAM 作为磁盘缓存来保存我的 1.5GB 大文件,以防我想重新读取它(但我不想),而不是取回我的正常进程。有没有办法强制这种平衡转向进程,远离磁盘缓存?

答案1

节目结束后,节目不会再调回。即使我等了几个小时,它们也不会调回来。

Windows 不会将内存重新调入其他进程,除非这些页面被其他进程实际使用。据我所知,没有任何参数会导致页面重新调入,除非这些页面被实际引用。

如果确实这样做,它会经常浪费时间和内存,将您最终不会使用的内容分页。假设您有五个进程大部分被分页了。它应该恢复哪一个?猜猜看?全部恢复一点?还是等到您开始使用其中一个进程时,再为该进程提供尽可能多的内存?

对我来说,这似乎是 Windows 正在使用 RAM 作为磁盘缓存来保存我的 1.5GB 大文件,以防我想重新读取它(但我不想),而不是取回我的正常进程。

Windows(尤其是较新的版本)确实会大量使用多余的 RAM 来缓存“热”文件,但这绝不会以牺牲需要 RAM 的程序为代价。这些页面很快就会被牺牲给需要内存的其他进程。这样做速度很快,因为磁盘缓存页面不需要被分页到页面文件中。它们只是被重新映射到需要它的进程的地址空间中。

(并且我真诚地怀疑一个 1.5GB 的文件一旦打开就会成为“热”文件状态。)

这意味着当我出现并尝试使用我的计算机时,它会非常慢很长时间,而当我使用它时,它会慢慢地将每个进程调回来。

在我看来,一切都运行正常,但您可能需要添加更多 RAM 或升级到更快的驱动器。

如果您仍然认为有些不对劲,请发布更具体的信息,例如您使用的 Windows 版本、机器有多少 RAM 等等。

答案2

您可以传递提示,CreateFile建议 Windows 不要缓存该文件。这将首先阻止它调出其他进程。

相关内容