Os arquivos que usam a compactação NTFS são descompactados no disco ou na memória?


14

Como a descompressão NTFS funciona no Windows? Segundo a Microsoft, a descompressão do NTFS é feita expandindo o arquivo e, em seguida, usando-o. Parece certo, mas minha pergunta é como esse processo ocorre tecnicamente.

O Windows carrega o arquivo compactado na memória, expande-o na memória e lê na memória? Ou ele carrega o arquivo compactado na memória, expande-o para o disco ou na memória, grava no disco e depois lê?

Estou tentando descobrir se talvez eu possa melhorar o desempenho do meu computador usando a compactação NTFS. Dessa forma, a unidade de disco lento ou o SSD que não consegue lidar com tantas operações de gravação sempre terá menos dados para gravar e ler, e meu poderoso processador que fica ocioso na maioria das vezes pode descomprimir os arquivos, melhorando a velocidade e a integridade do armazenamento .


1
Editei sua pergunta para focar mais em se os arquivos são descompactados na memória ou no disco. Dessa forma, será muito menos provável que seja fechado como uma duplicata dessa outra questão , que aborda mais os outros aspectos.
Ben N

Respostas:


19

O Windows descompacta arquivos na memória. Fazer isso em disco eliminaria completamente qualquer melhoria de velocidade e causaria muitas gravações desnecessárias em disco. Consulte o final deste artigo do blog da Microsoft sobre arquivos esparsos e compactação NTFS :

  1. NTFS determina qual unidade de compactação está sendo acessada.
  2. Todo o intervalo alocado da unidade de compressão é lido.
  3. Se a unidade não estiver compactada, pularemos para a etapa 5. Caso contrário, o NTFS tentaria reservar (mas não alocar) o espaço necessário para gravar a UC descompactada no disco. Se houver espaço livre insuficiente no disco, o aplicativo poderá receber um ERROR_DISK_FULL durante a leitura.
  4. A UC seria descompactada na memória .
  5. O intervalo de bytes descompactado seria mapeado no cache e retornado ao aplicativo solicitante.
  6. ...

Obviamente, se você estiver com pouca memória, a memória usada pelo processo de descompactação poderá fazer com que outra memória seja paginada e gravada em disco no arquivo de paginação. Felizmente, apenas os pedaços que contêm seções que seus programas realmente lêem serão descompactados; O NTFS não precisa descompactar tudo se você precisar apenas de alguns bytes.

Se o seu SSD for rápido, você provavelmente não obterá melhorias na velocidade da compactação NTFS. É concebível que o tempo que o processador gaste os dados descompactados e o tempo que o disco gaste lendo os dados compactados possam aumentar o tempo que o SSD leva para ler os dados não compactados. Também depende do tamanho dos arquivos com os quais você trabalha. O tamanho mínimo de um arquivo compactável varia de 8 KB a 64 KB, dependendo do tamanho do cluster. Qualquer arquivo menor que esse tamanho não será compactado, mas uma pequena quantidade de contabilidade será adicionada.

Se você escreve muito em arquivos compactados, pode ver muita variação na velocidade devido ao algoritmo de compactação usado (LZ).

Leitura adicional: Como a compactação NTFS afeta o desempenho?


1
> se você tiver pouca memória, os dados descomprimidos poderão ser paginados e gravados em disco no arquivo de paginação [citação necessário] - um algoritmo inteligente simplesmente descartará os dados descomprimidos e executará a descompactação novamente no próximo acesso, com a suposição de (des) compressão sendo ordens de magnitude mais rápidas que paginação. Na verdade, isso já é o que acontece com o cache da página - e eu esperaria que o Windows simplesmente colocasse esses dados descompactados no mesmo cache. (No Windows, todos os arquivos r / w atravessa o cache de página, mesmo quando é write-through.)
Bob

Na verdade, é provavelmente o que faz. Eu ajustei essa parte da resposta, obrigado.
Ben N

"O intervalo de bytes descompactado seria mapeado no cache " Você sabe qual é a definição de cache aqui? Apenas curioso. ----- "Caso contrário, o NTFS tentaria reservar o espaço necessário para gravar a UC descompactada de volta no disco." Sabemos o motivo exato disso? A Microsoft está assumindo aqui que a modificação no arquivo não adicionará tamanho que fará com que o tamanho total compactado ultrapasse o tamanho original não compactado? Parece uma suposição ruim.
CausingUnderflowsEverywhere

Então, em resumo, analisamos: Leia do disco, -> leia MFT para verificar se há espaço suficiente para escrever descompactado, -> descomprima na memória, -> jogue-o no cache do aplicativo solicitante? estamos falando dos bytes privados do aplicativo? apenas curioso. ---------- É isso que estamos vendo aqui?
CausingUnderflowsEverywhere

1
@CausingUnderflowsEverywhere Esse cache é o cache de E / S , o que faz com que várias leituras não precisem ser atendidas pelo disco. O NTFS espera que os novos dados caibam nas UCs ​​existentes, mas garante que haja espaço, se não houver. Entendo que o cache de E / S não é específico para um aplicativo, embora os dados acabem na memória privada do programa quando necessário.
Ben N
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.