我可以通过有目的地在硬盘上分割应用程序数据来提高应用程序的性能吗?

我可以通过有目的地在硬盘上分割应用程序数据来提高应用程序的性能吗?

一些流行的应用程序和游戏包含很多在正常运行中不常用的文件,因此硬盘需要跳过很长的距离才能获得所需的下一个位。

我对文件碎片的理解是,文件分散在整个硬盘中,因此查找/读取时间增加。对这些文件进行碎片整理或整​​合是将硬盘性能提升到基本水平的常用方法。

但是,是否可以将不经常使用(或根本不使用)的部分移到远处,并按照应用程序大多数时间读取它们的顺序将最常用的部分放在彼此旁边,以提高其性能?

我理解这个问题可以通过硬盘来解决,因为硬盘对不同位置的访问时间更短,比如固态硬盘,但是它们是否仍然会受到影响?

与完美碎片整理状态相比,像这样移动应用程序数据以进一步减少磁盘时间是否实际有意义?

答案1

好的,我们来回答这个简单的问题。SSD 在随机读取方面表现尤其出色只要您正在读取一个完整的块,无论您是读取紧接在前面的块还是“磁盘的一半”的块,都没有关系。这没有实际区别。事实上,你甚至无法分辨。您的操作系统可能认为它将数据存储在 SSD 上的连续位置,但SSD 本身可能也会将它们映射到相反的两侧存储。因此,在 SSD 上,您几乎无需担心文件碎片整理。除了。我会回到这个问题。

好的,让我们回到普通机械磁盘。它们的顺序读取速度比随机读取速度快得多。快得多。

现在,如果我正在玩《半条命 3》,并且必须加载数据文件,那么如果这些数据文件经过碎片整理并存储在附近,我的计算机就会轻松得多。粗略地说(非常粗略地说),碎片整理会将随机读取转换为顺序读取。

您承认,将地图数据文件和字符数据文件进行碎片整理并放在一起显然比将地图数据文件和字符数据文件分散在整个磁盘上要快得多。

但是……你提出了一个相当奇怪的场景。例如,你建议《半条命 3》需要加载地图数据文件的一部分和角色数据文件的一部分。例如,它只需要地图数据文件的前 10% 和角色数据文件的中间 10%。

在这种情况下,存储数据的最佳方式是先存储地图数据的前 10%,然后立即存储中间 10% 的字符数据。由于您没有加载任何其他内容(在此人为示例中),因此其他内容在哪里并不重要。

是的。在这个特定情况下,如果数据是碎片化的,那会很有帮助。

现在,回到 SSD。事实证明,SSD 必须一次读取和写入一个页面。确切的页面大小取决于 SSD,但可能是2 KB、4 KB、8 KB、16 KB或其他大小。我的观点是,如果 SSD 页面大小为 16 KB,并且这是您可以加载的最小大小,那么您需要的 10% 的地图数据和 10% 的字符数据都在同一个块中,那么速度会更快。加载一个块比加载两个块更快。

所以。是的,在某些情况下,故意将数据分段可以加快访问速度。但很难想象为什么你会尝试针对这种情况进行优化。事实上,大多数时候,你希望加载整个文件,而不仅仅是前 10%。而且现代操作系统无论如何都会缓存文件,因此当你在《半条命 3》中从一个地图位置移动到另一个地图位置时,地图数据很可能已经在文件系统缓存中,你实际上不必从磁盘加载任何内容。

一个有趣的选择是 SSHD,即混合驱动器。这些(实际上)是机械驱动器与 SSD 缓存的组合。这与此有何关系?好吧,粗略地说,混合驱动器会将经常访问的内容移动到更快的存储区域,将数据从旋转磁盘移动到 SSD 部分。如果您始终加载地图数据的前 10% 和字符数据的中间 10%,并且从未加载任何其他内容,并且如果混合驱动器的算法良好,则这些数据最终会位于更快的 SSD 部分。那么,在某种程度上,这实现了您要做的事情。请注意,常规文件系统缓存可以完成相同的操作,只是效果可能更快,但仅持续到您重新启动为止。

TL;DNR:是的。但说真的,这几乎肯定是毫无价值的优化。

答案2

首先让我们来讨论一下碎片是如何发生的。

您将小文件写入硬盘。数据写入第一个可用的空闲位置。假设没有删除任何数据,只写入了数据。数据将显示如下:[##########-----------------]其中 # 表示已使用的簇,- 表示空闲簇。

现在,让我们假设在这些集群中的某个地方,你有一个正在被删除的文件。突然你的图表看起来如下:
[#####-####-----------------]

这种情况当然经常发生,因此图表在某些时候可能看起来像这样:
[##-##-#-##-#--##-#--#------]

根据文件系统(FAT32 写入第一个可用的空白空间,NTFS 在这方面要聪明得多,它会尽量保持文件不碎片化),在某些时候,大型文件无法存储在一个空白段中。然后该文件将分散到整个硬盘上,例如:该文件在
[##F##F#F##-#--##-#--#------] 哪里。F

NTFS 已经尝试将文件存储在靠近自身的位置,并尝试在可能的情况下防止碎片化。

但归根结底,即使您故意对文件进行碎片整理,也无济于事,即使这些文件不经常使用,它们也始终存在随时发生碎片的可能性。我想,如果可以将未使用的文件移动到磁盘末尾,那么对经常使用的文件进行碎片整理可能会更快(这实际上可能是 NTFS 已经做的),但除此之外,您的问题的答案很简单:不。故意对文件进行碎片整理不会有帮助。您甚至可以将碎片整理后的文件存储在驱动器末尾,它们仍然会进行碎片整理。

答案3

“碎片化”之“整理文件以提高效率”也许吧虽然我怀疑它是否有效。你的计划基于一些前提。

  1. 操作系统不缓存。而它通常会缓存。视窗是的。通常存储在 RAM 中的文件将以更快的速度运行。
  2. 你可以确定性地将文件放置在磁盘的某些部分。有一些工具可以使用碎片整理 API 来实现这一点 -jkdefrag/mydefrag 取得了令人印象深刻的成果。一阵子。这是一个方便的花招,可以让一个速度慢得无法使用的系统变得可用。
  3. 您的驱动器具有一定(少量)的内部内存来顺利处理此类事情。
  4. 您假设文件存储在静态位置,并且/或者保持这些文件排列以优化寻道时间的开销很低。似乎没有人这样做。

相关内容