Bufferbloat em Servidores Linux: O Que É, Como Diagnosticar e Corrigir

Bufferbloat

Bufferbloat Linux. Vamos destrinchar o bufferbloat em servidores Linux de forma clara e prática, incluindo causas, impactos e como diagnosticar e corrigir.


O que é Bufferbloat

Bufferbloat é o fenômeno em que buffers de rede excessivamente grandes (em roteadores, switches ou no próprio servidor) causam latência alta e instável, mesmo quando a largura de banda não está saturada.

Em outras palavras, quando o buffer tenta “guardar tudo”, os pacotes acabam esperando muito tempo para serem transmitidos, gerando ping alto, lag em aplicações sensíveis (como VoIP, jogos, streaming) e degradação geral da performance da rede.


Como Bufferbloat afeta servidores Linux

  1. Atraso em respostas TCP:
    Pacotes demoram a sair do servidor, aumentando a latência em respostas HTTP, SSH, etc.
  2. Problemas em aplicações em tempo real:
    WebRTC, VoIP ou streaming podem travar ou apresentar jitter alto.
  3. Ineficácia de congestion control do TCP:
    TCP vê a fila cheia e reduz throughput, mesmo que a banda real não esteja totalmente usada.
  4. Efeito em upload e download simultâneo:
    Uploads grandes podem travar downloads ou afetar tráfego crítico.

Como diagnosticar Bufferbloat no Linux

1️⃣ Teste de latência real

Use ping enquanto transfere dados:

ping -i 0.2 google.com
  • Observe picos de latência enquanto roda um scp ou wget.
  • Se o ping dispara durante transferências, é sinal clássico de bufferbloat.

2️⃣ Ferramentas específicas

  • tc (Traffic Control) – monitoramento e gestão de filas.
  • iperf3 – testar throughput da rede.
  • pingplotter / mtr – traçar variações de latência.
  • flent – benchmark avançado de bufferbloat.
  • bloaty ou bloatcheck – scripts de teste simplificados.

Como mitigar Bufferbloat em Linux

1️⃣ Habilitar qdisc inteligente

Linux permite controlar filas de rede com Traffic Control (tc).

Recomendado: FQ_CoDel

# Aplica FQ_CoDel na interface eth0
sudo tc qdisc replace dev eth0 root fq_codel
  • FQ_CoDel: filtra pacotes em filas menores, reduzindo latência.
  • Alternativa: Cake, que é mais moderno e combina fairness + shaping.
sudo tc qdisc replace dev eth0 root cake

2️⃣ Limitar buffers de hardware

Algumas NICs e drivers mantêm buffers enormes. Exemplo para reduzir:

# Mostra buffers atuais
ethtool -g eth0

# Reduz RX/TX buffers
sudo ethtool -G eth0 rx 256 tx 256

3️⃣ Controlar upload/download com shaping

No servidor, você pode limitar banda para evitar encher buffers:

sudo tc qdisc add dev eth0 root handle 1: htb default 12
sudo tc class add dev eth0 parent 1: classid 1:1 htb rate 80mbit

4️⃣ Ajustes TCP

Reduzir tamanho máximo de buffers TCP:

# Ver buffer de envio
sysctl net.ipv4.tcp_wmem
# Ver buffer de recebimento
sysctl net.ipv4.tcp_rmem

Exemplo de configuração mais conservadora:

sudo sysctl -w net.ipv4.tcp_rmem="4096 87380 6291456"
sudo sysctl -w net.ipv4.tcp_wmem="4096 65536 6291456"
  • Monitorar tráfego real versus capacidade da interface.
  • Evitar saturar uplinks de 1 GbE ou links compartilhados.

Checklist rápido anti-bufferbloat no Linux

  1. ✅ Teste latência enquanto transfere dados (ping ou mtr).
  2. ✅ Aplique FQ_CoDel ou Cake em interfaces críticas (tc qdisc).
  3. ✅ Reduza buffers da NIC se necessário (ethtool -G).
  4. ✅ Ajuste buffers TCP (tcp_{r,w}mem).
  5. ✅ Limite largura de banda em links compartilhados.
  6. ✅ Monitore constantemente tráfego e latência.

FAQ

O que é bufferbloat?

É o acúmulo excessivo de pacotes em buffers de rede, causando alta latência e degradação de performance.

Como sei se meu servidor tem bufferbloat?

Testando ping durante transferências ou usando ferramentas como tc, flent ou iperf3

Qual o melhor Qdisc para Linux?

FQ_CoDel é eficiente e simples; Cake oferece recursos avançados de fairness e shaping.

Reduzir buffers da NIC ajuda?

Sim, reduzir RX/TX buffers evita que filas internas causem latência alta

O bufferbloat afeta todas as aplicações?

Principalmente aplicações sensíveis à latência, como VoIP, streaming, jogos e sistemas em tempo real.