如果我有大量RAM,应该禁用交换文件还是应该将其移至虚拟RAM驱动器?


97

想象一下,我有大量的RAM。假设是64GB。甚至对于游戏PC来说,这也很多。现在,Windows中页面文件的默认位置在主OS驱动器上,无论是HDD还是SSD,它们通常都更快,但仍不如RAM快。

某件事告诉我,禁用硬盘驱动器上的页面文件或创建虚拟RAM驱动器并将页面文件保留在其中可能会使Windows将其所有虚拟内存移至RAM,从而提高系统的性能,但是我对此并不了解区域,因此可能根本不正确。

我都尝试过,但是我无法用我对记忆事物的知识水平来分析结果以得出明确的结论。

这行得通吗?如果没有,为什么?


57
将分页文件放在RAM磁盘上永远无法完成任何工作。您将占用一定数量的可用内存并添加一定数量的虚拟内存。零和 只是没有分页文件。
usr

14
在某些情况下,在Linux上实际压缩托管交换文件的ram磁盘的情况下,可以这样做。请参阅:en.wikipedia.org/wiki/Zram。但是我不认为Windows具有可用的功能。
Matt H

2
答案是肯定的,但是有很多非信徒。
Mehrdad 2014年

14
@ user367257创建一个ram磁盘来存储您的页面文件,就像借给您的朋友10英镑,以便他有足够的钱让您从他那里借10英镑。从技术上讲,这可能是可行的,但您已完成的一切只是不必要地使无途旅行复杂化。
罗伯·摩尔

2
我只会(也确实会)为SSD关闭它,因为只有6GB的空间(即使现在很多),所以写入次数很多(即使现在很多)。它运作良好。
Ry-

Answers:


134

无论您有多少RAM,都希望系统能够有效地使用它。根本没有分页文件会导致操作系统无法有效使用RAM,这有两个原因。首先,即使很长一段时间都没有访问或修改页面,也无法使页面可丢弃,这迫使磁盘缓存变小。其次,它必须保留物理RAM来支持极不可能需要的分配(例如,私有的,可修改的文件映射),导致您可以拥有大量可用的物理RAM,但是却拒绝分配避免过度使用。

例如,请考虑程序是否对4GB文件进行可写的私有内存映射。操作系统必须为此映射保留4GB的RAM,因为该程序可以想像地修改每个字节,并且除了RAM之外没有其他地方可以存储它。因此,立即就浪费了4GB的RAM(它可用于缓存干净的磁盘页面,仅此而已)。

如果要最大程度地利用RAM,即使从未使用过,也需要一个页面文件。它充当一种保险政策,使操作系统可以实际使用其拥有的RAM,而不必将其保留给极不可能的可能性。

设计操作系统行为的人不是傻子。使用分页文件可以为操作系统提供更多选择,并且不会造成不良后果。

试图将分页文件放入RAM没有任何意义。而且,如果您有大量RAM,则不太可能使用分页文件(只需将其放在其中),因此它在设备上运行的速度并不特别重要。


9
我在反对那票选票。但是最后一句话:我运行2台不带交换功能的机器。如果您确切知道机器的使用方式,那将是非常好的。
spudone

6
我怀疑ramdrive中的页面文件是作为一种“狂热的变通方法”开始的,因为某些软件如果检测到没有页面文件,就会拒绝启动。(有人告诉我Adobe的图形/视频工具可以这样做。)
Dan Neely 2014年

8
@DavidSchwartz您提供的信息在技术上是正确的,并且是很好的信息。但是得出的结论是,无论您拥有多少RAM,都应该始终拥有一个页面文件,这一结论是不正确的,我支持我的主张,即不应将此作为可接受的答案。
杰森·惠勒

5
我只是不喜欢听到“页面文件很神奇,所以请不要关闭它们,否则您会后悔的”,当我知道在许多常见情况下可以关闭它们,并安全地看到性能有所提高时,因为MMS想要做某事时,不再将磁盘I / O增加100%或更高。我想从这场辩论的另一边的人那里听到的是:“是的,在某些情况下,您可以关闭它们并减少可能导致崩溃的磁盘I / O”。我并不是说页面文件总是很糟糕,也许您可​​以说它们并不总是必需的。
弗雷德·汉密尔顿

5
我意识到令这一切烦恼的是,一方面似乎是在说“页面文件只会做得好”,而另一方面却是“页面文件太糟糕了”,然后人们在另一侧变得根深蒂固。“真相”是,在某些情况下它们非常有用,甚至可以防止崩溃,而在其他情况下则不需要它们,并且实际上可能导致性能降低。无论如何,我对此感到很高兴。大卫·施瓦兹(David Schwartz),长寿和繁荣。
弗雷德·汉密尔顿

32

您的假设完全正确。

内存管理算法非常复杂,无论如何都不是完美的。因此,即使有足够的备用RAM,也会发生交换。在某些系统上,例如Linux,您可以控制swappiness,在其他系统上则无法控制。通过在仍然有大量RAM时交换数据,系统以自己的方式为可能会用完RAM的情况做好了准备。

因此,禁用交换功能可能会改善性能,因为您将仅使用速度更快的RAM。

要考虑的一件事(您已经提到过)–您需要有足够的 RAM来容纳正在执行的所有程序,否则就有冒用内存不足的风险。在这种情况下,性能将下降,某些进程可能会被操作系统终止,并且系统可能会崩溃/死机。(在此了解更多信息)

在某些计算机上,尤其是那些将交换文件保留在HDD而不是SSD上的计算机上,禁用交换的效果非常明显。在其他方面则不是那么明显。但是,即使您没有得到明显的改进,也可以通过另一种方式来考虑它,即通过禁用交换,您可以节省SSD上的磁盘空间。

通过禁用交换,还可以防止内存算法执行不必要的操作-将数据从RAM移到交换,反之亦然-如果使用SSD,这可以防止过度磨损。无论如何,这将通过消除不必要的操作来提高性能。

另外,请阅读:


2
@ChrisH您也可能无法将sql数据库加载到文字处理器中,因为这些数据库完全在RAM中运行:-)
TylerH 2014年

9
这个答案是不正确的,并且包含很多错误信息。但是,了解错误原因的简单方法是:设计操作系统的内存行为的人可能是世界上最聪明的人。他们为什么要设计一个系统,使其给予更多选择权(只有并且认为只有在认为最佳的情况下才进行交换的选择权),才会使性能变差?只有白痴才会设计这样的系统。
David Schwartz

17
@DavidSchwartz,我不知道开发内存管理算法的人如何聪明,对原始主题没有任何影响。OP询问了禁用交换是否可以提高性能,我已经解释说它可以在某些情况下并在其他情况下导致问题。回答您为什么(?)的问题-我可以说,因为算法不是完美的,用户需要对其进行微调。这就是为什么在Linux中有一个swappiness参数,这就是为什么完全禁用交换的原因。
Art Gertner 2014年

11
@smc OP的用例没有什么异常。操作系统没有针对沼泽标准用例进行适当调整的说法完全是胡说八道。(有关我为什么不想这样做的更多信息,请参见我的答案。)
David Schwartz 2014年

4
给定算法将始终为用户做出理想决定的假设是完全错误的。他们根据程序员认为重要的一组参数进行决策。这很可能与用户需要发生的事情直接相悖。
Anaksunaman 2014年

14

您可以安全地禁用页面文件吗?

如果用完包括虚拟内存在内的可用内存,系统将无法继续保证确定性执行,并自行终止。在此之前,操作系统将执行其他各种操作,例如杀死使用过多内存的程序。我想说的是,内存始终是有限的,每个操作系统都可以处理。因此将可用内存总量限制为64 GB不会损害Windows-许多系统即使使用页面文件也不能超过8 GB,因为具有1或2 GB RAM的页面文件通常比6或7 GB小得多。应该注意的是,只要您有过多的未使用RAM,就无法测量OS维护页面文件的开销。

将页面文件放在ramdisk上有意义吗?

为了增加可用内存,大多数(如果不是全部)高级操作系统都使用某种交换文件,它们在RAM中获取一些内存,并且一段时间以来没有对其进行访问,请将内存写入硬盘(swapfile或pagefile),然后从RAM中删除内存,以便可以使用更快的内存。swapfile用于将内存的最大大小扩展到超过可用RAM的大小。

因此,使用ramdisk(通过ramdisk的大小减少可用内存)来承载交换文件(通过swapfile的大小增加可用内存)是可行的,但这没有多大意义。它不会提供比禁用页面文件更多的内存,但是仍然需要系统运行页面算法。


但是,如果页面文件位于虚拟RAM驱动器上,则将减少从RAM复制几兆字节到虚拟硬盘驱动器或从中复制回来的时间。而且,如果页面文件被完全禁用,那么根本就不会浪费时间。这个对吗?
user1306322 2014年

2
正确。从RAM复制字节到ramdisk上的页面文件是最快的页面文件。但是完全不进行复制更明智。
彼得

2
交换文件在那里可以弥补RAM的不足。如果有足够的RAM,则无需补偿。但是,您的操作系统仍将使用交换文件,因此在这种情况下,将其关闭的速度更快。

6
@Mast简直是太过简单了。交换文件也可以有效使用RAM。
大卫·史瓦兹

1
@DavidSchwartz也许,但这就是对我最好的解释。在大多数情况下,少量交换文件总是有益于无交换文件的。但是,我没有资源来进行备份。

8

重申其他人的观点,将交换移动到直RAM磁盘上是毫无意义的(在最常见的情况下,请参见下文)。它实现了在某些时候,当系统因缺乏可用内存而挨饿时,某些数据以相当低效的方式从RAM移到RAM。

在HDD / SSD上进行交换可以使OS清除一些完全未使用的RAM页面,并将释放的空间用于文件高速缓存或其他系统缓冲区。您可能没有意识到系统分配的这些RAM缓冲区较少,因为没有页面文件就没有可用的虚拟内存。因此实际上,您可能会通过禁用交换功能来降低性能。

但是,将压缩RAM磁盘作为交换驱动器(“ ZSWAP”驱动器)在边缘情况下(可能需要几个额外的MB RAM以避免交换到HDD)可能会有所帮助,因为它可以提高一部分RAM到磁盘的空间效率。在一定程度上。


1
+1代表提及ZSWAP。它通常在某些移动平台中使用,并在OS X 10.9中使用(除了交换之外)。
James_pic 2014年

请注意,“压缩RAM磁盘作为交换驱动器”仍然存在以下问题:它不能对除实际页面文件之外的所有“分页文件”执行任何操作。
Jamie Hanrahan '18

5

如果没有页面文件,则在发生BSOD(崩溃)的情况下,Windows将无法写入崩溃转储文件。这意味着您将无法使用适当的工具来分析问题。

将页面文件放在RAM中几乎是无用的,因为它可能会在崩溃中丢失。

有关更多信息,请参阅Microsoft文章了解故障转储文件


4

对于Windows,从马口说起:

有人认为没有分页文件会带来更好的性能,但总的来说,拥有分页文件意味着Windows可以在修改后的列表中写入页面(这些页面代表未被主动访问但尚未保存到磁盘的页面)。分页文件,从而使该内存可用于更多有用的目的(进程或文件缓存)。因此,尽管有些工作负载在没有分页文件的情况下表现更好,但总的来说,只有一个工作负载才意味着系统可以使用更多的可用内存*(不要介意,如果没有分页文件大小,Windows将无法编写内核崩溃转储大到足以容纳它们)。

https://blogs.technet.microsoft.com/markrussinovich/2008/11/17/pushing-the-limits-of-windows-virtual-memory/

  • 可用内存-因此,尽管建议使用虚拟内存,但也建议您确实需要大量RAM,以确保没有页面文件/虚拟内存而受益。我有没有页面文件的4GB RAM 128GB SSD,但是我将其用于Web浏览和键入word文档。

2
从我个人的经验教训中,以及我向所有新员工传授的知识:只有两个规则。#1:永远不要相信微软。#2 ..您没有听从规则1,所以没有规则
Nick

3

不要禁用交换文件 这不仅用于内存不足。 关闭它并没有直接的性能提升,Windows仅在需要时从它读取数据,它一直在写入数据,因此在需要时可以随时进行准备。

如果您有超过4GB的存储空间,则可以将其减少到大约2 / 3rds的内存大小,因为它存储了压缩的内存映像。如果您没有SSD上的空间,则可以将其放在其他硬盘无法访问的速度较慢的硬盘上。但是在某个地方放置一个是有益的。

有关原因的更多信息,请参见此答案。https://superuser.com/a/286476/4236


3

从理论上讲,将页面文件放入RAM根本没有任何意义,因为您只是在消耗您应该获得的收益,而Windows是在假设页面文件不会用于此类目的的前提下构建的。

但是实际上,有缺陷的设计和理念甚至可以使其融入Windows内核,并且Microsoft的内存管理不一定是完美的。许多人发现,只要您有足够的内存,将页面文件放入Ramdisk确实可以提高性能

我编写了一篇文章,显示了来自单个论坛线程的此类用户的集合,这些用户发现尽管有大量的可用RAM,但仍在使用页面文件:

http://www.overclock.net/t/1193401/why-it-is-bad-to-store-the-page-file-on-a-ram-disk/290#post_23508589


感谢您编译此列表。它应该有助于提出一些证据,证明在这一问题上理论和实践有所不同。Virtual memory − A paging file is an area on the hard disk that Windows uses as if it were RAM.是的,好像是:p
user1306322

这个结论是有缺陷的。尽管操作系统显然具有“大量的可用RAM”,但它仍将内容写入页面文件的事实并不能证明“设计和哲学存在缺陷”。这意味着您没有足够的信息来正确评估操作系统的决策。仅对于初学者而言,请考虑存在许多已修改页面的情况。它们被写入页面文件并移至备用列表-现在它们是“可用”的一部分。你明白了吗?RAM可用,因为其内容已写入页面文件!
杰米·汉拉汉

@JamieHanrahan:这并不能解释为什么人们很少遇到问题,尽管很少使用过多的RAM。该线程中的注释包括:“我从未真正使用过一半以上”,“页面文件使用率约为2.7GB,其中RAM使用率是16GB中的3.23GB。”,“在使用Illustrator时,性能有了显着提高我创建了页面文件并将其移至RAMDisk”。
Dan W

这些评论大多数是由于信息不充分所致。通过将不经常访问的内容保留在RAM中,不可能解决性能问题。页面文件不是分页中涉及的唯一文件;还有数百种其他方法,因此做只影响页面文件(并使GB的RAM离开系统的其余部分,从而提高页面故障率)的事情不太可能具有任何“戏剧性”效果。当进行适当控制的测试时,通常不会保留此类报告。您可以找到轶事来支持几乎所有的信仰。我觉得他们没有说服力。
Jamie Hanrahan '18

特别是,“正在使用页面文件”这一声明要求证明。页面文件中仅包含GB的内容并不能证明该页面文件的使用方式使其处于关键的性能路径。要对此进行评估,请单独隔离分区上的页面文件-或至少隔离一个未在其他任何东西上有效使用的页面文件-然后可以在该“逻辑磁盘”上使用PerfMon来监视其IO速率。如果页面文件不经常被读取,那么写入多少无关紧要!
杰米·汉拉汉

2

转换原本设计为不使用交换的操作系统要困难得多。

现代Mac具有恢复分区-主驱动器的一部分,带有可修复或还原主系统的精简OS。在他们执行自定义过程的DVD安装程序时代,系统现在为交换分区创建RAMdisk,因为不能保证安装程序有可用的磁盘空间。该操作系统包括运行所需维护软件所需的框架,该框架与安装后可用的实用程序相同。每个人的工作量大大减少。

一次将系统限制为一个应用程序意味着ramdisk-swap基本上不会被使用,但是OS希望它在那里。


2

如果您有足够的内存,答案是肯定的,您可以关闭交换。创建交换是为了克服RAM的限制并提高其使用效率。

现在的问题是多少RAM足够RAM?对此没有统一的答案,自然地,系统对内存的需求很大。因此,除非您在非常特定且受控的环境中运行,否则请不要关闭交换。

任何其他种类的特技,例如将交换放在RAM上,都只会增加一层复杂性,并浪费本可以直接使用的内存。


2

我的系统具有24GB的RAM,因此,我禁用了页面文件以防止SSD磨损而没有任何问题。我最近创建了一个RAM磁盘,使用4GB的内存来存储Google Chrome缓存文件,以查看它是否会提高在线Flash Player游戏和一般网络冲浪的性能。从这个实验中我可以看到性能显着提高。由于我的RAM磁盘上有更多可用空间,因此我启用了页面文件,并将最小和最大大小都设置为1GB,然后将其移至RAM磁盘。尽管我不能说有任何性能提升,但是我的系统似乎运行得更加稳定。


仅将页面文件放在SSD上会更好。Windows不必使用它。将页面文件放在RAMdisk上是荒谬的。是的,该“文件”的页面错误将比实际磁盘上的错误得到更快的解决,但是首先通过将RAM分配给RAMdisk可以增加页面错误的数量。这就像从自己那里借钱,收取自己的利息,然后丢掉“利息”。甚至没有错。
Jamie Hanrahan 2015年

1

将页面文件移动到RAM是一个荒谬的想法,只需关闭它并增加RAM。:)

No matter how much RAM you have, you want the system to be able to use it efficiently. Having no paging file at all forces the operating system to use RAM inefficiently for two reasons. First, it can't make pages discardable, even if they haven't been either accessed or modified in a very long time, which forces the disk cache to be smaller. Second, it has to reserve physical RAM to back allocations that are very unlikely to ever require it (for example, a private, modifiable file mapping), leading to a case where you can have plenty of free physical RAM and yet allocations are refused to avoid overcommitting.

Consider, for example, if a program makes a writable, private memory mapping of a 4GB file. The OS has to reserve 4GB of RAM for this mapping, because the program could conceivably modify every byte and there's no place but RAM to store it. So immediately, 4GB of RAM is basically wasted (it can be used to cache clean disk pages, but that's about it).

内存管理由CPU处理,并且页面文件是打开还是关闭不会对页面的处理产生任何影响。对Windows透明。

页面优先级不会改变,页面将被相同地丢弃。CPU将页面文件用作辅助存储,而不是操作系统。一级(RAM)耗尽时,它不过是二级缓存。

一个快速且非常肮脏的示例:我的机器具有16GB的RAM,没有页面文件。5分钟前,我有13GB的待机空间和2GB的空闲空间,因此我加载了Fallout4。低优先级页面在加载Fallout时被丢弃。

顺便说一句,2008 Technet博客上的“推动Windows内存限制”非常令人误解-我要说的是欺骗。 https://i.stack.imgur.com/wXkmi.png 我也怀疑马克是否写过它,但我希望不会,因为这会改变我对他的看法.....

在这篇文章中有很多漏洞,我很沮丧,没有人考虑到该博客被推荐的频率

  • 该页面文件及其位置是由Windows处理的,内存访问到已调出到磁盘的位置的陷阱将由CPU捕获,但会交给操作系统从磁盘检索页面并将其加载。

无论如何,这里是一个不太模糊的描述:

Windows无法达到比CPU更高的地址-这是不可能的。

不管OS的功能如何,它仍然受运行的硬件的限制..因为OS实际上是CPU本身(内部寄存器)。

好的,因此页面文件是HDD上的一个区域,当CPU不能在物理上或体系结构上使用更多的RAM时,它将用于扩展物理地址空间。

例如,在分段x86 32位体系结构上,有两个2GB的RAM段。

一个分配给内核。其余2GB用于用户模式。这就是CPU可以通过32个DRAM引脚使用的全部RAM,但是32位进程具有4GB的可用空间,因此该怎么办。幸运的是,CPU可以使用二级存储(也称为硬盘)来存储额外的2GB页面。因为它具有内部寄存器
,所以进程引用的虚拟页的物理位置不必存储在RAM中。但是它们确实已由CPU存储在某个位置。

CPU不能为应用程序提供所有4GB的RAM,但是可以通过将HDD用作辅助缓存提供4GB的地址(这就是HDD的全部内容)

通过内部的页面调度机制将页面移入和移出RAM,但这与页面文件不同。分页总是发生...。

底线确实没有那么复杂。在过去的15年左右的时间里,许多最终用户给人留下了印象,即页面文件是操作系统的一部分,而事实并非如此。从来没有。这种误解部分是由英特尔和微软等公司助长的。

RAM是一种快速存储设备,硬盘是一种较慢的存储设备,因此本质上说RAM是1级缓存,硬盘是2级(在这种情况下,不考虑CPU缓存)。两者都可以由CPU访问。

如果CPU没有足够的RAM来存储所需的页面,则可以将HDD用作溢出。如果有足够的RAM,则PF是多余的。

在Core 2之前,Intel处理器具有32pin DRAM总线和32个寄存器,这意味着CPU可以访问4GB RAM和4GB HDD空间(页面文件)。这是体系结构硬件限制,而不是Windows限制。

由于页表占用512MB,因此可用于进程的总数为3.5GB。这就是为什么在具有Intel CPU的Windows中显示3.5GB(直到Core 2为止)的原因。添加GPU,可用的甚至更少。

Xeon可以访问总共32GB的RAM,包括HDD在内的64GB的物理空间(再次为pagefile)。(此^涵盖了PAE,更多内容请添加链接)。

在此处输入图片说明 http://www.windowsdevcenter.com/pub/a/windows/2004/04/27/pagefile.html

在此处输入图片说明

在此处输入图片说明

第三个屏幕截图来源: 系统V应用程序二进制接口AMD64体系结构处理器补充草案0.99.7版

我打算继续改进此答案,并添加源材料和相关信息。我想在信息不足和技术信息过多之间取得平衡。欢迎提出建议。请不要仅仅因为它可能写得不好而拒绝投票。


评论不作进一步讨论;此对话已转移至聊天
DavidPostill
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.