NTFS 压缩如何影响性能?

bwD*_*aco 69 compression performance ntfs ssd hard-drive

我听说 NTFS 压缩会由于额外的 CPU 使用而降低性能,但我读过报告说它实际上可能会因为减少磁盘读取而提高性能。NTFS 压缩究竟如何影响系统性能?

笔记:

  • 我正在运行带有 5400 RPM 硬盘驱动器的笔记本电脑,我在它上面做的许多事情都是 I/O 绑定的。
  • 处理器是 AMD Phenom II,具有四个运行频率为 2.0 GHz 的内核。
  • 系统会定期使用UltraDefrag 进行碎片整理。
  • 工作负载是读写混合的,读取比写入更频繁。
  • 要压缩的文件包括选定的个人文档子集(不是完整的主文件夹)和程序,包括几个(要求不高的)游戏和 Visual Studio(往往受 I/O 限制)。

Bre*_*ugh 43

我听说 NTFS 压缩会由于额外的 CPU 使用而降低性能,但我读过报告说它实际上可能会因为减少磁盘读取而提高性能。

正确的。假设你的CPU,使用某种压缩算法,可以压缩C MB/s,解压D MB/s,你的硬盘写速度W,读速度R。只要C > W,当你得到性能提升时写作,只要 D > R,你就会在阅读时获得性能提升。在写入情况下这是一个极端的假设,因为 Lempel-Ziv 的算法(在软件中实现)具有不确定的压缩率(尽管它可以受到有限字典大小的约束)。

NTFS 压缩究竟如何影响系统性能?

嗯,正是依靠上述不等式。只要您的 CPU 能够维持高于 HDD 写入速度的压缩/解压缩率,您就会体验到速度提升。但是,这确实对大文件有影响,这些文件可能会出现大量碎片(由于算法),或者根本没有被压缩

这可能是因为 Lempel-Ziv 算法随着压缩的进行而变慢(因为字典继续增长,随着位的进入需要更多的比较)。在 Lempel-Ziv 算法中,解压缩几乎总是相同的速率,无论文件大小如何(因为字典只能使用基址 + 偏移方案寻址)。

压缩还会影响文件在磁盘上的布局。默认情况下,单个“压缩单元”是集群大小的 16 倍(因此大多数 4 kB 集群 NTFS 文件系统将需要 64 kB 块来存储文件),但不会增加超过 64 kB。但是,这可能会影响磁盘上的碎片和空间要求。

最后要注意的是,延迟是另一个有趣的讨论价值。虽然压缩数据所需的实际时间确实会引入延迟,但当 CPU 时钟速度为千兆赫兹时(即每个时钟周期小于 1 ns),与硬盘驱动器寻道率(在毫秒级,或数百万个时钟周期)。


要实际查看您是否会获得速度提升,您可以尝试一些方法。第一个是使用基于 Lempel-Ziv 的压缩/解压缩算法对您的系统进行基准测试。如果您获得了良好的结果(即 C > W 和 D > R),那么您应该尝试在您的磁盘上启用压缩。

从那里,您可能希望对实际硬盘驱动器性能进行更多基准测试。一个真正重要的基准(在您的情况下)是查看您的游戏加载速度,以及您的 Visual Studio 项目编译速度。

TL、DR:对于使用许多需要高吞吐量和低延迟的小文件的文件系统,压缩可能是可行的。由于性能和延迟问题,大文件(并且应该)不受影响。

  • 您可以链接任何基于 Lempel-Ziv 的良好压缩/解压缩算法基准吗? (3认同)
  • 那么SSD呢? (2认同)
  • 对于那些抽象“C > W 和 D > R”,我会欣赏一些实际的典型例子吗?例如,在带有 HDD 的 4 核笔记本电脑上压缩“程序文件”和/或“Windows”是否有益?和SSD?电池消耗会受到显着影响吗? (2认同)

小智 8

我在维基百科的 NTFS 条目中对此进行了解释:


NTFS 可以使用 LZNT1 算法(LZ77 [23] 的变体)压缩文件。文件以 16 簇块压缩。对于 4 kB 集群,文件被压缩为 64 kB 块。如果压缩将 64 kB 的数据减少到 60 kB 或更少,NTFS 会将不需要的 4 kB 页面视为空的稀疏文件簇——它们不会被写入。这允许不合理的随机访问时间。然而,大的可压缩文件变得高度碎片化,因为然后每 64 kB 块变成一个更小的碎片。[24][25] 由于性能下降,Microsoft 不建议对超过 30 MB 的文件进行压缩。[需要引用]

压缩的最佳用途是用于重复、很少写入、通常按顺序访问且本身未压缩的文件。日志文件是一个理想的例子。压缩小于 4 kB 或已经压缩的文件(如 .zip 或 .jpg 或 .avi)可能会使它们变大和变慢。 [需要引用] 用户应避免压缩 .exe 和 .dll 等可执行文件(它们可能是在 4 kB 页内分页进出)。压缩启动时使用的系统文件(如驱动程序、NTLDR、winload.exe 或 BOOTMGR)可能会阻止系统正确启动。 [26]

尽管对压缩文件的读写访问通常但并不总是 [27] 透明,但 Microsoft 建议避免对服务器系统和/或保存漫游配置文件的网络共享进行压缩,因为它会给处理器带来相当大的负载。 [28]

硬盘空间有限的单用户系统可以受益于小文件的 NTFS 压缩,从 4 kB 到 64 kB 或更多,具体取决于可压缩性。小于 900 字节左右的文件与 MFT 中的目录条目一起存储。 [29]

计算机中最慢的链接不是 CPU 而是硬盘驱动器的速度,因此 NTFS 压缩允许在空间和(通常)速度方面更好地利用有限、缓慢的存储空间。 [30] (这假设压缩文件片段是连续存储的。)


我建议仅对压缩到 64KB 或更少(即 1 个)的文件进行压缩。否则,您的文件将由许多 64K 或更少的分数组成。

MyDefrag 在碎片整理方面做得更好。


har*_*ymc 7

您的磁盘速度很慢,所以您的问题确实有价值。NTFS 压缩是处理器密集型的,并且针对速度而不是压缩效率进行了调整。

我希望您会看到读取操作的(非常)小的改进。但是,当访问驻留在系统缓存中的文件时,性能会受到影响,因为每次访问时都必须再次解压缩。

您当然会看到由于额外的压缩,写入操作会变慢。

在同一个 NTFS 磁盘上复制文件需要解压缩和压缩,因此这些将受到最大的影响。

NTFS 压缩还可以显着增加碎片,但这对于在“典型”工作负载下的大多数“典型”计算机来说不是问题。

许多类型的文件,例如 JPEG 图像或视频或 .zip 文件,基本上是不可压缩的,因此这些文件使用起来会较慢,而且不会节省任何空间。

小于一个磁盘簇(通常为 4K)的文件不会被压缩,因为没有增益。但是,有时在压缩整个卷时建议使用更小的簇大小。

对于相对静态的卷或文件,建议使用 NTFS 压缩。从不推荐用于系统文件或用户文件夹。

但由于硬件配置因计算机型号而异,具体取决于磁盘、总线、RAM 和 CPU,因此只有通过测试才能说明压缩对您的计算机型号的确切影响。