配置 NTFS 文件系统以提高性能

Ric*_* Ev 10 performance ntfs performance-tuning

我们有一个应用程序计划存储大约 1.1TB 的 XML 文件,平均大小为 8.5kb。

这些代表了 18 个月的滚动数据,每天创建大约 200,000 个新文件。

每个文件只会写入一次,然后有 3% 的机会在接下来的 18 个月内被读取少量 (<10) 次。

哪些 NTFS 选项对我们开放,有助于提高性能?

目前我们名单上的有:

编辑

关于碎片:我们计划使用 2k 集群大小来提高磁盘空间使用效率。每个文件将只写入一次(即没有文件编辑)。文件将在 18 个月后每天删除。

因此,我们认为碎片化不会是一个重大问题。

ale*_*rul 11

禁用上次访问时间戳并为 MFT 保留空间。


Mic*_*haw 7

我还要补充:

关闭磁盘碎片整理。将块大小更改为 16kb,以便将每个文件写入单个块。

这样做的合理性:

您希望每天在 200,000 个文件中写入 1.7GB 的数据。假设这些文件是一天 24 小时写入的,这意味着大约每秒 3 个文件。对于单个 SATA 磁盘来说,这似乎不是一个重大问题,所以我猜测您还有其他问题以及磁盘性能。

(即你有足够的内存吗?或者你是否也将内存分页到磁盘?)

然而

  1. 默认情况下,Windows NTFS 文件系统会尝试在后台对文件系统进行碎片整理。当您对磁盘进行碎片整理时,磁盘碎片整理会降低性能。由于性能似乎已经成为一个问题,这只会让您的情况变得更糟。

  2. 在写入大文件时使用小集群大小和 IO 性能之间存在平衡。文件和文件分配表不会在磁盘上的同一扇区上,因此在写入文件时必须分配块将导致磁盘磁头必须不断移动。使用能够将 95% 的文件存储在一个集群中的集群大小将提高您的 IO 写入性能。

  3. 正如其他人指出的那样,使用 2k 的小集群大小会随着时间的推移导致碎片化。可以这样想,在前 18 个月中,您将把文件写入干净的空磁盘,但是操作系统不知道一旦关闭,将不会向每个文件添加更多数据,因此它一直在保留一些块可用结束每个文件,以防该文件稍后扩展。在填满磁盘之前很久,您会发现唯一的可用空间是其他文件之间的间隙。不仅如此,当它为你的文件选择一个间隙时,操作系统不知道你是在写一个 5 块文件还是一个 2 块文件,所以它不能很好地选择保存文件的位置。

归根结底,工程就是处理相互冲突的需求,并为这些平衡需求选择成本最低的解决方案。我的猜测是,购买更大的硬盘驱动器可能比购买更快的硬盘驱动器便宜。

  • 啊,工程判断的乐趣。文件使用的每个块都需要从空闲空间中删除,并分配给文件。通过使用较小的块大小,您可以提高磁盘空间效率,减少部分使用的块中浪费的空间,但会随着发生的块分配量的增加而降低 I/O 效率。 (4认同)
  • 更重要的是,通过追求这样的空间效率,你会产生很多碎片。通过使用像 ptolemy 建议的更大的块大小,其中每个文件适合一个块,碎片应该是一个非常小的问题。 (2认同)