Ceph e Snapshots de VM: O Custo Invisível na Performance de Escrita (RBD)

      19 de dezembro de 2025 Felipe Guimarães 8 min de leitura
      Ceph e Snapshots de VM: O Custo Invisível na Performance de Escrita (RBD)

      Snapshots no Ceph não são de graça. Entenda a penalidade de Copy-on-Write (CoW), o impacto em latência de escrita e como medir o gargalo em volumes RBD.

      Compartilhar:

      Se você gerencia infraestrutura de virtualização sobre Ceph, já ouviu a promessa de vendas: "Snapshots são instantâneos e não ocupam espaço inicial". Isso é tecnicamente verdade, mas operacionalmente perigoso. O marketing esquece de mencionar que a conta chega depois, e ela é paga com a moeda mais cara do seu cluster: Latência de Escrita.

      Muitos administradores percebem tarde demais que seus volumes RBD (RADOS Block Device) estão sofrendo de uma "hemorragia de IOPS" inexplicável. O culpado geralmente não é a rede, nem o disco, mas a lógica implacável de como o Ceph preserva o passado enquanto tenta gravar o futuro. Vamos dissecar o que acontece fisicamente nos seus discos quando você abusa dos snapshots.

      O que é a Penalidade CoW no Ceph? O Copy-on-Write (CoW) no Ceph RBD impõe uma latência extra em volumes com snapshots. Para cada escrita em um bloco que possui um snapshot referenciado, o cluster deve primeiro ler o dado original, alocar espaço e copiá-lo para preservar o estado anterior, transformando uma simples operação de escrita (1 IO) em uma sequência pesada de leitura-alocação-escrita (3+ IOs), degradando severamente a performance.

      A Ilusão do Snapshot Grátis e o Mecanismo Copy-on-Write (CoW)

      Para entender o problema, precisamos abandonar a visão do sistema de arquivos do sistema operacional convidado (Guest OS) e olhar para o bloco. O Ceph não sabe o que é um arquivo "Excel"; ele vê objetos de 4MB (o padrão do RBD).

      Quando você tira um snapshot, o Ceph simplesmente congela o mapa de ponteiros daquela imagem. Nada é copiado. O custo é zero. É aqui que o administrador novato sorri.

      O problema começa no segundo seguinte, quando a VM tenta gravar dados. O Ceph opera sob o modelo Copy-on-Write (CoW) para snapshots RBD. Se a VM tenta sobrescrever um bloco que faz parte de um snapshot protegido, o OSD (Object Storage Daemon) diz: "Espere, eu preciso salvar a versão antiga antes de você tocar nisso".

      Diagrama de fluxo do Copy-on-Write (CoW) no Ceph RBD: Onde uma escrita se transforma em leitura + alocação + escrita. Figura: Diagrama de fluxo do Copy-on-Write (CoW) no Ceph RBD: Onde uma escrita se transforma em leitura + alocação + escrita.

      A ilusão de "grátis" desaparece porque a escrita do cliente fica bloqueada até que todo esse malabarismo no backend seja concluído. O cliente (a VM) sente isso como iowait.

      Anatomia de um Objeto RBD e o Impacto no Disco

      Vamos descer ao nível do OSD. Imagine um volume RBD de 100GB. Ele é fatiado em objetos. Quando sua VM envia uma escrita aleatória de 4KB, ela cai dentro de um desses objetos.

      Em um volume sem snapshots (limpo):

      1. O cliente envia a escrita.

      2. O OSD grava no WAL (Write Ahead Log) e na RocksDB (se usar BlueStore).

      3. O OSD confirma a escrita (Ack).

      4. O dado vai para o disco de dados assincronamente.

      Em um volume com snapshots (sujo): Antes do passo 2, o OSD verifica se aquele objeto específico já foi "clonado" para o snapshot atual. Se não foi, ele precisa ler o objeto original, copiá-lo para uma nova área (ou marcar a referência interna) e só então permitir a nova escrita.

      Isso gera o que chamamos de Amplificação de Escrita. Você pediu 1 IOPS de escrita, mas o disco físico teve que realizar uma leitura e múltiplas escritas de metadados e dados.

      Tabela Comparativa: Volume Limpo vs. Volume com Snapshots

      Abaixo, uma comparação direta do impacto esperado em um cenário de escritas aleatórias (Random Write 4k):

      Métrica Volume RBD Limpo (No Snaps) Volume RBD com Snapshots (CoW Ativo) O que acontece fisicamente?
      Latência de Escrita Baixa (ex: 1-2ms em SSD) Alta/Variável (ex: 5-15ms) O OSD precisa verificar metadados e mover dados antigos.
      IOPS Efetivos Próximo ao limite do disco/rede 30% a 50% de redução O "teto" de IOPS baixa porque cada IO lógico custa mais IO físico.
      Throughput Estável Instável ("Dente de serra") Picos de latência causam engasgos na fila de IO da VM.
      Custo de CPU no OSD Moderado Alto Cálculo de checksums e gerenciamento de RocksDB intensos.

      O Pesadelo das Cadeias Longas e Fragmentação RBD

      O cenário piora quando entramos no território de "Linked Clones" ou cadeias longas de snapshots. É comum em ambientes de VDI ou CI/CD: você tem uma imagem base, cria um clone para a VM A, tira um snapshot da VM A, e cria um clone para a VM B a partir desse snapshot.

      Isso cria uma árvore de dependência. Para ler um bloco que não foi modificado na ponta da cadeia, o Ceph precisa percorrer a árvore para trás até encontrar a versão autoritativa do dado.

      Correlação entre profundidade de snapshots e latência de escrita em volumes RBD sob carga aleatória. Figura: Correlação entre profundidade de snapshots e latência de escrita em volumes RBD sob carga aleatória.

      Embora o Ceph tenha otimizações (como o object map) para mitigar leituras, a escrita continua sofrendo. Quanto mais profunda a cadeia (Depth), maior a sobrecarga de metadados para determinar "quem é dono desse bloco agora?" e "para onde devo copiar o dado antigo?".

      Diagnóstico Prático com rbd perf image iotop e Métricas

      Não confie no seu instinto. Se o usuário reclama de lentidão, prove que é o Ceph (ou prove que não é).

      O primeiro passo não é olhar o htop da VM, mas sim interrogar o cluster. A ferramenta rbd possui comandos nativos de performance que muitos ignoram.

      Para visualizar a latência em tempo real por imagem:

      # Habilita o monitoramento de performance (se não estiver ativo)
      ceph config set client.rbd rbd_perf_tool_enable true
      
      # Observa o topo das imagens com maior latência/IOPS
      rbd perf image iotop --sort write_latency
      

      O que procurar:

      • Write Latency alta: Se estiver consistentemente acima de 10-20ms em flash, você tem um problema.

      • Write Ops vs. Write Bytes: Muitas operações pequenas (4k) com alta latência são o cenário clássico de penalidade de CoW.

      Além disso, verifique a saúde dos OSDs. Se apenas os OSDs que hospedam os objetos daquela VM específica estão lentos, verifique a compactação do RocksDB. Snapshots geram muita atividade de metadados (tombstones e overwrites) no RocksDB do BlueStore.

      Estratégias de Mitigação: Flattening e Políticas de Retenção

      Você diagnosticou o problema. O volume tem 50 snapshots diários e a performance está no chão. Colocar SSDs NVMe vai mascarar o problema, mas não vai resolvê-lo (e vai custar caro). A solução é arquitetural e operacional.

      1. Flattening (Aplainar a Imagem)

      Se você usa clones (ex: criou uma VM a partir de um Template), a nova VM mantém um vínculo com o pai. O comando flatten quebra esse vínculo, copiando todos os dados do pai para o filho.

      # Verifica se há parent
      rbd info pool_vms/vm-100-disk-0 | grep parent
      
      # Remove a dependência (CUIDADO: Gera IO intenso durante o processo)
      rbd flatten pool_vms/vm-100-disk-0
      

      Risco: O flatten é uma operação de cópia massiva. Execute fora do horário de pico.

      2. Política de Retenção Agressiva

      Não guarde lixo. Snapshots de VM não são backup de longo prazo; são pontos de recuperação rápida.

      • Use ferramentas como ceph-rbd-snapshot-retention ou scripts simples para podar snapshots antigos.

      • Regra de Ouro: Mantenha a profundidade (depth) baixa. Idealmente, menos de 7 snapshots ativos por imagem de alta performance.

      3. Camada de Cache (Tiering) - Cuidado

      Adicionar um cache tier de SSD na frente de HDDs pode piorar a situação com snapshots se o algoritmo de flushing não for eficiente. Em cargas de trabalho modernas com Ceph BlueStore, é preferível usar SSDs/NVMe diretamente como pool principal ou usar a função de DB/WAL em dispositivos rápidos, deixando o spinning rust (HDD) apenas para dados frios (Object Storage/S3), não para RBD de alta performance.

      Veredito Técnico: O Preço da Conveniência

      Snapshots são uma ferramenta funcional, não mágica. O modelo mental correto para operar Ceph RBD é entender que cada snapshot é uma dívida técnica contraída contra a performance futura de escrita.

      Se sua aplicação exige latência de escrita ultrabaixa (bancos de dados transacionais), evite snapshots frequentes ou use replicação a nível de aplicação (log shipping, replicas de DB) em vez de depender do armazenamento. Se precisar usar, monitore a latência de commit e mantenha suas cadeias curtas. No storage distribuído, a física sempre ganha.


      Referências & Leitura Complementar

      • Ceph Documentation: "RBD Snapshots and Clones" - Documentação oficial sobre a arquitetura de provisionamento.

      • Sage Weil (Ceph Creator): "RADOS: A Scalable, Reliable Storage Service for Petabyte-scale Storage Clusters" (Paper original, útil para entender a distribuição de objetos).

      • RocksDB Tuning Guide for Ceph: Entendendo como a compactação do LSM-tree afeta a latência em cenários de alta escrita de metadados.

      • RFC 3720 (iSCSI): Para entender comparativos de latência de bloco em protocolos tradicionais vs. distribuídos.

      #Ceph Performance Tuning #RBD Snapshot Latency #Copy-on-Write Penalty #Ceph Storage Optimization #VM Snapshot Overhead
      Felipe Guimarães

      Felipe Guimarães

      Linux Sysadmin Veterano

      Vive no terminal. Mantenedor de diversos módulos kernel de storage. Acredita que GUI é bloatware.