Tempestades de Garbage Collection: por que seu All-Flash engasga sob pressão

      Roberto Uchoa 9 min de leitura
      Tempestades de Garbage Collection: por que seu All-Flash engasga sob pressão

      Descubra como o Garbage Collection mal gerenciado cria picos de latência em arrays SSD e aprenda a mitigar o problema com Overprovisioning e TRIM correto.

      Compartilhar:

      O telefone toca às 03:14 da manhã. Não é um horário civilizado para ninguém, exceto para operadores de backup e padeiros. Do outro lado da linha, o DBA está gritando algo sobre a aplicação estar "travada" e, como sempre, a culpa já foi atribuída preventivamente à rede. "O ping está alto", diz ele. O ping está sempre alto quando você não sabe interpretar um traceroute, mas isso é uma discussão para outro dia.

      Você abre o painel de monitoramento do seu storage All-Flash de meio milhão de dólares. Os IOPS estão no chão. A latência, que deveria ser sub-milissegundo, está parecendo o tempo de resposta de um mainframe dos anos 80. A rede está inocente. O que você está vendo não é um problema de cabo, é uma Tempestade de Garbage Collection. Seu array de armazenamento não está quebrado; ele está apenas ocupado demais limpando a própria sujeira para atender às suas solicitações de escrita.

      Resumo em 30 segundos

      • A Física da NAND: SSDs podem ler e escrever em páginas (4KB-16KB), mas só podem apagar em blocos inteiros (megabytes). Isso cria um gargalo físico inevitável.
      • O Colapso: Quando o disco enche e as escritas aleatórias continuam, o controlador precisa mover dados válidos antes de apagar blocos para novas escritas. A latência explode.
      • A Solução Real: Adicionar cache de RAM é inútil se o backend está saturado. A única cura é o Overprovisioning (espaço reservado) e monitoramento de latência de cauda (p99), não médias.

      A ingrata física da memória NAND flash

      Para entender por que seu storage brilha (no mau sentido) sob pressão, você precisa descer do pedestal do "Software Defined Storage" e olhar para o silício. A memória NAND Flash tem um defeito de design fundamental que os departamentos de marketing adoram ignorar: a assimetria entre escrita e apagamento.

      Imagine que você tem um caderno. Você pode escrever em qualquer linha (Página) que estiver em branco. Mas, se quiser apagar algo para reescrever, você é obrigado a arrancar a folha inteira (Bloco), passar corretivo nela toda e reescrever o que queria manter, mais a nova informação.

      1. Leitura/Escrita: Ocorrem em nível de Página (geralmente 4KB a 16KB).

      2. Apagamento (Erase): Ocorre apenas em nível de Bloco (que contém centenas de páginas, totalizando vários MBs).

      Enquanto o disco é novo (estado Fresh Out of Box), o controlador do SSD tem milhões de páginas em branco prontas para receber dados. A vida é bela, os benchmarks batem recordes e o CIO fica feliz. O problema começa quando você sobrescreve dados. A NAND não pode simplesmente "atualizar" uma página. Ela precisa marcar a página antiga como "inválida" (lixo) e escrever os novos dados em uma nova página limpa.

      O mecanismo da tempestade

      Com o tempo, seu SSD se torna um queijo suíço de páginas válidas e inválidas espalhadas por diversos blocos. Quando o disco atinge uma certa capacidade (geralmente acima de 80% em drives mal configurados) e a carga de escrita é alta, o controlador entra em modo de pânico. Ele fica sem páginas limpas.

      Antes de aceitar aquela gravação crítica do seu banco de dados, o controlador precisa:

      1. Ler um bloco inteiro que contém lixo.

      2. Copiar as páginas válidas desse bloco para um buffer.

      3. Apagar o bloco original (uma operação de alta voltagem e lenta).

      4. Reescrever as páginas válidas no novo espaço.

      5. Finalmente, escrever o dado que o host solicitou.

      Isso é o Garbage Collection (GC). Quando isso acontece massivamente em todos os drives do array simultaneamente, temos a tempestade. A latência de escrita, que era de 50 microssegundos, salta para 10, 20 ou 50 milissegundos. Para uma aplicação síncrona, isso é o equivalente a uma eternidade.

      Gráfico ilustrando o Figura: Gráfico ilustrando o "Write Cliff": a queda abrupta de performance quando o SSD sai do estado novo e entra em estado estável com Garbage Collection ativo.

      ⚠️ Perigo: Se o seu array não tiver suporte adequado a TRIM/UNMAP, o controlador nunca saberá que os dados deletados pelo sistema operacional são lixo. Ele continuará movendo dados inúteis durante o GC, amplificando o problema (Write Amplification).

      A falácia do cache e o dinheiro jogado fora

      Sempre que esse problema surge, algum "arquiteto de soluções" sugere adicionar mais RAM ao servidor ou ao controlador do storage para servir de cache de escrita. Isso é o equivalente a comprar um balde maior para aparar goteiras quando o cano de esgoto está entupido.

      O cache de escrita (Write Buffer) absorve os picos, sim. Mas ele precisa despejar esses dados (destage) para a mídia persistente (NAND). Se o seu backend de flash está engasgado fazendo Garbage Collection, a taxa de destage cai drasticamente. O cache enche. Quando o cache enche, o storage é obrigado a enviar um backpressure para o host, rejeitando novas escritas até que o buffer esvazie.

      O resultado? A latência percebida pela aplicação vai de "excelente" para "timeout" em segundos. Cache não resolve problema de throughput sustentado de backend; ele apenas mascara a latência por alguns minutos.

      A matemática do Overprovisioning como salvação

      A única maneira física de mitigar tempestades de GC é garantir que o controlador sempre tenha blocos livres suficientes para não precisar fazer a limpeza durante a solicitação de escrita. Isso se chama Overprovisioning (OP).

      O OP é a capacidade bruta da flash que fica oculta do usuário, reservada exclusivamente para o controlador fazer suas manobras de limpeza em segundo plano.

      Tabela Comparativa: Consumer vs. Enterprise (O segredo está no OP)

      Muitos administradores tentam economizar usando SSDs "Prosumer" em servidores. Veja por que isso é um tiro no pé:

      Característica SSD Consumer / Prosumer SSD Enterprise (Data Center) Impacto na Realidade
      Overprovisioning (OP) Tipicamente ~7% 20% a 30% (ou configurável) Enterprise sustenta escritas pesadas sem engasgar.
      Latência de Cauda (p99) Errática (picos de 100ms+) Consistente e previsível Consumer causa timeouts aleatórios na aplicação.
      Proteção de Energia (PLP) Inexistente ou parcial Capacitores dedicados Sem PLP, dados no cache de escrita somem se a luz piscar.
      Endurance (DWPD) 0.3 a 1 DWPD 1 a 10+ DWPD Consumer morre rápido sob carga de GC intenso (WAF alto).

      💡 Dica Pro: Em muitos arrays Enterprise e até em controladoras RAID decentes, você pode sacrificar capacidade visível para aumentar o Overprovisioning. Transformar um volume de 1TB em 800GB visíveis pode dobrar a performance de escrita sustentada e estabilizar a latência.

      Monitoramento: a mentira da latência média

      Se você reporta "latência média" para seu chefe, você está mentindo ou é incompetente. A média esconde os crimes do storage.

      Imagine que em um minuto ocorreram 1000 operações de I/O.

      • 990 levaram 0.1ms.

      • 10 levaram 500ms (devido a uma pausa de GC).

      A média será baixa, mas aquelas 10 requisições lentas travaram o banco de dados e derrubaram as sessões dos usuários. O monitoramento de storage moderno exige foco na Latência de Cauda (Tail Latency), especificamente os percentis 99 (p99) e 99.9 (p99.9). São esses picos que causam os incidentes das 3 da manhã.

      O veredito do veterano

      Não existe mágica que contorne a física dos semicondutores. Se você encher seus storages All-Flash até 95% da capacidade e submetê-los a cargas de escrita aleatória, eles vão falhar. Não importa a marca, não importa o preço.

      A solução é pragmática:

      1. Dimensione com folga: Nunca planeje usar mais de 75-80% da capacidade física de um pool All-Flash.

      2. Compre o disco certo: SSDs Read Intensive (1 DWPD) não servem para logs de banco de dados ou caches de escrita.

      3. Ative o TRIM/UNMAP: Verifique se seu hypervisor e SO guest estão realmente enviando comandos de descarte.

      Se você ignorar isso, prepare o café. O telefone vai tocar de novo.

      Referências & Leitura Complementar

      • SNIA (Storage Networking Industry Association): "Solid State Storage Performance Test Specification (PTS)" - A bíblia de como testar SSDs corretamente, introduzindo o conceito de Steady State.

      • Micron Technology: "Tech Brief: SSD Over-provisioning and Its Benefits" - Dados técnicos sobre como o OP afeta a amplificação de escrita e a vida útil.

      • JEDEC: JESD218 e JESD219 - Padrões que definem as cargas de trabalho para testes de endurance em SSDs Enterprise vs. Client.


      FAQ: Perguntas que você deveria ter feito antes de comprar

      O que é Write Amplification Factor (WAF)? É a razão entre a quantidade de dados realmente escritos nos chips NAND e a quantidade de dados que o host solicitou para escrever. Se você pede para gravar 4KB, mas o controlador precisa mover e reescrever 12KB de dados antigos para liberar espaço, seu WAF é 3. Um WAF alto indica ineficiência, mata a performance e destrói a vida útil do SSD prematuramente.
      O comando TRIM/UNMAP é realmente necessário em arrays Enterprise? Absolutamente. Sem o TRIM (ou UNMAP em SCSI/SAS), o controlador do SSD não tem bola de cristal para saber quais páginas contêm dados que o SO já deletou. Ele continuará tratando lixo como dados VIP, movendo-os inutilmente durante o Garbage Collection. Isso mantém o disco artificialmente cheio e o WAF nas alturas.
      Por que meu SSD NVMe de consumidor é mais rápido que meu SAS Enterprise no CrystalDiskMark? Porque o CrystalDiskMark roda por poucos minutos em um drive vazio. Ele está testando o cache SLC do drive de consumidor. Em um cenário real de servidor (24/7, disco cheio, estado estável), o drive de consumidor colapsa para velocidades de HDD, enquanto o Enterprise mantém a consistência. Você não compra Enterprise por "velocidade máxima", você compra por "consistência sob tortura".
      #ssd garbage collection #latência de cauda #overprovisioning #write amplification #storage all-flash #trim unmap #performance de io
      Roberto Uchoa
      Assinatura Técnica

      Roberto Uchoa

      Sysadmin Veterano (Anti-Hype)

      "Sobrevivente da bolha pontocom e do hype do Kubernetes. Troco qualquer arquitetura de microsserviços 'inovadora' por um script bash que funciona sem falhas há 15 anos. Uptime não é opcional."