Ssd TRIM / DISCARD detalhes

1

Estou escrevendo um script e tenho algumas perguntas sobre o funcionamento interno do comando TRIM. Se TRIM for emitido para um bloco de apagamento totalmente vazio (zerado), o coletor de lixo ainda excluirá o bloco? Eu gostaria de poder editar TRIM para blocos grandes no ssd, mas minha preocupação é que isso levaria a desgaste desnecessário em blocos que já estão vazios.

Por outro lado, se eu não emitir TRIM em blocos vazios que foram usados anteriormente pelo sistema de arquivos (digamos, partes de um arquivo que continha apenas zeros), existe alguma sobrecarga ao escrever dados significativos para esses blocos? Em outras palavras, o ssd é "inteligente" o suficiente para não executar um ciclo de leitura-modificação-gravação, já que o bloco já está no estado "ground"?

Este controlador é dependente (eu me importo principalmente com o novo sandforce)?

    
por Ivan 07.02.2012 / 06:15

2 respostas

3

A resposta de Justin Lynn está totalmente correta. Eu só queria abordar outra parte da sua pergunta.

Devido à maneira como as células NAND armazenam dados, o estado apagado (terra) é um, não um zero. Portanto, um bloco de zeros precisa ser apagado antes de poder ser gravado, mas um bloco pode ser escrito diretamente.

EDIT: Quanto à questão do que acontece quando o SSD precisa gravar em um bloco que é preenchido com os que é mais difícil de responder. Mesmo que não haja dados no bloco que precisem ser apagados, ainda pode haver metadados que precisem ser apagados. Se esse não for o caso e o bloco for totalmente gravável, isso depende da implementação do GC do SSD.

Outra possibilidade é que o SSD seja inteligente o suficiente para que, quando você escreve um LBA com preenchimento zero, perceba que não há necessidade de gravar os dados no NAND. Em vez disso, apenas desmata o LBA e, quando solicitado pelos dados, retorna zeros, como padrão para LBAs não-formados. Eu não ficaria surpreso se as unidades SandForce fizerem isso, já que elas já estão fazendo a compactação e a desduplicação de dados. Não sei se outros SSDs fazem isso.

Eu percebo que existem muitas possibilidades, talvez não saibam na minha resposta, mas não há regras gerais sobre isso que um fabricante de SSD tenha que seguir, então cabe aos fabricantes individuais decidirem. As pessoas a par dessas decisões não podem falar sobre elas, já que as implementações específicas desses algoritmos de GC são tão importantes para o desempenho do SSD.

    
por 07.02.2012 / 13:17
4

Bem, TRIM como um comando simplesmente diz ao controlador SSD que o bloco não é mais requerido pelo sistema de arquivos e que o controlador não pode mais se preocupar com o bloco quando ele estiver coletando lixo no espaço flash livre. Caso contrário, o SSD teria que mover o bloco [now deleted] enquanto fazia coleta de lixo. A limpeza de grandes blocos de zeros não deve aumentar o desgaste da unidade, muito pelo contrário, em controladores com uma implementação TRIM adequada. Dito isso, o comportamento exato é dependente do controlador, mas para os propósitos do seu uso, eu não me preocuparia com o TRIM de grandes áreas de blocos de zero, se você estivesse salvando o SSD de ter que copiar blocos de zeros enquanto GCs. Não sou especialista no protocolo SATA, mas parece uma conclusão bastante clara da leitura do link , especialmente link .

    
por 07.02.2012 / 07:47

Tags