这是关于 Windows 的,但我确信它也适用于其他操作系统。
我听人说如果你想要更好的性能,你应该避免交换文件碎片。为此,您可以手动指定交换文件的恒定大小,甚至将其移动到专用分区/磁盘。
这真的会给性能带来任何好处吗?毕竟 - 无论如何,交换文件都是以随机方式访问的,还有什么更随机的呢?而且,如果您正在考虑为交换文件使用单独的磁盘,那么最好将资金投入到更多的 RAM 中。当然,除非你碰巧得到一张空闲磁盘。
那么 - 是否有必要对抗交换文件碎片?
这是关于 Windows 的,但我确信它也适用于其他操作系统。
我听人说如果你想要更好的性能,你应该避免交换文件碎片。为此,您可以手动指定交换文件的恒定大小,甚至将其移动到专用分区/磁盘。
这真的会给性能带来任何好处吗?毕竟 - 无论如何,交换文件都是以随机方式访问的,还有什么更随机的呢?而且,如果您正在考虑为交换文件使用单独的磁盘,那么最好将资金投入到更多的 RAM 中。当然,除非你碰巧得到一张空闲磁盘。
那么 - 是否有必要对抗交换文件碎片?
页面文件碎片只会在极端情况下成为一个重要因素。当串行读取大文件时,碎片是一个因素,但页面文件几乎不会发生这种情况。页面文件访问在不超过 64K 的小块中,这通常与对其他文件的访问混合。页面文件是否碎片无关紧要,无论如何磁盘磁头都会四处移动。
除非页面文件性能是一个限制因素,否则这些都不重要。它通常不是。大多数分页根本不使用页面文件。按照设计,页面文件用于存储不经常访问的数据。在大多数情况下,页面文件的访问频率不足以使其性能变得重要。
在大多数情况下,这只是无稽之谈。错误地解决问题的尝试可能而且经常会导致严重的问题。
这在 Linux 系统上肯定不是问题,因为交换始终是一个带有用于交换文件的特殊文件系统的分区。这显然是 Windows 上的一个可能问题,我认为这也是 Mac OS X 上的一个可能问题,因为它似乎使用文件进行交换。
TBH,我没有任何确凿的事实来支持我的观点,但是,我有轶事证据表明最好让你的交换不改变大小,因为交换大小的变化似乎真的会在它发生时减慢窗口的速度。您想要进行交换的磁盘大小总是小于当前认为的平均磁盘大小,因此,旧磁盘通常足够大以进行交换。因此,当您升级到最新的 1TB 磁盘时,它可能对旧磁盘很有用。
当我运行 Windows 机器时,我总是要么创建一个交换分区,要么使用一个单独的磁盘,然后告诉 Windows 只使用该磁盘进行交换,并将其设置为不改变大小。我会将其设置为使用 2.5 倍的 RAM 量作为最小值和最大值,然后保持不变。我无法确定它是否真的有帮助,但它肯定没有任何负面影响。
简而言之:是的
交换文件碎片是一个真正的问题,硬盘驱动器上的可用空间越少,它就越有可能发生,还有其他文件可能会发生这种情况,例如注册表数据库文件。微软在他们的建议中非常明确地让 Windows 控制交换文件的大小,并且手动操作被认为是不好的,应该只在极少数情况下进行。这个问题有一个来自systeminternals的名为pagedefrag的简单解决方案,它是一个免费下载,可以在系统重新启动时对锁定的文件(包括您的页面文件)进行碎片整理。它还将向您显示这些文件的当前状态。
另请注意,文件碎片只是旋转硬盘驱动器上的一个问题,我的理解是,如果文件在 SSD 上碎片,它不是性能问题(SSD 上的碎片整理程序只会使其持续时间更短)。实际性能松动很大程度上取决于它的碎片化程度和您的系统硬件(硬盘驱动器上的寻道时间以及系统必须点击页面文件的频率),但考虑到消除这个问题有多容易,这应该不是问题.
链接:MSDN on pagefile Mark Talking about Virtual memory (Pagefile)
您的 HD 需要严重碎片化,因为这里有任何真正可观察到的性能损失,但理论仍然是合理的。基本原理是您将交换文件放在最快的磁盘上(出于显而易见的原因),并将其全部保存在连续的物理位置,这样寻道时间就不会发挥太大作用。对于服务器或发烧友工作站,这非常有意义;对于具有单个磁盘/单个分区设置的典型办公室 PC,您没有“最快的磁盘”选项,并且随着磁头在实际文件和交换文件之间移动,您将始终有寻道时间,所以它更像是一个那里的神话。
您必须区分内部和外部碎片:
进行交换时会发生外部碎片(这意味着将整个进程放在磁盘上),因为每个进程都有不同的大小。由于 Linux 和 Windows 都不再真正进行交换,而是进行分页(将固定大小的内存帧放在磁盘上),因此实际上不存在外部碎片问题。
在进行分页时会出现内部碎片,因为每个帧的大小是相等的,但不是每个页面都已满,有些页面没有使用到它的极限(=内部碎片)。这个问题在使用分页时会一直存在。
但是我认为您的意思是在保存页框的文件系统中发生内部碎片(文件系统的块未完全使用)。这可以通过选择文件系统上的块大小等于页框的大小来避免。
我知道将交换文件放在单独的物理磁盘上可以提高性能,因为当您交换时,您可能还会从数据磁盘执行 IO,从而降低这两个操作的性能。所以这是最好的选择。
至于“空闲磁盘”,您认为我们如何处理办公室周围所有那些旧的 8 GB 硬盘驱动器?;) 否则,无论如何,RAM 现在很便宜(对于台式机而言),并且是最好的选择。
不,与交换文件碎片作斗争是没有意义的,除非它不涉及时间、金钱或精力。
我想出了一些冗长的类比,但决定放过你——除非我改变主意:)
我相信交换文件碎片虽然是真实的并且会发生,但它在现实生活中的影响并没有碎片整理工具公司让你相信的那么大。
我经常告诉 Windows 在不同的驱动器上创建交换文件,该驱动器只是进行了碎片整理,(因此会创建一个新文件),我不知道我注意到日常操作有什么不同。
对于建议“用户只需要”关闭一些应用程序的响应者:Bzzzzzt!任何情况下的错误答案。
如果一台机器有“足够的”内存,那么它在打开“数百万”个窗口的情况下运行速度要比内存不足的机器运行得快得多,无论交换文件是碎片化的、整体的、脱咖啡因的还是漂白的。
花在可以处理交换文件的碎片整理程序上的钱最好花在 RAM 上。当您将机器从 256MB 的 RAM 升级到 2GB 时,交换文件变得多么无关紧要,真是令人惊讶!
如果您允许交换文件更改大小,则交换文件碎片只有真正发生的机会很大。将其设置为固定大小将停止随着文件的增长和缩小而随着时间的推移出现碎片......
但是,我建议交换文件不再有用。最好不要使用交换文件提供的“额外内存”,并让用户接受他们需要关闭某些应用程序。当应用程序必须从交换加载并写入另一个应用程序内存以交换时,您将不再获得 10-30 秒的暂停......