Primeiro de tudo: a amplificação de gravação não é uma propriedade exclusiva do Flash, mas acontece com todos os dispositivos de bloco.
É um efeito colateral do motivo pelo qual um dispositivo de bloco está sendo chamado de block
device: os dados são gravados em partes ("blocos") consistindo tipicamente de 512 Bytes a 4 Kilobytes. Isso leva a uma situação em que, para alterar um único byte em um dispositivo de bloco, precisamos primeiro ler o restante do bloco (essa etapa geralmente não funciona, já que os buffers do sistema operacional são geralmente pelo menos de tamanho de bloco). a mudança de um byte na memória, então escreva o bloco completo para o dispositivo: Para alterar um byte, tivemos que escrever um bloco completo, muitas vezes milhares de bytes.
Este mecanismo há muito conhecido tem um significado especial com SSDs, já que eles
- normalmente têm um tamanho de bloco grande (ish)
- pode suportar apenas um número limitado de gravações, menos que um disco giratório em ordens de magnitude.
Se um padrão de uso para um SSD com tamanho de bloco de 4K consistir na alteração de 1 byte por bloco, o número total de bytes gravados será 4096 vezes o número de bytes de carga útil, ou seja, um write amplification
de 4096. Isso significaria que um SSD com uma resistência típica de 10 anos seria empurrado para além desse limite de resistência em menos de um dia.
Contramedidas contra isso são muitas:
- Mais importante: esse padrão de uso é muito raro
- Sistemas operacionais (e / ou controladores) com SSD tentam programar gravações de uma maneira que evita a amplificação.
- Muitos SSDs modernos usam um cache de DRAM para acumular pequenas gravações no mesmo bloco e só gravá-lo no flash, se estiver cheio ou tão tarde quanto possível. Supercondutores fornecem o poder de terminar isso quando a energia é removida.
Quanto à primeira parte da pergunta: Embora um disco giratório tenha lido e gravado operações na camada física e também na lógica, as operações físicas na memória Flash são erase
, program
e read
. Isso implica que uma gravação lógica é traduzida em program
em um bloco vazio (apagado). Os modernos controladores SSD mantêm um inventário de blocos já apagados e os utilizam para satisfazer uma gravação lógica o mais rápido possível. A operação de apagamento da célula agora não usada pode ser adiada para mais tarde, se as demandas atuais de largura de banda ou a carga do controlador forem altas. Então, de fato, usar um bloco diferente não é nada além de um mecanismo de ajuste de desempenho, ainda que muito importante.