Werden Dateien mit NTFS-Komprimierung auf der Festplatte oder im Speicher dekomprimiert?

14

Wie funktioniert die NTFS-Dekomprimierung unter Windows? Laut Microsoft erfolgt die NTFS-Dekomprimierung, indem die Datei zunächst erweitert und dann verwendet wird. Das hört sich richtig an, aber meine Frage ist, wie dieser Prozess technisch abläuft.

Lädt Windows die komprimierte Datei in den Speicher, erweitert sie im Speicher und liest sie aus dem Speicher? Oder lädt es die komprimierte Datei in den Speicher, erweitert sie auf die Festplatte oder in den Speicher, schreibt sie auf die Festplatte und liest sie dann?

Ich versuche herauszufinden, ob ich die Leistung meines Computers mithilfe der NTFS-Komprimierung verbessern kann. Auf diese Weise müssen auf dem langsamen Festplattenlaufwerk oder der SSD, die nicht so viele Schreibvorgänge ausführen können, immer weniger Daten geschrieben und gelesen werden, und mein leistungsfähiger Prozessor, der die meiste Zeit im Leerlauf arbeitet, kann die Dateien dekomprimieren und so die Speichergeschwindigkeit und den Zustand verbessern .

Ursache von Unterflüssen überall
quelle
1
Ich habe Ihre Frage bearbeitet, um mich mehr darauf zu konzentrieren, ob Dateien in den Speicher oder auf die Festplatte dekomprimiert werden. Auf diese Weise wird es weniger wahrscheinlich sein, dass es als Duplikat dieser anderen Frage geschlossen wird , die die anderen Aspekte stärker berührt.
Ben N

Antworten:

19

Windows dekomprimiert Dateien in den Speicher. Wenn Sie dies auf der Festplatte tun, werden Geschwindigkeitsverbesserungen vollständig zunichte gemacht und es wird eine Menge unnötiger Schreibvorgänge auf der Festplatte verursacht. Lesen Sie das Ende dieses Microsoft-Blog-Artikels zu NTFS-Sparse-Dateien und -Komprimierung :

  1. NTFS bestimmt, auf welche Komprimierungseinheit zugegriffen wird.
  2. Der gesamte zugewiesene Bereich der Komprimierungseinheit wird gelesen.
  3. Wenn die Einheit nicht komprimiert ist, fahren wir mit Schritt 5 fort. Andernfalls würde NTFS versuchen, den zum Zurückschreiben der dekomprimierten CU auf die Festplatte erforderlichen Speicherplatz zu reservieren (aber nicht zuzuweisen). Wenn nicht genügend freier Speicherplatz auf dem Datenträger vorhanden ist, erhält die Anwendung möglicherweise beim Lesen einen ERROR_DISK_FULL.
  4. Die CU würde im Speicher dekomprimiert .
  5. Der dekomprimierte Byte-Bereich würde in den Cache abgebildet und an die anfordernde Anwendung zurückgegeben.
  6. ...

Wenn nur noch wenig Speicher verfügbar ist, kann der vom Dekomprimierungsprozess verwendete Speicher dazu führen, dass ein anderer Speicher ausgelagert und auf die Festplatte in der Auslagerungsdatei geschrieben wird. Glücklicherweise werden nur die Abschnitte dekomprimiert, die Abschnitte enthalten, die Ihre Programme tatsächlich lesen. NTFS muss das Ganze nicht dekomprimieren, wenn Sie nur wenige Bytes benötigen.

Wenn Ihre SSD schnell ist, werden Sie wahrscheinlich keine Geschwindigkeitsverbesserungen durch die NTFS-Komprimierung erhalten. Es ist vorstellbar, dass die Zeit, die Ihr Prozessor für das Dekomprimieren von Daten und die Zeit, die Ihre Festplatte für das Lesen der komprimierten Daten benötigt, länger ist als die Zeit, die Ihre SSD für das Lesen der nicht komprimierten Daten benötigt. Dies hängt auch von der Größe der Dateien ab, mit denen Sie arbeiten. Die Mindestgröße einer komprimierbaren Datei liegt je nach Clustergröße zwischen 8 KB und 64 KB. Dateien, die kleiner als diese Größe sind, werden überhaupt nicht komprimiert, aber es wird ein winziger Teil der Buchhaltung hinzugefügt.

Wenn Sie häufig in komprimierte Dateien schreiben, kann die Geschwindigkeit aufgrund des verwendeten Komprimierungsalgorithmus (LZ) stark variieren.

Weitere Informationen: Wie wirkt sich die NTFS-Komprimierung auf die Leistung aus?

Ben N
quelle
1
> Wenn der Arbeitsspeicher knapp ist, können die dekomprimierten Daten ausgelagert und in die Auslagerungsdatei auf die Festplatte geschrieben werden. Ein intelligenter Algorithmus löscht die dekomprimierten Daten einfach und führt die Dekomprimierung beim nächsten Zugriff mit erneut durch Die Annahme, dass (De) Komprimierung Größenordnungen schneller ist als Paging. Genau das passiert bereits mit dem Seiten-Cache - und ich würde erwarten, dass Windows diese dekomprimierten Daten einfach in denselben Cache legt. (In Windows durchläuft die gesamte Datei-R / W den Seiten-Cache, auch wenn sie durchgeschrieben wird.)
Bob
Wahrscheinlich ist es das, was es tut. Ich habe diesen Teil der Antwort angepasst, danke.
Ben N
"Der dekomprimierte Bytebereich würde in den Cache abgebildet " Wissen Sie, wie der Cache hier definiert ist? Nur neugierig. ----- "Andernfalls würde NTFS versuchen, den zum Zurückschreiben der dekomprimierten CU auf die Festplatte erforderlichen Speicherplatz zu reservieren." Kennen wir den genauen Grund dafür? Geht Microsoft hier davon aus, dass durch die Änderung der Datei keine Größe hinzugefügt wird, die dazu führt, dass die komprimierte Gesamtgröße die ursprüngliche nicht komprimierte Größe überschreitet? Scheint eine blöde Annahme zu sein.
CausingUnderflowsEverywhere
Zusammenfassend betrachten wir also: Von der Festplatte lesen, -> MFT lesen, um zu prüfen, ob genügend Speicherplatz für das dekomprimierte Schreiben vorhanden ist, -> im Speicher dekomprimieren, -> in den Cache der anfragenden Anwendung werfen. Sprechen wir über die privaten Bytes der Anwendung? nur neugierig. ---------- Sehen wir uns das hier an?
CausingUnderflowsEverywhere
1
@CausingUnderflowsEverywhere Dieser Cache ist der E / A- Cache , wodurch mehrere Lesevorgänge nicht alle von der Festplatte ausgeführt werden müssen. NTFS hofft, dass die neuen Daten in die vorhandenen CUs passen, stellt jedoch sicher, dass Platz vorhanden ist, wenn dies nicht der Fall ist. Ich verstehe, dass der E / A-Cache nicht für eine Anwendung spezifisch ist, obwohl die Daten bei Bedarf im privaten Speicher des Programms gespeichert werden.
Ben N