Чи файли, які використовують стиснення NTFS, декомпресуються на диск або в пам'ять?


15

Як працює декомпресія NTFS у Windows? На думку Microsoft, декомпресія NTFS проводиться шляхом розширення файлу та його використання. Це звучить правильно, але моє питання - як цей процес відбувається технічно.

Чи завантажує Windows стислий файл у пам'ять, розширює його в пам'яті та читає з пам'яті? Або завантажує стислий файл у пам'ять, розширює його на диск або в пам'ять, записує на диск і потім читає?

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


1
Я відредагував ваше запитання, щоб більше зосередитись на тому, чи файли декомпресуються на пам'ять чи диск. Таким чином, це буде набагато рідше закрити його як дублікат цього іншого питання , що більше стосується інших аспектів.
Бен N

Відповіді:


19

Windows декомпресує файли в пам'ять. Якщо зробити це на диску, це повністю знищить будь-які покращення швидкості і спричинить багато зайвого запису на диску. Дивіться кінець цієї статті блогу Microsoft про розріджені файли та стиснення NTFS :

  1. NTFS визначає, до якого блоку стиснення звертається.
  2. Зчитується весь виділений діапазон блоку стиснення.
  3. Якщо пристрій не стиснений, ми переходимо до кроку 5. Інакше NTFS намагатиметься зарезервувати (але не виділити) простір, необхідний для запису декомпресованого КУ назад на диск. Якщо на диску недостатньо вільного місця, програма може отримати ERROR_DISK_FULL під час читання.
  4. МС буде декомпресовано в пам'яті .
  5. Декомпресований діапазон байтів буде відображено в кеш-пам'ять і повернуто до запитуючої програми.
  6. ...

Звичайно, якщо у вас мало пам’яті, пам'ять, яка використовується в процесі декомпресії, може призвести до того, що інша пам’ять буде перезаписана і записана на диск у файл сторінки. На щастя, лише фрагменти, що містять розділи, які фактично читають ваші програми, будуть декомпресовані; NTFS не повинен розпаковувати все, якщо вам потрібно лише кілька байт.

Якщо ваш SSD швидкий, ви, швидше за все, не збираєтеся отримувати підвищення швидкості за рахунок стиснення NTFS. Цілком можливо, що час, який ваш процесор витрачає на декомпресію даних, плюс час, який ваш диск витрачає на читання стислих даних, може бути більшим, ніж час, який ваш SSD потребує для читання нестиснених даних. Це також залежить від розміру файлів, з якими ви працюєте. Мінімальний розмір стислимого файлу коливається від 8 Кб до 64 Кб, залежно від розміру кластеру. Будь-які файли меншого розміру взагалі не будуть стискатися, але додається невелика кількість бухгалтерій.

Якщо ви багато пишете в стиснуті файли, ви можете побачити велику дисперсію в швидкості завдяки використаному алгоритму стиснення (LZ).

Подальше читання: Як компресія NTFS впливає на продуктивність?


1
> якщо у вас мало пам’яті, декомпресовані дані можуть бути піддані підкачки і записані на диск у файл сторінки [потрібна цитата] - розумний алгоритм просто викине декомпресовані дані та повторно виконає декомпресію при наступному доступі, припущення, що (де) стиснення є на порядок швидшим, ніж пейджинговий. Насправді це вже відбувається з кешем сторінок - і я б очікував, що Windows просто помістить ці декомпресовані дані в той самий кеш. (У Windows усі файли / шрифти проходять через кеш сторінки, навіть коли він переписується.)
Боб

Дійсно, саме це і робиться. Я коригував цю частину відповіді, дякую.
Бен N

"Декомпресований діапазон байтів буде відображено в кеш " Ви знаєте, яке тут визначення кешу? Просто цікаво. ----- "Інакше NTFS намагатиметься зарезервувати простір, необхідний для запису декомпресованого CU назад на диск." Чи знаємо ми точну причину цього? Чи припускає тут Microsoft, що модифікація файлу не додасть розмір, що призведе до того, що загальний стислий розмір перевершить початковий нестиснений розмір? Схоже, приємне припущення.
Причиняючи підводні потоки скрізь

Отже, підсумовуючи, ми розглядаємо: Читати з диска, -> читати MFT, щоб перевірити, чи достатньо місця для запису на декомпресований, -> декомпресувати в пам'ять, -> кинути його в кеш програми запиту? ми говоримо про приватні байти програми? просто цікаво. ---------- Це те, на що ми дивимося тут?
ПричиняючиПотокиПовсюди

1
@CausingUnderflowsEverywhere Цей кеш - кеш IO , що робить його таким численним читанням не всім потрібно обслуговувати диск. NTFS сподівається, що нові дані впишуться в існуючі МС, але все ж переконайтеся, що місця для цього немає. Наскільки я розумію, кеш IO не є специфічним для однієї програми, хоча дані будуть потрапляти в приватну пам'ять програми, коли вона вимагається.
Ben N
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.