Файлы, использующие сжатие NTFS, распакованы на диск или в память?

14

Как декомпрессия NTFS работает в Windows? Согласно Microsoft, декомпрессия NTFS осуществляется путем расширения файла, а затем его использования. Это звучит правильно, но мой вопрос в том, как этот процесс происходит технически.

Загружает ли Windows сжатый файл в память, расширяет его в памяти и читает из памяти? Или он загружает сжатый файл в память, расширяет его на диск или в память, записывает на диск и затем читает?

Я пытаюсь выяснить, могу ли я улучшить производительность своего компьютера с помощью сжатия NTFS. Таким образом, медленный диск или твердотельный накопитель, который не может справиться с таким количеством операций записи, всегда будет иметь меньше данных для записи и чтения, а мой мощный процессор, который большую часть времени работает на холостом ходу, может распаковать файлы, что улучшит мою скорость хранения и работоспособность ,

CausingUnderflowsEverywhere
источник
1
Я отредактировал ваш вопрос, чтобы больше сосредоточиться на том, распаковываются ли файлы в память или на диск. Таким образом, гораздо реже будет закрыт как дубликат этого другого вопроса , который больше касается других аспектов.
Бен Н

Ответы:

19

Windows распаковывает файлы в память. Выполнение этого на диск полностью уничтожило бы любые улучшения скорости и вызвало бы много ненужной записи на диск. Смотрите в конце этой статьи в блоге Microsoft о разреженных файлах NTFS и сжатии :

  1. NTFS определяет, к какому модулю сжатия осуществляется доступ.
  2. Весь выделенный диапазон блока сжатия считывается.
  3. Если устройство не сжато, мы переходим к шагу 5. В противном случае NTFS попытается зарезервировать (но не выделить) пространство, необходимое для записи распакованного CU обратно на диск. Если на диске недостаточно свободного места, приложение может получить ERROR_DISK_FULL во время чтения.
  4. CU будет распакован в памяти .
  5. Распакованный диапазон байтов будет отображен в кэш и возвращен запрашивающему приложению.
  6. ...

Конечно, если у вас мало памяти, память, используемая процессом распаковки, может привести к тому, что другая память будет выгружена и записана на диск в файле подкачки. К счастью, только фрагменты, содержащие разделы, которые фактически читают ваши программы, будут распакованы; NTFS не должна распаковывать все, если вам нужно всего несколько байтов.

Если у вас быстрый SSD, вы, вероятно, не получите улучшения скорости от сжатия NTFS. Вполне возможно, что время, которое ваш процессор тратит на распаковку данных, плюс время, которое ваш диск тратит на чтение сжатых данных, может быть больше времени, которое ваш SSD тратит на чтение несжатых данных. Это также зависит от размера файлов, с которыми вы работаете. Минимальный размер сжимаемого файла варьируется от 8 КБ до 64 КБ, в зависимости от размера вашего кластера. Любые файлы меньше этого размера не будут сжаты вообще, но будет добавлено небольшое количество бухгалтерии.

Если вы много пишете в сжатые файлы, вы можете увидеть много различий в скорости из-за используемого алгоритма сжатия (LZ).

Дополнительная информация: Как сжатие NTFS влияет на производительность?

Бен Н
источник
1
> если у вас мало памяти, распакованные данные могут быть выгружены и записаны на диск в файле подкачки [требуется цитата] - умный алгоритм просто выбрасывает распакованные данные и снова выполняет распаковку при следующем доступе, с предположение о том, что (де) сжатие на несколько порядков быстрее, чем подкачка. Фактически, это уже то, что происходит с кешем страниц - и я ожидаю, что Windows просто поместит эти распакованные данные в тот же кеш. (В Windows весь файл r / w проходит через кеш страницы, даже если он проходит сквозную запись.)
Боб
Действительно, это, вероятно, то, что он делает. Я исправил эту часть ответа, спасибо.
Бен Н
«Распакованный диапазон байтов будет отображаться в кэш ». Знаете ли вы, что такое определение кеша здесь? Просто любопытно. ----- «В противном случае NTFS попытается зарезервировать место, необходимое для записи распакованного CU обратно на диск». Мы знаем точную причину этого? Предполагает ли здесь Microsoft, что изменение файла не добавит размер, который приведет к тому, что общий сжатый размер превысит исходный несжатый размер? Похоже на дурацкое предположение.
CausingUnderflowsEverywhere
Итак, в итоге мы смотрим на: чтение с диска, -> чтение MFT, чтобы проверить, достаточно ли места для записи распакованного, -> распаковка в памяти, -> выбросить его в кэш запрашивающего приложения? мы говорим о личных байтах приложения? просто любопытно. ---------- Это то, что мы смотрим здесь?
CausingUnderflowsEverywhere
1
@CausingUnderflowsEverywhere Этот кеш является кешем ввода-вывода , что делает его таким образом, чтобы не требовалось обслуживать диск все множественные чтения. NTFS действительно надеется, что новые данные будут вписываться в существующие CU, но он гарантирует, что есть место, если это не так. Насколько я понимаю, кэш-память ввода-вывода не относится только к одному приложению, хотя данные будут оставаться в частной памяти программы при ее вызове.
Бен Н