Write Amplification Causes Mitigation
SSDs revolucionaram o armazenamento de dados com sua velocidade e eficiência energética. No entanto, eles têm uma limitação fundamental: ao contrário dos HDDs (...
Write Amplification Causes Mitigation
O Problema da Longevidade do SSD
SSDs revolucionaram o armazenamento de dados com sua velocidade e eficiência energética. No entanto, eles têm uma limitação fundamental: ao contrário dos HDDs (Hard Disk Drives), os SSDs não podem simplesmente sobrescrever dados no mesmo local. Essa restrição é a raiz de muitos desafios, incluindo o write amplification.
Fundamentos do SSD: Memória NAND
Para entender a write amplification, precisamos entender como os SSDs armazenam dados. Eles usam memória flash NAND, que é organizada hierarquicamente em:
- Páginas: A menor unidade de leitura e escrita. Tipicamente, uma página tem 4KB, 8KB ou 16KB.
- Blocos: Um grupo de páginas. Os blocos são a menor unidade de apagamento. Um bloco pode conter, por exemplo, 128, 256 ou 512 páginas.

A limitação crucial é que você não pode sobrescrever uma página que já contém dados. Para modificar dados, você precisa:
- Apagar o bloco inteiro que contém a página.
- Escrever os novos dados (e quaisquer dados antigos que você queira manter) em um novo bloco.
Esta necessidade de apagar e reescrever dados, mesmo que você esteja apenas modificando uma pequena parte, leva diretamente ao write amplification.
Ciclos P/E (Program/Erase)
Cada bloco de memória NAND tem um número limitado de ciclos de Programação/Apagamento (P/E) que ele pode suportar antes de se tornar não confiável. Esse limite é uma das principais razões pelas quais a write amplification é um problema tão grande. Quanto mais vezes um bloco é apagado e reescrito, mais rápido ele se desgasta. As tecnologias modernas de NAND (TLC, QLC) têm contagens de ciclos P/E significativamente menores que as tecnologias mais antigas (SLC, MLC).
Write Amplification (WA): A Definição
Write amplification (WA) é a razão entre a quantidade de dados fisicamente escritos no SSD e a quantidade de dados que o sistema operacional solicitou que fossem escritos. Formalmente:
WA = (Bytes fisicamente escritos no SSD) / (Bytes logicamente escritos pelo host)
Por exemplo, se você escreve 1 GB de dados no seu SSD, mas o SSD internamente escreve 3 GB de dados para acomodar essa escrita, sua write amplification é 3. Uma WA mais alta significa que seu SSD está trabalhando mais e se desgastando mais rápido.
Causas da WA
Várias coisas contribuem para a write amplification. Vamos detalhar as principais:
1. Garbage Collection (GC)
A garbage collection é um processo essencial que os SSDs usam para liberar espaço para novas escritas. Como você não pode sobrescrever dados, quando você "exclui" um arquivo, o SSD não apaga imediatamente os dados subjacentes. Em vez disso, ele marca os blocos como "inválidos".
Periodicamente, o SSD executa a garbage collection para:
- Identificar blocos que contêm principalmente páginas inválidas (ou seja, dados "excluídos").
- Mover as páginas válidas desses blocos para novos blocos.
- Apagar o bloco original.

O problema é que, para mover as páginas válidas, o SSD precisa escrever esses dados, mesmo que o sistema operacional não tenha solicitado essa escrita. Isso aumenta a quantidade total de dados escritos e, portanto, aumenta a write amplification.
Warning: Uma garbage collection agressiva pode levar a uma WA mais alta, enquanto uma GC conservadora pode levar a um desempenho mais lento quando o SSD está quase cheio.
2. Overprovisioning
Overprovisioning (OP) é a prática de reservar uma porcentagem do espaço total do SSD para uso interno do controlador do SSD. Este espaço extra não é acessível ao usuário. O overprovisioning fornece ao controlador do SSD espaço livre para realizar operações como garbage collection e nivelamento de desgaste (wear leveling) de forma mais eficiente.
Mais espaço de overprovisioning geralmente leva a:
- Menor write amplification.
- Melhor desempenho (especialmente escritas).
- Maior vida útil do SSD.
No entanto, também significa que você tem menos espaço utilizável para seus dados. Os SSDs geralmente vêm com uma quantidade padrão de overprovisioning (tipicamente 7% ou 28%), mas alguns usuários podem optar por aumentar o overprovisioning para melhorar o desempenho e a vida útil.
3. TRIM/UNMAP
O comando TRIM (ou UNMAP em alguns sistemas) é um comando que o sistema operacional envia para o SSD para informar quais blocos de dados não estão mais em uso (por exemplo, após a exclusão de um arquivo). Isso permite que o SSD execute a garbage collection de forma mais eficiente, pois ele sabe quais blocos podem ser apagados sem precisar mover os dados válidos.
Se o TRIM não estiver habilitado ou não funcionar corretamente, o SSD não saberá quais blocos contêm dados inválidos e precisará mover dados potencialmente desnecessários durante a garbage collection, aumentando a write amplification.
Importante: Certifique-se de que o TRIM esteja habilitado no seu sistema operacional para otimizar o desempenho e a vida útil do seu SSD. Verifique com
lsblk -Dno Linux.
4. Firmware do SSD
O firmware do SSD desempenha um papel crucial no gerenciamento da write amplification. Ele controla como a garbage collection é executada, como o overprovisioning é utilizado e como o nivelamento de desgaste é implementado. Um firmware bem projetado pode minimizar a write amplification e maximizar a vida útil do SSD.
5. Sistema de Arquivos
O sistema de arquivos que você usa também pode afetar a write amplification. Alguns sistemas de arquivos, como o F2FS (Flash-Friendly File System), são projetados especificamente para SSDs e tentam minimizar a write amplification. Outros sistemas de arquivos, como o ext4, podem não ser tão eficientes em SSDs, especialmente se não estiverem configurados corretamente.
6. Tamanho do Bloco de Escrita
O tamanho dos blocos de escrita também pode influenciar a WA. Se você estiver escrevendo pequenas quantidades de dados (menores que o tamanho da página) com frequência, o SSD precisará ler a página inteira, modificar a parte que você está escrevendo e, em seguida, reescrever a página inteira. Isso pode levar a uma write amplification significativa.
Impacto da Write Amplification
A write amplification tem um impacto significativo em vários aspectos dos SSDs:
- Vida útil: Uma WA mais alta significa que os blocos de memória NAND se desgastam mais rapidamente, reduzindo a vida útil geral do SSD. A vida útil de um SSD é frequentemente medida em TBW (Terabytes Written) ou DWPD (Drive Writes Per Day).
- Performance: A garbage collection e outras operações internas relacionadas à WA podem consumir recursos do SSD, reduzindo o desempenho, especialmente em cenários de escrita intensiva. Isso pode se manifestar como IOPS (Input/Output Operations Per Second) mais baixos e latência mais alta.
- Consumo de energia: Escrever mais dados fisicamente requer mais energia. Uma WA mais alta pode levar a um maior consumo de energia, o que é especialmente relevante em dispositivos móveis e laptops.
Mitigação da Write Amplification
Existem várias estratégias que podem ser usadas para mitigar a write amplification:
1. Overprovisioning Adicional
Aumentar o overprovisioning além do padrão do fabricante pode ajudar a reduzir a write amplification. Isso fornece ao controlador do SSD mais espaço livre para realizar a garbage collection de forma mais eficiente. A maioria dos SSDs permite que você configure manualmente o overprovisioning usando ferramentas fornecidas pelo fabricante.
Dica: Se você tem uma carga de trabalho de escrita intensiva, considere aumentar o overprovisioning para melhorar a vida útil e o desempenho do seu SSD.
2. TRIM/UNMAP Ativado e Funcionando
Certifique-se de que o TRIM (ou UNMAP) esteja habilitado no seu sistema operacional e que esteja funcionando corretamente. Isso permite que o SSD saiba quais blocos contêm dados inválidos, permitindo que ele execute a garbage collection de forma mais eficiente.
3. Coalescing de Escritas
Tentar agrupar pequenas escritas em escritas maiores pode ajudar a reduzir a write amplification. Isso pode ser feito no nível do aplicativo ou usando técnicas de buffering no sistema operacional.
4. Sistemas de Arquivos Otimizados para SSDs
Considere usar um sistema de arquivos projetado especificamente para SSDs, como o F2FS. Esses sistemas de arquivos são otimizados para minimizar a write amplification e melhorar o desempenho.
5. Evitar Escrever Dados Desnecessários
Evite escrever dados desnecessários no SSD. Por exemplo, desabilite o journaling se você não precisar dele.
6. Monitoramento e Alerta
Monitore a saúde do seu SSD usando ferramentas SMART (Self-Monitoring, Analysis and Reporting Technology). Isso pode ajudá-lo a identificar problemas potenciais e tomar medidas corretivas antes que eles causem falhas.
Como Medir a WA
Medir a write amplification diretamente pode ser desafiador, mas existem algumas maneiras de estimá-la:
SMART: As ferramentas SMART fornecem informações sobre a quantidade de dados escritos no SSD. Você pode usar essas informações para calcular a write amplification comparando a quantidade de dados escritos fisicamente com a quantidade de dados escritos logicamente pelo host.
smartctl -a /dev/sda | grep "Host_Writes_32MiB" smartctl -a /dev/sda | grep "NAND_Writes_1GiB"Interpretação:
Host_Writes_32MiBmostra a quantidade de dados que o sistema operacional solicitou que fossem escritos (em unidades de 32MiB).NAND_Writes_1GiBmostra a quantidade de dados que foram fisicamente escritos na memória NAND (em unidades de 1GiB). Converta as unidades para bytes e divida NAND writes por Host writes para obter uma estimativa da WA.fio: A ferramenta
fiopode ser usada para gerar cargas de trabalho de escrita controladas e medir o desempenho do SSD. Embora não forneça a WA diretamente, pode ajudar a avaliar o impacto de diferentes configurações na performance de escrita.
O Que Levar Disso
A write amplification é uma realidade inevitável dos SSDs. No entanto, entender suas causas e como mitigá-la é crucial para maximizar a vida útil e o desempenho do seu SSD. Ao implementar as estratégias discutidas neste guia, você pode reduzir significativamente a write amplification e garantir que seus SSDs funcionem de forma confiável e eficiente por muitos anos. Lembre-se de monitorar a saúde do seu SSD, habilitar o TRIM, considerar o overprovisioning e escolher um sistema de arquivos adequado para otimizar o desempenho e a longevidade do seu armazenamento.
Marta G. Oliveira
DevOps Engineer & Storage Nerd
Automatiza provisionamento de storage com Terraform e Ansible. Defensora do 'Infrastructure as Code' para storage.