为什么 64 位 Windows 上的默认设置仍然意味着较大的页面文件?

为什么 64 位 Windows 上的默认设置仍然意味着较大的页面文件?

我的问题是基于这样的观察:自从 64 位 Windows 推出以来,我身边越来越多的人似乎陷入了与页面文件相关的系统锁定。例如,zeros(2e5)MATLAB 中的一些简单问题分配不只是 1600 kB 的零,而是 160 GB。由于 64 位地址空间,这个数量可以被寻址,但通常不是在 RAM 中。(我可以举出许多这样的例子,它们都归结为内存分配。)因此,Windows 诉诸于使用页面文件,并在磁盘上存储 160 GB 的零。只有在此之后(或强制关机),您的系统才会再次响应。

在 32 位 Windows 中,最多 4 GB 的地址空间很大程度上可以避免这个问题。

那么,为什么微软仍然默认配置大页面文件呢?根据我的观察,RAM 越大,默认大小就越大,除非你有一个非常大、非常快的驱动器(例如非常昂贵的 SSD),否则这实际上没有意义。出于这个原因,我倾向于在 64 位 Windows 安装中关闭页面文件。或者我不应该这样做?这样做或反对这样做的理由是什么?

答案1

Windows 不像 Linux 那样进行内存的延迟分配,可分配内存的数量取决于页面文件。

在 Linux 上,假设任何“稀疏”的内存分配都不会被充分利用,因此它允许程序不断过度分配内存,直到内存耗尽。如果程序实际上满足了其承诺的内存,但没有足够的 RAM 或交换来满足需求,那么它将开始终止进程​​。

Windows 则相反,它假设所有分配的内存最终都会被使用,因此所有预留内存都会被保留,直到满足物理内存 + 页面文件大小。如果程序能够分配内存,那么它就可以使用它。如果它无法分配内存,那么它已经达到了 RAM 和页面文件大小的限制。

通过禁用页面文件,分配未使用内存的程序(即,它假定一个页面文件)可能会导致您在仍有一些“可用”内存时用完内存。

如果您想利用 Windows 系统上的所有 RAM,那么您应该通过为系统提供页面文件让系统按预期运行。

答案2

页面文件为操作系统提供了两个主要好处,而这两个好处都不会受到 64 位操作系统的显著影响。

  1. 页面文件增加了提交限制。

当应用程序分配内存时,Windows 操作系统承诺或承诺为其提供足够的存储空间,即使在最坏的情况下也是如此。此存储可能是 RAM 或页面文件。提交限制定义为 RAM 大小加上页面文件大小减去少量开销。如果没有页面文件,提交限制将略小于 RAM 大小。内存管理器会跟踪分配的总内存,以确保永远不会超过提交限制。

如果没有页面文件,提交限制就是一个硬限制,在操作系统运行时无法增加。使用默认页面文件配置,提交限制不仅大得多,而且是一个软限制,可以在必要时通过扩展页面文件来增加。

在 Windows 中达到提交限制是一件坏事。大多数应用程序都不能很好地处理这种情况,操作系统本身通常也无法容忍这种情况。

  1. 页面文件优化了 RAM 的使用。

在任何给定时间,计算机都可能包含大量长时间未访问的数据,实际上可能在会话期间永远不会访问。内存管理器当然无法知道这些数据有多重要,因此必须将其保存在某个地方。

将所有这些很少使用的数据存储在高速 RAM 中是对这一宝贵资源的严重滥用。如果 RAM 没有这种负担,那么应用程序和缓存将有更多的可用资源。缓存在现代操作系统中非常重要,是良好性能的主要贡献者。

页面文件为内存管理器提供了一个卸载这些很少使用的数据并减轻 RAM 负担的地方。这样做确实会有一定的成本,但请记住,这是很少使用的数据,因此不应该造成严重影响。内存管理器有许多优化措施来最大限度地降低这一成本。

但不要将其视为成本,而应将其视为对性能的投资。正如明智地投资金钱是一件好事一样,内存管理器会花一点时间来使用页面文件,期望它以后会带来巨大的回报。它通常很有效。

这并不是什么新想法。它已经在 Windows 和 Linux 中使用了很多年,而且早在那之前就已在大型计算机系统中使用。这是一个经过数十年优化的经过实践检验的原则。

底线是,让 Windows 按照自己的意愿管理页面文件。设计者知道他们在做什么。不幸的是,微软在向用户传达这一点方面做得并不好,而且存在许多误解。你在互联网上读到的关于页面文件的大部分内容至少包含严重错误。

相关内容