交换文件碎片:事实还是虚构?

这是关于Windows,但我相信它也适用于其他操作系统。

我听说有人说,如果你想要更好的性能,你应该避免交换文件碎片。 为此,您可以手动为交换文件指定一个常量大小,甚至可以将其移动到专用分区/磁盘。

这真的会给任何性能好处吗? 毕竟,交换文件是以随机方式访问的,什么是更多的随机化? 如果你正在为交换文件考虑一个单独的磁盘,那么将你的钱投入到更多的RAM中会好得多。 除非你碰巧得到一个免费的磁盘当然。

所以 – 是否有一个交换文件碎片的战斗呢?

页面文件碎片只会是极端情况下的一个重要因素。 当大文件串行读取时,碎片是一个因素,但是页面文件几乎不会发生这种情况。 页面文件访问是在不超过64K的小块,这通常会混合访问其他文件。 如果页面文件被分割或者不被分割,那么磁盘头就会在任何情况下移动。

除非页面文件性能是一个限制因素,否则这些都不重要。 而且通常不是。 大多数分页根本不使用页面文件。 通过devise,页面文件用于存储不经常访问的数据。 在大多数情况下,页面文件不能经常访问,因为它的性能很重要。

在大多数情况下,这只是没有什么adu。 错误地解决问题的尝试可以而且往往会造成严重的问题。

这在Linux系统中当然不是问题,在这个系统中,交换总是一个具有交换文件特殊文件系统的分区。 这显然是Windows上的一个可能的问题,我认为这也是Mac OS X上的一个可能的问题,因为它似乎使用交换文件。

TBH,我没有任何硬性的事实来支持我的观点,但是,我有一些轶事证据表明,最好让交换不要改变大小,因为交换大小的变化似乎真的让Windows下降。 你需要交换的磁盘的大小总是比当前被认为是一个平均磁盘的磁盘小,因此,旧磁盘通常会大到足以交换。 所以,当你升级到最新的1TB磁盘时,它可能是一个较旧的磁盘的好用。

当我运行Windows机器时,我总是创build一个交换分区或使用一个单独的磁盘,然后告诉Windows只使用该磁盘进行交换,并将其设置为不更改大小。 我将它设置为使用2.5倍的内存量作为最小和最大值,并将其留在那里。 我无法确定它是否确实有帮助,但它肯定没有任何负面影响。

总之: 是的

交换文件碎片是一个真正的问题,它更可能发生在您的硬盘驱动器上的可用空间更less,还有其他文件可能会发生像registry数据库文件。 微软对于让Windows控制交换文件大小的build议非常明确,而且手动操作被认为是不好的,只能在极less数情况下完成。 这个问题有一个从systeminternals简单的解决scheme称为pagedefrag它的免费下载,可以在系统重新启动时整理locking的文件(包括您的分页文件)。 它也会显示你在这些文件上的当前状态。

另外请注意,文件碎片只是旋转硬盘驱动器时遇到的一个问题,我的理解是,如果一个文件在SSD上碎片化,这不是一个性能问题(SSD上的碎片只会使其更短)。 实际的性能在很大程度上取决于其碎片和系统硬件的严重程度(在硬盘上寻找时间以及系统多长时间点击一次页面文件),但考虑到消除这个问题是多么容易,这应该不是问题。

链接:页面文件上的MSDN 标记谈论虚拟内存 (Pagefile)

在这里,你的高清将需要被严重分割为任何真正可观察到的性能损失,但是这个理论仍然是正确的。 理由是你把你的交换文件放在最快的磁盘上(出于显而易见的原因),并把它们全部放在一个连续的物理位置,这样寻找时间就不会太多。 对于服务器或发烧友工作站来说,这非常合理。 对于具有单个磁盘/单个分区设置的典型办公室个人电脑,您没有“最快的磁盘”选项,并且随着磁头在实际文件和交换文件之间移动,您将始终有寻找时间,所以它更像是一个神话在那里。

你必须区分内部和外部碎片:

执行交换时(这意味着将整个进程放到磁盘上)会发生外部碎片,因为每个进程的大小不同。 既然Linux和Windows都不能真的换换,而是做分页(把一个固定大小的内存框架放到磁盘上),那么就不存在外部碎片的问题。

进行分页时会发生内部碎片,因为每一帧的大小都是相等的,但是并不是每一页都是满的,有些页面并没有用到它的极限(=内部碎片)。 使用分页时,此问题将始终存在。

但是我认为你的意思是在文件系统(文件系统的块没有被完全使用)中存在内部碎片的情况,这个碎片包含着页面帧。 这可以通过select文件系统上的块大小等于页面大小来避免。

我知道,将交换文件放置在单独的物理磁盘上可以提高性能,因为在交换时,您可能也会从数据磁盘上执行IO操作,从而降低两个操作的性能。 所以这是最好的select。

至于“免费磁盘”,你认为我们如何处理办公室周围的所有8GB硬盘? ;)否则是的,无论如何,RAM是便宜的(用于台式机),并且是最好的select。

不,除非不涉及时间,金钱或努力,否则交换文件碎片是没有意义的。

我想出了一些冗长的类比,但决定放弃你 – 除非我改变主意:)

我相信交换文件碎片,虽然它是真实的,它发生,它并没有在实际生活中的碎片整理工具公司会让你相信的差异。

我经常告诉windows在不同的驱动器上创build交换文件,这只是碎片整理,(所以一个新的文件将被创build),我不能告诉我注意到在日常操作中的任何区别。

对于那些表示“用户将只需要”closures一些应用程序的响应者:Bzzzzzt! 错误的答案在任何情况下。

如果一台机器具有“足够”的内存,运行速度就会快上百万,而不pipe是交换文件碎片化,单片化,分离化还是漂白,都会造成内存不足。

在一个可以处理交换文件的碎片整理程序上花费的任何钱花费在内存上更好。 当您将一台机器从256MB的RAM升级到2GB时,交换文件变得无关紧要!

如果您允许交换文件更改大小,交换文件碎片只会真正发生。 将其设置为固定大小将随着文件的增长和收缩而停止出现碎片。

但是,我build议交换文件不再有用。 如果没有交换文件提供的“额外内存”,并且让用户接受他们需要closures某些应用程序,则最好不要这样做。 当应用程序必须从交换中加载时,您将不再获得10-30秒的暂停,并将另一个应用程序内存写入交换。