- O QUIC é um protocolo do qual se espera uma mudança revolucionária na melhora do desempenho de aplicações web, mas seu desempenho fica aquém do esperado
- Este artigo analisa de forma sistemática o desempenho do QUIC em redes de alta velocidade
Resumo
- Em internet de alta velocidade, a pilha UDP+QUIC+HTTP/3 apresenta uma redução de até 45,2% na taxa de transferência de dados em comparação com TCP+TLS+HTTP/2
- A diferença de desempenho entre QUIC e HTTP/2 aumenta à medida que a largura de banda disponível cresce
- Esse problema é observado em clientes leves de transferência de dados e nos principais navegadores web (Chrome, Edge, Firefox, Opera), em vários hosts (desktop, mobile) e em diferentes redes (banda larga cabeada, celular)
- Afeta não apenas a transferência de arquivos, mas também diversas aplicações, como streaming de vídeo (queda de até 9,8% no bitrate de vídeo) e navegação web
- As causas raiz foram identificadas por meio de análise rigorosa de rastreamento de pacotes e profiling em kernel e espaço de usuário
- Em especial, o overhead de processamento no lado do receptor é alto devido ao excesso de pacotes de dados e aos ACKs do QUIC em espaço de usuário
- São apresentadas recomendações concretas para mitigar os problemas de desempenho observados
Causas raiz da degradação de desempenho
- Overhead excessivo de processamento de pacotes no nível de kernel do lado do receptor
- O QUIC não usa UDP GRO (Generic Receive Offload), por isso precisa processar muito mais pacotes do que o TCP
- Isso foi confirmado pelo número muito maior de chamadas à função
netif_receive_skb no QUIC
- Overhead excessivo de processamento de pacotes do QUIC também no espaço de usuário
- Há um alto custo para processar a grande quantidade de pacotes repassados pelo kernel
- A geração de ACKs do QUIC no espaço de usuário também é uma causa de overhead
Propostas para mitigar a degradação de desempenho
- Introdução de UDP GRO no lado do receptor
- Reduz o número de pacotes que precisam ser processados na pilha UDP, diminuindo o overhead no kernel e no espaço de usuário
- No entanto, implantar UDP GRO em diferentes ambientes de cliente pode não ser simples
- Melhorar soluções de offloading como GSO/GRO para se adequarem ao QUIC
- Dar suporte ao offloading de trens de pacotes UDP com tamanhos diferentes
- Adicionar configuração adequada de pacing ao GSO para evitar congestionamento na rede
- Otimização da lógica QUIC no lado do receptor
- Atrasar o envio de ACKs do QUIC para reduzir o overhead de geração de respostas
- Usar
recvmmsg para ler vários pacotes UDP de uma vez e melhorar o desempenho
- Uso de downloads multithread
- No caso de arquivos grandes, downloads multithread com uso de vários núcleos de CPU podem melhorar o desempenho de recepção
- Porém, é preciso considerar questões de justiça
1 comentários
Comentários do Hacker News
syscallé complexa, e a API padrão é lenta demais para pacotes de tamanho comum (cerca de 1500 bytes)syscallaumentouuringé complexo, mas é necessária uma API de nível intermediário