¿Los archivos que usan la compresión NTFS se descomprimen en el disco o en la memoria?

15

¿Cómo funciona la descompresión NTFS en Windows? Según Microsoft, la descompresión de NTFS se realiza expandiendo el archivo y luego usándolo. Eso suena bien, pero mi pregunta es cómo se produce técnicamente este proceso.

¿Windows carga el archivo comprimido en la memoria, lo expande en la memoria y lo lee desde la memoria? ¿O carga el archivo comprimido en la memoria, lo expande al disco o en la memoria, escribe en el disco y luego lee?

Estoy tratando de averiguar si tal vez pueda mejorar el rendimiento de mi computadora usando la compresión NTFS. De esa manera, la unidad de disco lento o SSD que no puede manejar tantas operaciones de escritura siempre tendrá menos datos para escribir y leer, y mi potente procesador que está inactivo la mayor parte del tiempo puede descomprimir los archivos, mejorando mi velocidad de almacenamiento y estado .

Causando subflujos en todas partes
fuente
1
Edité su pregunta para centrarme más en si los archivos se descomprimen en la memoria o en el disco. De esa manera, será mucho menos probable que se cierre como un duplicado de esta otra pregunta , que toca más sobre los otros aspectos.
Ben N

Respuestas:

19

Windows descomprime los archivos en la memoria. Hacerlo en el disco eliminaría por completo cualquier mejora de velocidad y causaría una gran cantidad de escritura innecesaria en el disco. Consulte el final de este artículo del blog de Microsoft sobre archivos dispersos y compresión NTFS :

  1. NTFS determina a qué unidad de compresión se está accediendo.
  2. Se lee todo el rango asignado de la unidad de compresión.
  3. Si la unidad no está comprimida, saltamos al paso 5. De lo contrario, NTFS intentaría reservar (pero no asignar) el espacio requerido para volver a escribir la CU descomprimida en el disco. Si no hay suficiente espacio libre en el disco, la aplicación podría obtener un ERROR_DISK_FULL durante la lectura.
  4. El CU se descomprimiría en la memoria .
  5. El rango de bytes descomprimido se asignaría a la memoria caché y se devolvería a la aplicación solicitante.
  6. ...

Por supuesto, si tiene poca memoria, la memoria utilizada por el proceso de descompresión podría causar que otra memoria se pagine y se escriba en el disco en el archivo de página. Afortunadamente, solo se descomprimirán los fragmentos que contienen secciones que sus programas realmente leen; NTFS no tiene que descomprimir todo si solo necesita unos pocos bytes.

Si su SSD es rápido, probablemente no obtendrá mejoras de velocidad de la compresión NTFS. Es concebible que el tiempo que su procesador pasa descomprimiendo los datos más el tiempo que su disco pasa leyendo los datos comprimidos podría aumentar más que el tiempo que su SSD tarda en leer los datos sin comprimir. También depende del tamaño de los archivos con los que trabaja. El tamaño mínimo de un archivo compresible varía de 8 KB a 64 KB, dependiendo del tamaño de su clúster. Los archivos de menos de ese tamaño no se comprimirán en absoluto, pero se agregará una pequeña cantidad de contabilidad.

Si escribe mucho en archivos comprimidos, puede ver mucha variación en la velocidad debido al algoritmo de compresión utilizado (LZ).

Lectura adicional: ¿Cómo afecta la compresión NTFS al rendimiento?

Ben N
fuente
1
> si tiene poca memoria, los datos descomprimidos se pueden paginar y escribir en el disco en el archivo de la página [cita requerida]: un algoritmo inteligente simplemente arrojaría los datos descomprimidos y volvería a descomprimirlos en el próximo acceso, con asumiendo que la (des) compresión es un orden de magnitud más rápido que la paginación. De hecho, eso es lo que sucede con el caché de la página, y esperaría que Windows simplemente pusiera estos datos descomprimidos en ese mismo caché. (En Windows, todos los archivos r / w pasan por la memoria caché de la página, incluso cuando se escribe).
Bob
De hecho, eso es probablemente lo que hace. He ajustado esa parte de la respuesta, gracias.
Ben N
"El rango de bytes descomprimido se mapearía en caché " ¿Sabes cuál es la definición de caché aquí? Sólo curioso. ----- "De lo contrario, NTFS intentaría reservar el espacio requerido para volver a escribir la CU descomprimida en el disco". ¿Sabemos la razón exacta de esto? ¿Microsoft está asumiendo aquí que la modificación del archivo no agregará tamaño que causará que el tamaño comprimido total supere el tamaño original sin comprimir? Parece una suposición sucia.
CausingUnderflowsEverywhere
Entonces, en resumen, estamos viendo: Leer desde el disco, -> leer MFT para verificar si hay suficiente espacio para escribir descomprimido, -> descomprimir en la memoria, -> ¿arrojarlo al caché de la aplicación solicitante? ¿Estamos hablando de los bytes privados de la aplicación? Sólo curioso. ---------- ¿Es esto lo que estamos viendo aquí?
CausingUnderflowsEverywhere
1
@CausingUnderflowsEverywhere Esa memoria caché es la memoria caché de E / S , lo que hace que el disco no necesite todas las lecturas múltiples. NTFS espera que los nuevos datos se ajusten a las CU existentes, pero se asegura de que haya espacio si no es así. Entiendo que el caché de E / S no es específico para una aplicación, aunque los datos terminarán en la memoria privada del programa cuando se solicite.
Ben N