Compactação NTFS no SSD - altos e baixos

13

Este tópico discute a compactação NTFS nos HDDs como um método para melhorar o desempenho do acesso ao disco e conclui que é ruim com mais frequência do que isso. Mas sempre vi a compressão como uma maneira de economizar espaço e aprendi sua eficácia nisso. E agora eu tenho um SSD onde o espaço é caro e a penalidade de desempenho, por exemplo, para ler / gravar 2 clusters em vez de 1 é muito menor.

Por outro lado, como os SSDs são muito mais rápidos que os HDDs, eu esperaria que uma taxa de transferência mais alta resultasse em maior uso da CPU. Isso pode se tornar um problema? Quaisquer outros pensamentos sobre o assunto?

Eu gosto do efeito de economia de espaço, não é enorme, mas está lá. Se o desempenho é uma preocupação, no entanto, prefiro desativá-lo:

insira a descrição da imagem aqui

Girafa violeta
fonte
Muitos pacotes de software têm arquivos que você nunca usa. Os arquivos usados ​​com freqüência são armazenados em cache no RAM de qualquer maneira. O LZW é, na verdade, um algoritmo muito simples, portanto, não espere que ele consuma tanto a CPU.
Uğur Gümüşhan
@ UğurGümüşhan: exatamente, eu não notei nenhuma utilização extra da CPU, mesmo ao trabalhar com arquivos compactados grandes, fora de SSDs rápidos, com altas taxas de dados.
Giraffe Violet

Respostas:

12

A Microsoft escreveu isso há um tempo atrás em um blog :

O NTFS compacta os arquivos dividindo o fluxo de dados em UCs (isso é semelhante a como os arquivos esparsos funcionam). Quando o conteúdo do fluxo é criado ou alterado, cada CU no fluxo de dados é compactada individualmente. Se a compactação resultar em uma redução de um ou mais clusters, a unidade compactada será gravada no disco em seu formato compactado. Em seguida, uma faixa de VCN esparsa é alinhada ao final da faixa de VCN compactada para fins de alinhamento (como mostrado no exemplo abaixo). Se os dados não compactarem o suficiente para reduzir o tamanho em um cluster, toda a UC será gravada no disco em sua forma não compactada.

Esse design torna o acesso aleatório muito rápido, pois apenas uma CU precisa ser descompactada para acessar qualquer VCN único no arquivo. Infelizmente, o acesso seqüencial grande será relativamente mais lento, pois é necessária a descompactação de muitas UCs ​​para executar operações sequenciais (como backups).

E em um artigo da KB escreve isso :

Embora a compactação do sistema de arquivos NTFS possa economizar espaço em disco, a compactação de dados pode afetar adversamente o desempenho. A compactação NTFS possui as seguintes características de desempenho. Quando você copia ou move um arquivo NTFS compactado para uma pasta diferente, o NTFS descompacta o arquivo, copia ou move o arquivo para o novo local e, em seguida, recompacta o arquivo. Esse comportamento ocorre mesmo quando o arquivo é copiado ou movido entre pastas no mesmo computador. Os arquivos compactados também são expandidos antes de copiar pela rede, para que a compactação NTFS não economize largura de banda da rede.

Como a compactação NTFS é intensiva para o processador, o custo de desempenho é mais perceptível nos servidores, que são frequentemente vinculados ao processador. Servidores muito carregados e com muito tráfego de gravação são maus candidatos à compactação de dados. No entanto, você pode não ter uma degradação significativa no desempenho com servidores somente leitura, principalmente leitura ou pouco carregados.

Se você executar um programa que usa o log de transações e que grava constantemente em um banco de dados ou log, configure o programa para armazenar seus arquivos em um volume que não é compactado. Se um programa modificar dados através de seções mapeadas em um arquivo compactado, o programa poderá produzir páginas "sujas" mais rapidamente do que o gravador mapeado pode escrevê-las. Programas como o Microsoft Message Queuing (também conhecido como MSMQ) não funcionam com a compactação NTFS devido a esse problema.

Como as pastas iniciais do usuário e os perfis móveis usam muitas operações de leitura e gravação, a Microsoft recomenda que você coloque as pastas iniciais do usuário e os perfis móveis em um volume que não tenha compactação NTFS na pasta pai ou na raiz do volume.


Resumo:

compactar apenas arquivos pequenos que nunca mudam (apenas leituras e sem gravações) porque as leituras são rápidas, mas as gravações exigem descompactação e nova compactação, que consome energia da CPU e o tipo de armazenamento não é tão importante.

magicandre1981
fonte
Obrigado pelos trechos, aprendi algumas coisas novas aqui. Mas não entendo por que você aconselha apenas compactar arquivos pequenos. Os arquivos grandes costumam encolher muito; portanto, se é para isso que você deseja a compactação (leia: espaço de armazenamento é uma preocupação), faz todo o sentido compactar todos os arquivos, independentemente do tamanho.
Giraffe Violet
Você verá um aumento no uso da CPU ao usar arquivos compactados, especialmente ao gravar arquivos compactados existentes ou ler sequencialmente arquivos compactados grandes (o que aconteceria se for um arquivo de mídia). Você deve executar alguns testes e verificar se o pico no uso da CPU é aceitável. Se sua CPU for muito utilizada, o texto acima recomenda não prosseguir com ela, e se o seu sistema não for um servidor, provavelmente está OK.
LawrenceC
"Quando você copia ou move um arquivo NTFS compactado para uma pasta diferente, o NTFS descompacta o arquivo." Acabei de mover um arquivo compactado de 11 GB em outra pasta, posso dizer que não descompactou porque o arquivo foi movido instantaneamente.
M.kazem Akhgary
Que tal usar um cache de ram no SSD?
M.kazem Akhgary
6

Como Claudio diz muitas coisas em detalhes, vou retomar sua opinião, que também é minha, e vi os mesmos efeitos depois de tentar o que ele diz.

Para SSD, a compactação NTFS não deve ser usada.

Agora vou enumerar alguns motivos para tal afirmação:

Motivo Nº1: Ele mata o SSD musch mais rápido, uma vez que faz duas gravações; A compactação NTFS sempre grava dados não compactados antes de iniciar a compactação na RAM e reescreve os dados compactados apenas se for um ganho de pelo menos 4KiB.

Motivo Nº2: o uso do cluster NTFS 4KiB em um SSD está perdendo 50% da velocidade do SSD, verifique qualquer benchmark e verá que os blocos de 128KiB tornam o SSD duas vezes mais rápido que o uso de blocos de 4KiB, e a compactação NTFS pode ser usada apenas em partições NTFS de cluster 4KiB.

Motivo Nº3: Existem contêineres (como o PISMO File Mount) que podem criar um contêiner visto como compactação e / ou criptografia dinamicamente, tais conteúdos fazem a compactação na RAM e não enviam dados não compactados para o disco antes de reescrever na forma compactada, também mais, o PISMO obtém uma melhor taxa de compactação que o NTFS.

Existem muito mais motivos, mas esses são os principais mais importantes.

O ponto otrer é SPEED, qualquer compactação é feita na CPU; portanto, se você não tiver uma CPU muito rápida (o mono-thread é usado para isso no NTFS enquanto o multi-thread é usado em alguns contêineres) verá a leitura / gravação muito lenta quando comprimido; o pior é que você pode ter uma CPU muito rápida, mas se ela estiver sendo usada para outras coisas (como renderização, transcodificação, etc.), não haverá CPU sobrando para compactação; portanto, novamente, você terá um desempenho ruim.

A compactação NTFS é boa apenas para discos lentos tradicionais quando você tem CPU sem muito uso, mas requer uma boa desfragmentação após cada gravação (no nível do arquivo), porque cada bloco de 64KiB (compactado ou não) é gravado em uma posição múltipla de 64KiB; a única maneira de compactar esses fragmentos é depois da compactação (ou gravação em uma pasta compactada), desfragmentando esse arquivo.

PD: Cuidado, estamos falando do Windows em hardware real, não dentro de máquinas virtuais; o importante é quem escreve no meio físico, outros podem ter camadas de cache que podem mitigar os efeitos e também melhorar bastante as coisas.

Laura
fonte
O que você está dizendo faz sentido, em princípio, mas na prática eu uso a compactação NTFS há mais de uma década, primeiro em HDDs, ultimamente em SSDs, e não notei que isso tenha impacto significativo na utilização da CPU. A compressão LZ77 pode ser muito rápida. A gravação dupla pode ser um problema real, mas provavelmente não é para usuários domésticos (devido à carga de gravação relativamente baixa). E me pergunto se a Microsoft teve ou irá otimizar o procedimento de gravação para SSDs para eliminar a gravação preliminar. Seria bobagem da parte deles não.
violeta girafa
2

Ninguém fala sobre o problema principal em não SSD, é fragmentação.

Cada bloco de 64KiB é gravado onde estaria sem compactação, mas pode ser compactado; portanto, pelo menos é <= 60KiB; depois, grava menos de 64KiB; o bloco de nidificação de bits irá para onde iria, como se o anterior não estivesse. comprimir, então muitas lacunas aparecem.

Teste-o com um arquivo de vários gigabytes de uma máquina virtusl de qualquer sistema Windows (eles tendem a ser reduzidos em 50%, mas com enormes> 10000 fragmentos).

E para SSDs há algo que não foi dito, como diabos isso escreve? Quero dizer, se ele o escreve sem compactação e o substitui com a versão compactada (para cada mega bloco de 64KiB), a vida do SSD é muito reduzida; mas se ele gravá-lo diretamente no formato compactado, o SSD live pode ser maior ou menor ... mais se você escrever esse 64KiB apenas de uma vez, mais curto, muito mais curto se você escrever esse 64KiB em 4KiB, porque ele gravará 64KiB (na forma compactada) tantas vezes quanto 64/4 = 16 vezes.

A penalidade de desempenho é causada porque o tempo de CPU necessário para compactar / descompactar é maior do que o tempo ganho, pois não é necessário gravar blocos 4KiB ... portanto, com uma CPU muito rápida e uma compressão de disco muito lenta, reduz o tempo de gravação e leitura, mas se o SSD é muito rápido e a CPU é bastante lenta, ele escreverá muito mais devagar.

Quando falo de CPU rápida ou lenta, quero dizer que, nesse momento, a CPU pode ser usada por 'matemática' ou outro processo; portanto, pense sempre em CPU livre, não em especificações de CPU no papel, o mesmo vale para disco / SSD, ele pode estar em uso por vários processos.

Digamos que o 7Zip grave um arquivo enorme de outro disco com o LZMA2, ele usará muita CPU; portanto, ao copiar um arquivo compactado NTFS, ele não terá CPU livre, portanto, ficará mais lento do que sem o NTFS compactação, mas assim que o 7Zip terminar de usar a CPU, essa CPU poderá compactar NTFS mais rapidamente e, nesse momento, a compactação NTFS poderá fazer as coisas mais rapidamente.

Pessoalmente, nunca uso compactação NTFS, prefiro contêineres PFO de montagem de arquivo PISMO (com compactação e também permite a inscrição, tanto em tempo real quanto transparente para aplicativos), oferece uma taxa de compressão muito melhor e menos impacto na CPU, enquanto é uma leitura e escreva em tempo real, sem necessidade de descompactar antes do uso, basta montá-lo e usá-lo no modo de leitura e gravação.

Como o PISMO faz a compactação na RAM antes da gravação no disco, ele pode fazer com que o SSD dure mais, meus testes de compactação NTFS me fazem pensar que envia dados para o disco duas vezes, primeiro descompactado e depois, se puder compactá-lo, é sobrescrito na forma compactada .

Por que a velocidade de gravação compactada NTFS no meu SSD é quase a metade da não compactada com arquivos do que a compactação em quase 1/2 do seu tamanho ou em tamanhos compactados inferiores? No meu AMD Threadripper 2950 (32 núcleos e 64 threads) com 128GiB de ram (CPU rápida, CPU muito rápida) com menos de 1% de uso, por isso há CPU suficiente para fazer a compactação mais rapidamente do que a velocidade secional máxima do SSD, talvez porque A compactação NTFS é iniciada depois que os blocos de 64 KB são enviados para o disco descompactado e substituídos pela versão compactada ... oh, se eu fizer isso em uma máquina virtual executando o Linux no host e o Windows no convidado, o cache do Linux informa que esses clusters são gravados duas vezes , e a velocidade é muito, muito mais rápida (o Linux está armazenando em cache as gravações NTFS não compactadas enviadas pelo Windows Guest e, após serem substituídas por dados compactados, o linux não envia dados não compactados para o disco,

Minha recomendação, não use a compactação NTFS, exceto nas máquinas virtuais, os hóspedes executam janelas se o host for Linux e nunca se você usar muito a CPU, se a CPU não for rápida o suficiente.

O SSD moderno tem um enorme cache ram interno, de modo que a gravação + overwtite causada pela compactação NTFS pode ser mitigada pelo sistema de cache interno SSD.

Meus testes foram feitos em SSDs "bonitas" sem RAM interna para cache dentro do SSD, quando eu as repito naquelas com cache ram, a velocidade de gravação é rápida, mas não como se poderia imaginar.

Faça seus próprios testes e use tamanhos enormes de arquivos (maior que o total de tam instalado para evitar resultados ocultos do cache).

A propósito, algo que algumas pessoas não sabem sobre o vompression NTFS ... qualquer arquivo de 4KiB ou menos nunca será compactado com NTFS porque não há como reduzir seu tamanho pelo menos em 4KiB.

A copressão NTFS retira 64KiB, compacta-os e, se é possível reduzir um cluster (4KiB), é gravada compactada, 64KiB são 16 blocos de 4KiB (consecutivos).

Se um arquivo de 8KiB quando a compactação terminar, o resultado final for superior a 4KiB, ele não salvará nenhum cluster; portanto, ele será gravado não compactado ... e assim por diante ... a pressão deverá ganhar pelo menos 4KiB.

Ah, e para a compactação NTFS, o NTFS deve estar com o tamanho do cluster de 4KiB.

Tente fazer um teste: Use o cluster de 128KiB em um NTFS no SSD; você verá um enorme desempenho melhorar as velocidades de gravação e leitura.

Os sistemas de arquivos no SSD com cluster 4KiB estão perdendo muito de sua velocidade, na maioria dos casos mais de 50% perdidos ... veja qualquer benchmark por aí que teste com tamanhos de bloco diferentes, de 512Bytes a 2MiB, a maioria dos SSD grava em dobro velocidade quando no tamanho do cluster de 64KiB (ou 128KiB) do que no 4KiB.

Deseja uma verdadeira motivação no seu SSD? Não use o cluster 4KiB no sistema de arquivos, use 128KiB.

Use o cluster 4KiB somente se mais de 99% dos seus arquivos tiverem menos de 128 KB.

Etc, etc, etc ... teste, teste e teste seu próprio caso.

Nota: Crie a partição NTFS do sistema com diskpart no modo console enquanto instala o Windows com um cluster de 128KiB ou de outro Windows, mas não permita que o Windows seja formatado enquanto estiver na parte gráfica do instalador (ele sempre será formatado como NTFS do cluster 4KiB).

Agora, todo o meu Windows está instalado na partição NTFS do cluster de 128KiB em> 400GiB SSD (SLC).

Espero que as coisas fiquem claras, o M $ não está dizendo como o iy escreve o NTFS compactado, meus testes me dizem que ele escreve duas vezes (64KiB descompactados e, em seguida, <= 60KiB compreensed), não apenas uma vez (cuidado com isso se estiver no SSD).

Cuidado: o Windows tenta compactar NTFS alguns diretórios internos, não importa se você não comprime NTFS, a única maneira de realmente evitá-lo se o tamanho do cluster NFTS for diferente de 4KiB, pois a compactação NTFS só funciona em partições NTFS com tamanho de cluster 4KiB

Claudio
fonte
2
Bem-vindo ao Super Usuário! A sua resposta pode ser melhorada com um resumo que aborda diretamente consulta do OP :)
bertieb
Uma ideia interessante usando clusters maiores, mas também resultará em amplificação de gravação com SSDs, certo? Simplesmente porque qualquer arquivo menor que 128k ainda ocupará 128k no disco. Ou o Windows é inteligente o suficiente para não confirmar gravações físicas além do tamanho real dos dados de um arquivo?
Violet Giraffe
0

Eu vejo os comentários de outras pessoas e acho que as pessoas esquecem frequentemente o cenário mais útil em que a compactação de arquivos / pastas NTFS tem uma grande vantagem no SSD: ferramentas de desenvolvimento modernas. Meu Matlab licenciado pela universidade tem em sua pasta de instalação (para usuário comum como somente leitura) as seguintes quantidades de dados:

28,5 GB Dados 30,6 GB Tamanho no disco Contém 729.246 arquivos e 15.000 pastas (!!!)

Este é no meu laptop com SSD de 500 GB, onde a partição do Windows é de 200 GB.

Eu sei que o Matlab é um pouco extremo a esse respeito, mas muitos devtools têm propriedades semelhantes: uma tonelada de arquivos de texto pequenos e altamente compactáveis ​​(cabeçalhos, código, arquivos XML). Estou compactando o Matlab agora antes de instalar o Intel Quartus FPGA devtool e o Octave já está compactado da seguinte maneira:

Tamanho dos dados de 1,55 GB no disco: 839 GB Contém 34.362 arquivos 1.955 pastas

Esse material é escrito uma vez e lido zilhões de vezes durante a criação do projeto. Faz todo o sentido gastar um pouco de energia da CPU para descompactá-lo e economizar talvez metade do seu precioso espaço SSD.

xmp125a
fonte
-1

Você precisa fazer o benchmark duas vezes para saber. Comprimido. Descomprimido. Esqueça o desgaste dos SSDs. Você precisa de um SSD e uma CPU rápidos, para que não haja gargalos.

Um SSD de 512GB custa 50 dólares hoje em dia. O acesso mais rápido ao disco para mim até agora é usar o Linux sempre que possível e o mecanismo de fila de disco LIFO. Em vez de CFQ.

O Windows 10 cria atividade infinita de disco com 12 GB de RAM instalada no meu laptop. O mint mint carrega e quase zero acesso ao disco ocorre depois. A menos que você o inicie. O Windows apenas tem uma maneira de se manter ocupado sem tarefas visíveis.

Mauricio Guerrero
fonte
O RAID 0 em 2 SSDs provavelmente é de 800 MB / s.
Mauricio Guerrero