Czy pliki korzystające z kompresji NTFS są dekompresowane na dysk lub do pamięci?

14

Jak działa dekompresja NTFS w systemie Windows? Według Microsoft dekompresja NTFS odbywa się poprzez rozszerzenie pliku, a następnie użycie go. Brzmi dobrze, ale moje pytanie brzmi, jak ten proces zachodzi technicznie.

Czy system Windows ładuje skompresowany plik do pamięci, rozszerza go do pamięci i czyta z pamięci? A może ładuje skompresowany plik do pamięci, rozwija go na dysk lub w pamięci, zapisuje na dysku, a następnie czyta?

Próbuję dowiedzieć się, czy być może uda mi się poprawić wydajność komputera za pomocą kompresji NTFS. W ten sposób wolny dysk lub dysk SSD, który nie jest w stanie poradzić sobie z tyloma operacjami zapisu, zawsze będzie mieć mniej danych do zapisywania i odczytywania, a mój potężny procesor, który przez większość czasu pracuje na biegu jałowym, może rozpakować pliki, poprawiając szybkość i kondycję pamięci .

CausingUnderflowsEverwhere
źródło
1
Zredagowałem twoje pytanie, aby bardziej skoncentrować się na tym, czy pliki są dekompresowane do pamięci lub na dysk. W ten sposób będzie mniej prawdopodobne, że zostanie zamknięty jako duplikat tego drugiego pytania , które dotyczy bardziej innych aspektów.
Ben N

Odpowiedzi:

19

Windows dekompresuje pliki do pamięci. Wykonanie tego na dysku całkowicie zniszczyłoby wszelkie ulepszenia prędkości i spowodowałoby wiele niepotrzebnego zapisu na dysku. Zobacz koniec tego artykułu na blogu Microsoft na temat rzadkich plików i kompresji NTFS :

  1. NTFS określa, która jednostka kompresji jest dostępna.
  2. Cały przydzielony zakres jednostki kompresji jest odczytywany.
  3. Jeśli jednostka nie zostanie skompresowana, przejdziemy do kroku 5. W przeciwnym razie NTFS będzie próbował zarezerwować (ale nie przydzielić) przestrzeń wymaganą do zapisania zdekompresowanej CU z powrotem na dysk. Jeśli na dysku nie ma wystarczającej ilości wolnego miejsca, aplikacja może otrzymać komunikat ERROR_DISK_FULL podczas odczytu.
  4. CU zostałby zdekompresowany w pamięci .
  5. Rozpakowany zakres bajtów zostałby zmapowany do pamięci podręcznej i zwrócony do żądającej aplikacji.
  6. ...

Oczywiście, jeśli masz mało pamięci, pamięć używana przez proces dekompresji może spowodować stronicowanie innej pamięci i zapisywanie jej na dysku w pliku stronicowania. Na szczęście tylko fragmenty zawierające sekcje, które faktycznie czytają twoje programy, zostaną zdekompresowane; NTFS nie musi dekompresować całego pliku, jeśli potrzebujesz tylko kilku bajtów.

Jeśli twój dysk SSD jest szybki, prawdopodobnie nie uzyskasz poprawy szybkości kompresji NTFS. Można sobie wyobrazić, że czas, jaki procesor spędza na dekompresji danych oraz czas, jaki dysk spędza na czytaniu skompresowanych danych, może być dłuższy niż czas, jaki zajmuje SSD na odczyt nieskompresowanych danych. Zależy to również od rozmiaru plików, z którymi pracujesz. Minimalny rozmiar kompresowalnego pliku wynosi od 8 KB do 64 KB, w zależności od rozmiaru klastra. Pliki mniejsze niż ten rozmiar nie będą w ogóle kompresowane, ale zostanie dodana niewielka ilość księgowości.

Jeśli dużo piszesz do skompresowanych plików, możesz zauważyć dużą zmienność prędkości ze względu na zastosowany algorytm kompresji (LZ).

Dalsza lektura: Jak kompresja NTFS wpływa na wydajność?

Ben N.
źródło
1
> jeśli masz mało pamięci, zdekompresowane dane mogą być stronicowane i zapisywane na dysku w pliku strony [potrzebne cytowanie] - inteligentny algorytm po prostu wyrzuci zdekompresowane dane i wykona dekompresję ponownie przy następnym dostępie, z założenie, że (de) kompresja jest o rząd wielkości szybsza niż stronicowanie. W rzeczywistości tak już dzieje się z pamięcią podręczną stron - i spodziewałbym się, że Windows po prostu umieści te zdekompresowane dane w tej samej pamięci podręcznej. (W systemie Windows wszystkie pliki do pobrania przechodzą przez pamięć podręczną strony, nawet gdy są zapisywane).
Bob
Rzeczywiście, prawdopodobnie tak właśnie działa. Dzięki, dostosowałem tę część odpowiedzi.
Ben N
„Zdekompresowany zakres bajtów zostałby zamapowany na pamięć podręczną ” Czy wiesz, jaka jest tutaj definicja pamięci podręcznej? Po prostu ciekawy. ----- „W przeciwnym razie NTFS próbowałby zarezerwować miejsce wymagane do zapisania zdekompresowanej jednostki CU z powrotem na dysk.” Czy znamy dokładny powód tego? Czy Microsoft zakłada tutaj, że modyfikacja pliku nie doda rozmiaru, który spowoduje, że całkowity rozmiar skompresowany przekroczy oryginalny rozmiar nieskompresowany? Wydaje się to kiepskim założeniem.
CausingUnderflowsEverwhere
Podsumowując, patrzymy na: Odczytaj z dysku, -> przeczytaj MFT, aby sprawdzić, czy jest wystarczająca ilość miejsca na zapis zdekompresowany, -> zdekompresuj w pamięci, -> wrzuć go do pamięci podręcznej żądającej aplikacji? czy mówimy o prywatnych bajtach aplikacji? po prostu ciekawy. ---------- Czy to jest to, na co tutaj patrzymy?
CausingUnderflowsEverwhere
1
@CausingUnderflowsEverywhere Ta pamięć podręczna jest pamięcią podręczną we / wy , co sprawia, że ​​wiele odczytów nie musi być obsługiwanych przez dysk. NTFS ma nadzieję, że nowe dane zmieszczą się w istniejących jednostkach CU, ale upewnia się, że jest miejsce, jeśli tak nie jest. Rozumiem, że pamięć podręczna we / wy nie jest specyficzna dla jednej aplikacji, chociaż dane zostaną umieszczone w prywatnej pamięci programu, gdy zostanie wywołane.
Ben N