Tempestades de PFC em NVMe-oF: diagnóstico e mitigação em redes RoCEv2

      Rafael Junqueira 9 min de leitura
      Tempestades de PFC em NVMe-oF: diagnóstico e mitigação em redes RoCEv2

      Análise de SRE sobre como o Priority Flow Control pode paralisar infraestruturas de storage NVMe-oF. Aprenda a identificar tempestades de broadcast e configurar watchdogs para garantir a confiabilidade do RoCEv2.

      Compartilhar:

      A latência é a nova indisponibilidade. Em arquiteturas de armazenamento distribuído modernas, onde NVMe-oF (NVMe over Fabrics) promete tempos de resposta na casa dos microssegundos, a rede deixa de ser apenas um tubo e torna-se parte integrante do barramento de I/O. No entanto, a busca pelo "zero packet loss" em redes Ethernet através do RoCEv2 (RDMA over Converged Ethernet v2) introduziu um modo de falha catastrófico e muitas vezes invisível: a tempestade de PFC (Priority Flow Control).

      Quando um cluster de storage NVMe apresenta picos de latência de cauda (p99) inexplicáveis ou timeouts de I/O em massa, raramente o problema está no disco físico. O culpado geralmente é um mecanismo de proteção de rede que funcionou "bem demais", paralisando o tráfego legítimo em uma tentativa desesperada de evitar o descarte de pacotes.

      Resumo em 30 segundos

      • O Problema: O RoCEv2 exige uma rede sem perdas (lossless). O PFC atinge isso pausando o tráfego quando os buffers enchem, mas pode causar travamentos em cascata (tempestades) se um nó for lento ou falhar.
      • O Sintoma: Latência de disco dispara para segundos, throughput cai a zero e o cluster parece "congelado", mesmo com discos saudáveis.
      • A Solução: Implementar PFC Watchdogs nos switches para descartar pacotes de fluxos travados e utilizar ECN (Explicit Congestion Notification) para gerenciar o congestionamento antes que a pausa seja necessária.

      A mecânica do RoCEv2 e a fragilidade do lossless

      O protocolo NVMe foi desenhado para paralelismo massivo e baixa latência, eliminando a pilha de software legada do SCSI. Quando estendemos isso para a rede via NVMe-oF com transporte RDMA (RoCEv2), transferimos dados diretamente da memória de uma máquina para outra, sem envolver a CPU (kernel bypass).

      Para que o RDMA funcione eficientemente sobre Ethernet, a rede não pode perder pacotes. Diferente do TCP, que lida bem com retransmissões, o RDMA sofre penalidades severas de desempenho se houver packet loss. Para resolver isso, a indústria adotou o IEEE 802.1Qbb, ou Priority Flow Control (PFC).

      O PFC divide o tráfego Ethernet em 8 classes de prioridade (CoS). Se o buffer de recepção de uma prioridade específica (digamos, a prioridade 3 usada para Storage) encher, o receptor envia um quadro de pausa (Pause Frame) para o emissor, dizendo: "Pare de enviar tráfego na prioridade 3".

      O efeito dominó (Head-of-Line Blocking)

      O sistema funciona perfeitamente em pequena escala. O problema surge quando temos congestionamento sustentado ou um "slow drainer" (um servidor recebendo dados lentamente devido a problemas de CPU, PCIe ou disco ruim).

      1. O Servidor A (lento) enche seu buffer e envia PAUSE para o Switch ToR.

      2. O Switch ToR para de enviar para o Servidor A, mas continua recebendo dados de outros lugares destinados a ele. O buffer do switch enche.

      3. O Switch ToR envia PAUSE para o Switch Spine.

      4. O Switch Spine para o tráfego na prioridade 3 para toda a porta conectada ao ToR.

      Neste ponto, qualquer outro servidor conectado àquele Spine que tente enviar dados na prioridade 3 será bloqueado, mesmo que seu destino não seja o Servidor A. O congestionamento se espalha viralmente, criando uma "tempestade de PFC".

      Diagrama de propagação de contrapressão (Backpressure): um receptor lento inicia uma cadeia de comandos de pausa que satura os buffers dos switches, bloqueando tráfego de nós saudáveis. Figura: Diagrama de propagação de contrapressão (Backpressure): um receptor lento inicia uma cadeia de comandos de pausa que satura os buffers dos switches, bloqueando tráfego de nós saudáveis.

      Diagnóstico: métricas que importam

      Como SREs, não podemos confiar em reclamações de usuários ("o sistema está lento"). Precisamos de observabilidade. O diagnóstico de tempestades de PFC exige monitoramento granular nos switches e nas placas de rede (NICs/HCAs).

      Se você monitora apenas largura de banda e erros de CRC, você está cego para este problema. As métricas vitais residem nos contadores de controle de fluxo.

      Contadores essenciais

      Em um ambiente Linux com NICs Mellanox (ConnectX-5 ou superior), por exemplo, ethtool -S é seu melhor amigo. Procure por:

      • rx_pfc_pause_frames: Quantas vezes este nó pediu para o vizinho parar.

      • tx_pfc_pause_frames: Quantas vezes o vizinho (switch) mandou este nó parar.

      • rx_pfc_pause_duration: Tempo total que o tráfego ficou parado.

      💡 Dica Pro: A existência de quadros de pausa não é necessariamente ruim; é o mecanismo funcionando. O problema é a taxa e a duração. Um contador incremental constante é normal. Um salto de milhões de quadros em segundos indica uma tempestade.

      Tabela comparativa: comportamento saudável vs. patológico

      Métrica Comportamento Saudável (Micro-bursts) Comportamento Patológico (PFC Storm)
      Frequência de Pausa Esporádica, correlacionada a picos de escrita. Contínua, sustentada por segundos ou minutos.
      Impacto na Latência Aumento marginal na latência média. Latência de cauda (p99) dispara (ms para s).
      Throughput Mantém-se próximo ao line-rate. Cai drasticamente, oscilando perto de zero.
      Escopo Isolado a um par de nós ou rack. Espalha-se por múltiplos racks ou pods.

      Mitigação: quebrando o ciclo de feedback

      Aumentar os buffers dos switches não resolve o problema; apenas adia o inevitável e aumenta a latência máxima. Para mitigar tempestades de PFC, precisamos de mecanismos que atuem antes da saturação total ou que quebrem o travamento quando ele ocorrer.

      1. Implementação de PFC Watchdog

      O PFC Watchdog é um mecanismo de segurança nos switches. Ele monitora quanto tempo uma fila de prioridade está em estado de pausa. Se esse tempo exceder um limite configurado, o switch toma uma decisão drástica: ele descarta todos os pacotes daquela fila e libera o buffer.

      Isso viola o princípio "lossless"? Sim. Mas em um cenário de tempestade, a rede já está inutilizável. O Watchdog sacrifica os pacotes do fluxo problemático para salvar o restante do cluster.

      • Configuração típica: Detectar travamento após 100-200ms.

      • Ação: Dropar pacotes e enviar um alerta SNMP/Syslog.

      2. Notificação Explícita de Congestionamento (ECN/DCQCN)

      Enquanto o PFC é reativo (para tudo!), o ECN é proativo. Ele utiliza os bits do cabeçalho IP (campo ToS/DSCP) para marcar pacotes quando o buffer do switch começa a encher, mas antes de estar cheio.

      Quando o receptor (target NVMe) vê um pacote com o bit de congestionamento marcado (CE - Congestion Experienced), ele notifica o emissor (initiator) através de um pacote CNP (Congestion Notification Packet). O emissor então reduz sua taxa de transmissão voluntariamente.

      Isso cria um loop de controle de fluxo suave, mantendo os buffers dos switches vazios o suficiente para absorver micro-bursts sem acionar o PFC brutal.

      Comparação visual: PFC atua como um sinal vermelho abrupto parando o tráfego, enquanto ECN funciona como um limitador de velocidade dinâmico, ajustando o fluxo antes que o congestionamento ocorra. Figura: Comparação visual: PFC atua como um sinal vermelho abrupto parando o tráfego, enquanto ECN funciona como um limitador de velocidade dinâmico, ajustando o fluxo antes que o congestionamento ocorra.

      ⚠️ Perigo: Configurar DCQCN (Data Center Quantized Congestion Notification) é complexo. Se os parâmetros de alpha e beta (taxa de redução e recuperação) forem mal ajustados, você pode subutilizar drasticamente sua rede de 100/400Gbps.

      Validando SLOs de armazenamento

      Como engenheiros de confiabilidade, não nos importamos apenas se "está funcionando", mas se está dentro dos objetivos de nível de serviço. Para NVMe-oF, seus SLIs (Service Level Indicators) devem incluir métricas de rede.

      Se o seu SLO de latência de disco é "99% das leituras abaixo de 500µs", uma tempestade de PFC fará você queimar seu error budget em minutos.

      Recomendação de monitoramento para o dashboard do Grafana:

      1. Taxa de Pausa por Host: Alerta se rate(rx_pfc_pause_frames) > X por segundo.

      2. Disparos de Watchdog: Alerta crítico se qualquer switch registrar pfc_watchdog_events. Isso significa que houve perda de dados para salvar a malha.

      3. Congestionamento ECN: Monitorar a taxa de pacotes marcados com CE. Isso indica se sua rede está operando no limite da capacidade.

      O futuro é roteado?

      Embora o RoCEv2 com PFC e ECN seja o padrão atual para alta performance em Enterprise Storage, a complexidade operacional é alta. A indústria começa a olhar para o NVMe/TCP como uma alternativa viável. Com as otimizações recentes de hardware e software, o NVMe/TCP oferece performance próxima ao RDMA, mas utilizando a robustez do controle de congestionamento do TCP, eliminando a necessidade de uma rede lossless e o pesadelo do PFC.

      Até que essa transição ocorra, a higiene da sua rede RoCEv2 depende de:

      1. Isolamento estrito de tráfego de armazenamento em filas de prioridade dedicadas.

      2. Uso mandatório de ECN/DCQCN.

      3. PFC Watchdogs ativos como última linha de defesa.

      Não deixe que um cabo ruim derrube seu datacenter inteiro. Culpe o sistema que permite a propagação da falha, e projete a rede para conter o dano.

      Referências & Leitura Complementar

      • IEEE 802.1Qbb: Priority-based Flow Control - O padrão base para Ethernet sem perdas.

      • RFC 3168: The Addition of Explicit Congestion Notification (ECN) to IP.

      • NVIDIA/Mellanox Community: "Understanding PFC and RoCEv2 Congestion Management" - Documentação técnica essencial para tuning de NICs ConnectX.

      • SNIA (Storage Networking Industry Association): Especificações de NVMe over Fabrics.


      Perguntas Frequentes (FAQ)

      O que é uma tempestade de PFC em redes de storage? É um evento catastrófico onde um dispositivo de rede (NIC ou switch) trava enviando quadros de pausa continuamente. Isso propaga o congestionamento por toda a malha (backpressure), paralisando o tráfego de armazenamento de nós que nem sequer estão envolvidos no problema original.
      É possível usar NVMe-oF sem Priority Flow Control (PFC)? Sim. Você pode utilizar o transporte **NVMe/TCP**, que lida com a perda de pacotes nativamente via TCP e não exige uma rede lossless. Outra opção é implementar RoCEv2 apenas com ECN (Explicit Congestion Notification) em redes "Lossy" altamente tunadas, embora o PFC ainda seja o padrão recomendado para garantir a performance máxima do RDMA.
      Como o ECN ajuda a mitigar problemas de PFC? O ECN (Explicit Congestion Notification) atua como um aviso prévio. Ele sinaliza o congestionamento marcando pacotes antes que o buffer do switch encha completamente. Isso permite que os emissores reduzam a taxa de transmissão suavemente, evitando a necessidade de o switch enviar um comando de pausa brutal (PFC) que paralisaria a fila.
      #NVMe-oF #RoCEv2 #PFC Storm #Priority Flow Control #Storage Networking #Latência de rede #Engenharia de Confiabilidade
      Rafael Junqueira
      Assinatura Técnica

      Rafael Junqueira

      Engenheiro de Confiabilidade (SRE)

      "Transformo caos em estabilidade via observabilidade. Defensor da cultura blameless e focado em SLIs e SLOs. Se algo falhou, revisamos o sistema, nunca a pessoa."