使用NTFS压缩的文件是否已解压缩到磁盘或内存中?


15

NTFS解压缩如何在Windows中运行?据微软称,NTFS解压缩是通过扩展文件然后使用它来完成的。这听起来是正确的,但我的问题是这个过程在技术上是如何发生的。

Windows是否将压缩文件加载到内存中,在内存中展开,并从内存中读取?或者它是否将压缩文件加载到内存中,将其扩展到磁盘或内存中,写入磁盘,然后读取?

我试图弄清楚是否可以通过使用NTFS压缩来提高计算机的性能。这样,无法处理那么多写操作的慢速磁盘驱动器或SSD总是会有更少的数据写入和读取,而我大部分时间空闲的强大处理器可以解压缩文件,提高我的存储速度和健康状况。


1
我编辑了您的问题,以更多地关注文件是否已解压缩到内存或磁盘。这样,作为另一个问题的副本,它将被关闭的可能性大大降低,而这个问题更多地涉及其他方面。
Ben N

Answers:


19

Windows将文件解压缩到内存中。在磁盘上执行操作会完全消除任何速度改进,并会导致大量不必要的磁盘写入。请参阅这篇有关NTFS稀疏文件和压缩的Microsoft博客文章的结尾:

  1. NTFS确定正在访问哪个压缩单元。
  2. 读取压缩单元的整个分配范围。
  3. 如果单元未压缩,则跳到步骤5.否则,NTFS将尝试保留(但不分配)将解压缩的CU写回磁盘所需的空间。如果磁盘上存在足够的可用空间,则应用程序在读取期间可能会获得ERROR_DISK_FULL。
  4. CU将在内存中解压缩。
  5. 解压缩的字节范围将映射到缓存并返回给请求的应用程序。
  6. ...

当然,如果内存不足,解压缩过程使用的内存可能导致其他内存被分页并写入页面文件中的磁盘。幸运的是,只有包含程序实际读取的部分的块才会被解压缩; 如果你只需要几个字节,NTFS就不必解压缩整个东西。

如果您的SSD速度很快,那么您可能无法从NTFS压缩中获得速度提升。可以想象,处理器花费解压缩数据的时间加上磁盘读取压缩数据所花费的时间可能会超过SSD读取未压缩数据所花费的时间。它还取决于您使用的文件的大小。可压缩文件的最小大小范围为8 KB到64 KB,具体取决于您的群集大小。任何小于该大小的文件都不会被压缩,但会添加少量的簿记。

如果您对压缩文件进行大量写入操作,由于使用了压缩算法(LZ),您可能会看到很多速度差异。

进一步阅读:NTFS压缩如何影响性能?


1
> 如果内存不足,可以将解压缩的数据分页并在页面文件中写入磁盘 [需要引证] - 智能算法只会丢弃解压缩的数据并在下次访问时再次执行解压缩, (de)压缩的假设比分页快几个数量级。实际上,页面缓存已经发生了这种情况 - 我希望Windows只是将这些解压缩的数据放入同一个缓存中。(在Windows中,所有文件r / w都会通过页面缓存,即使它是直写的。)
Bob

实际上,这可能就是它的作用。我已经调整了那部分答案,谢谢。
Ben N

“解压缩的字节范围将映射到缓存 ”你知道缓存的定义在这里吗?只是好奇。-----“否则,NTFS将尝试保留将解压缩的CU写回磁盘所需的空间。” 我们知道确切原因吗?Microsoft在此假设对文件的修改不会增加会导致总压缩大小超过原始未压缩大小的大小吗?看起来像一个糟糕的假设。
导致UnderflowsEverywhere

总结一下,我们正在研究:从磁盘读取, - >读取MFT以检查是否有足够的空间来写入解压缩, - >在内存中解压缩, - >将其放入请求应用程序的缓存中?我们在谈论应用程序的私有字节吗?只是好奇。----------这是我们在这看的吗?
导致UnderflowsEverywhere

1
@CausingUnderflowsEverywhere该缓存是IO缓存,这使得多次读取不会都需要由磁盘提供服务。NTFS确实希望新数据适合现有的CU,但它确实确保有空间,如果没有。我的理解是IO缓存并不是特定于一个应用程序,尽管数据将在程序的私有内存中被调用。
Ben N
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.