I file che utilizzano la compressione NTFS sono decompressi sul disco o nella memoria?


14

Come funziona la decompressione NTFS in Windows? Secondo Microsoft, la decompressione NTFS viene eseguita espandendo il file, quindi utilizzandolo. Sembra giusto, ma la mia domanda è come questo processo avviene tecnicamente.

Windows carica il file compresso in memoria, lo espande in memoria e legge dalla memoria? Oppure carica il file compresso in memoria, lo espande sul disco o in memoria, scrive sul disco e quindi legge?

Sto cercando di capire se forse posso migliorare le prestazioni del mio computer usando la compressione NTFS. In questo modo, l'unità disco lenta o SSD che non è in grado di gestire molte operazioni di scrittura avranno sempre meno dati da scrivere e leggere, e il mio potente processore che è inattivo la maggior parte delle volte può decomprimere i file, migliorando la mia velocità di archiviazione e salute .


1
Ho modificato la tua domanda per concentrarmi maggiormente sul fatto che i file siano decompressi in memoria o su disco. In questo modo, sarà molto meno probabile che venga chiuso come duplicato di questa altra domanda , che tocca di più gli altri aspetti.
Ben N

Risposte:


19

Windows decomprime i file in memoria. Farlo su disco cancellerebbe completamente qualsiasi miglioramento della velocità e causerebbe molte inutili scritture del disco. Vedi la fine di questo articolo del blog Microsoft sui file sparsi e la compressione NTFS :

  1. NTFS determina a quale unità di compressione si accede.
  2. Viene letto l'intero intervallo allocato dell'unità di compressione.
  3. Se l'unità non è compressa, si passa al passaggio 5. In caso contrario, NTFS tenterebbe di riservare (ma non allocare) lo spazio necessario per riscrivere la CU decompressa sul disco. Se lo spazio libero sul disco è insufficiente, l'applicazione potrebbe ottenere un ERROR_DISK_FULL durante la lettura.
  4. La CU sarebbe decompressa in memoria .
  5. L'intervallo di byte decompressi verrebbe mappato nella cache e restituito all'applicazione richiedente.
  6. ...

Naturalmente, se la memoria è insufficiente, la memoria utilizzata dal processo di decompressione potrebbe causare il paging di altra memoria e la scrittura sul disco nel file di paging. Fortunatamente, solo i blocchi contenenti sezioni che i tuoi programmi leggono effettivamente verranno decompressi; NTFS non deve decomprimere il tutto se sono necessari solo pochi byte.

Se il tuo SSD è veloce, probabilmente non otterrai miglioramenti di velocità dalla compressione NTFS. È concepibile che il tempo che il tuo processore impiega per decomprimere i dati più il tempo che il tuo disco impiega a leggere i dati compressi potrebbe essere maggiore del tempo impiegato dal tuo SSD per leggere i dati non compressi. Dipende anche dalla dimensione dei file con cui lavori. La dimensione minima di un file comprimibile varia da 8 KB a 64 KB, a seconda della dimensione del cluster. Qualsiasi file di dimensioni inferiori a quella dimensione non verrà affatto compresso, ma verrà aggiunta una piccola quantità di contabilità.

Se si scrive molto su file compressi, è possibile che si verifichino molte variazioni di velocità a causa dell'algoritmo di compressione utilizzato (LZ).

Ulteriori letture: in che modo la compressione NTFS influisce sulle prestazioni?


1
> se hai poca memoria, i dati decompressi potrebbero essere cercati e scritti su disco nel file di paging [citazione necessaria] - un algoritmo intelligente eliminerebbe semplicemente i dati decompressi ed eseguirà nuovamente la decompressione al prossimo accesso, con l'assunzione di (de) compressione essendo ordini di grandezza più veloci del paging. In effetti, questo è già ciò che accade con la cache della pagina e mi aspetto che Windows inserisca semplicemente questi dati decompressi nella stessa cache. (In Windows, tutto il file r / w passa attraverso la cache della pagina, anche quando è write-through.)
Bob

Anzi, è probabilmente quello che fa. Ho adattato quella parte della risposta, grazie.
Ben N

"L'intervallo di byte decompressi verrebbe mappato nella cache " Sai qual è la definizione di cache qui? Solo curioso. ----- "Altrimenti, NTFS tenterebbe di riservare lo spazio necessario per riscrivere la CU decompressa su disco." Conosciamo il motivo esatto per questo? Microsoft sta assumendo qui che la modifica al file non aggiungerà dimensioni che faranno sì che la dimensione totale compressa superi la dimensione originale non compressa? Sembra un'assunzione schifosa.
CausingUnderflowsOwherewhere

Quindi, in sintesi, stiamo guardando: Leggi dal disco, -> leggi MFT per controllare lo spazio sufficiente per scrivere decompresso, -> decomprimi in memoria, -> gettalo nella cache dell'applicazione richiedente? stiamo parlando dei byte privati ​​dell'applicazione? solo curioso. ---------- È questo ciò che stiamo guardando qui?
CausingUnderflowsOwherewhere

1
@CausingUnderflowsEverywhere Quella cache è la cache I / O , il che la rende così le letture multiple non dovranno essere servite dal disco. NTFS spera che i nuovi dati si adattino alle CU esistenti, ma si assicura che ci sia spazio in caso contrario. Comprendo che la cache IO non è specifica per un'applicazione, sebbene i dati finiscano nella memoria privata del programma quando richiesto.
Ben N
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.