Avaliando o Desempenho do Protocolo QUIC em Condições de Alta Velocidade
Uma olhada nas melhorias de desempenho do QUIC em relação aos protocolos tradicionais.
― 5 min ler
Índice
QUIC é um protocolo novo que foi criado pra melhorar a performance do tráfego na web. Ele tem como objetivo fazer as conexões mais rápidas e seguras em comparação com protocolos tradicionais como TCP e TLS. A ideia é acelerar a transferência de dados pela internet. QUIC usa UDP como base, permitindo que os dados sejam enviados de um jeito que reduz atrasos e melhora a eficiência.
QUIC já vem com criptografia embutida, o que significa que os dados estão seguros desde o começo. Ele também suporta múltiplos fluxos de dados numa única conexão, o que melhora a performance geral. Este artigo fala sobre como diferentes implementações de QUIC se saem, especialmente em condições de alta velocidade.
Visão Geral do Protocolo
QUIC foi desenvolvido pra resolver problemas com protocolos existentes como TCP, que pode ser lento pra estabelecer conexões por causa de handshakes e reconhecimentos complexos. QUIC simplifica esse processo juntando a configuração da conexão e a criptografia em menos etapas. Isso reduz o tempo necessário pra começar a comunicação.
O protocolo é projetado pra ser confiável e garantir que os dados cheguem na ordem correta. No entanto, ele também permite enviar dados sem esperar que mensagens anteriores sejam reconhecidas, o que pode acelerar a transferência de dados. QUIC consegue isso através de mecanismos de reconhecimento únicos que ajudam a gerenciar o fluxo de dados de forma mais eficiente.
Testes de Performance
Pra avaliar a performance do QUIC, pesquisadores usaram diferentes servidores e clientes com várias versões do QUIC. Eles focaram em como essas implementações se saíram em conexões de alta velocidade, observando quantos dados podiam ser transferidos com sucesso em um tempo determinado.
Os testes foram feitos em um link de 10G, que é muito mais rápido que conexões de internet padrão em casa. Essa configuração ajudou a identificar os limites e forças de cada implementação em condições ideais.
Goodput
Resultados: Medição deGoodput é uma medida de quanta informação útil pode ser transmitida por uma conexão de rede. Ele leva em conta os dados que são realmente entregues ao usuário final, excluindo qualquer sobrecarga dos protocolos. As medições de goodput das implementações do QUIC mostraram uma gama ampla de performance.
Algumas implementações conseguiram taxas de goodput muito altas, enquanto outras tiveram um desempenho ruim. Essas diferenças podem ser atribuídas a vários fatores, incluindo a linguagem de programação usada, a forma como os dados são tratados e as otimizações feitas em cada implementação.
Tamanhos dos Buffers
Uma descoberta significativa foi o impacto dos tamanhos dos buffers na performance. Buffers são áreas de armazenamento temporário que guardam dados antes de serem enviados ou depois de serem recebidos. Nos testes, os Tamanhos de Buffer padrão eram muito pequenos, levando à perda de pacotes. Quando os tamanhos de buffer foram aumentados, o goodput melhorou significativamente.
Buffers maiores ajudam a evitar que os dados sejam perdidos, o que é crucial pra manter uma conexão estável, especialmente em altas velocidades. Foi recomendado aumentar o tamanho do buffer padrão pra melhorar a performance do QUIC em aplicações do mundo real.
Criptografia e Processamento
QUIC usa métodos de criptografia pra proteger os dados. Os testes avaliaram dois algoritmos de criptografia principais: AES e ChaCha20. Os resultados indicaram que ambos tiveram desempenhos similares em termos de goodput. No entanto, usar aceleração de hardware pra AES melhorou bastante a performance.
Pra implementações sem suporte de hardware pra AES, a performance caiu consideravelmente. A escolha do método de criptografia impacta diretamente o goodput, com a aceleração de hardware dando uma vantagem clara.
Diferenças de Implementação
Diferentes implementações do QUIC mostraram níveis de performance variados. Algumas bibliotecas são escritas em linguagens de alto nível como Python, que geralmente levam a uma performance mais lenta em comparação com aquelas escritas em linguagens de baixo nível como C ou Rust. As linguagens de baixo nível permitem um manuseio mais eficiente dos dados e melhores otimizações.
As implementações que tiveram o melhor desempenho nos testes foram aquelas que foram cuidadosamente otimizadas pra performance. Elas usaram técnicas e estratégias de programação avançadas focadas em reduzir a sobrecarga e maximizar as taxas de transferência de dados.
Impacto das Interfaces de Rede
O cartão de interface de rede (NIC) desempenha um papel crucial na forma como os dados são transmitidos. Otimizações no nível do NIC, como operações de descarregamento, podem melhorar bastante a performance. No entanto, as atuais implementações do QUIC não estavam aproveitando essas funcionalidades da melhor forma possível.
Técnicas de descarregamento do NIC, que permitem que o NIC cuide de algumas tarefas de rede normalmente feitas pela CPU, foram testadas, mas não mostraram benefícios significativos de performance para o QUIC. Isso contrasta fortemente com o TCP, onde tais técnicas provaram ser benéficas.
Conclusão
A performance das implementações do protocolo QUIC varia bastante, influenciada por fatores como tamanhos de buffer, linguagem de programação, métodos de criptografia e otimizações do NIC. Pra garantir que o QUIC consiga lidar bem com conexões de alta velocidade, ajustes como aumentar os tamanhos dos buffers e usar aceleração de hardware pra criptografia são essenciais.
É importante que desenvolvedores e pesquisadores foquem nessas questões ao criar ou otimizar implementações do QUIC. Trabalhos futuros devem explorar mais otimizações e a aplicação de técnicas de descarregamento do NIC pra melhorar a performance do QUIC em diferentes ambientes.
Título: QUIC on the Highway: Evaluating Performance on High-rate Links
Resumo: QUIC is a new protocol standardized in 2021 designed to improve on the widely used TCP / TLS stack. The main goal is to speed up web traffic via HTTP, but it is also used in other areas like tunneling. Based on UDP it offers features like reliable in-order delivery, flow and congestion control, streambased multiplexing, and always-on encryption using TLS 1.3. Other than with TCP, QUIC implements all these features in user space, only requiring kernel interaction for UDP. While running in user space provides more flexibility, it profits less from efficiency and optimization within the kernel. Multiple implementations exist, differing in programming language, architecture, and design choices. This paper presents an extension to the QUIC Interop Runner, a framework for testing interoperability of QUIC implementations. Our contribution enables reproducible QUIC benchmarks on dedicated hardware. We provide baseline results on 10G links, including multiple implementations, evaluate how OS features like buffer sizes and NIC offloading impact QUIC performance, and show which data rates can be achieved with QUIC compared to TCP. Our results show that QUIC performance varies widely between client and server implementations from 90 Mbit/s to 4900 Mbit/s. We show that the OS generally sets the default buffer size too small, which should be increased by at least an order of magnitude based on our findings. Furthermore, QUIC benefits less from NIC offloading and AES NI hardware acceleration while both features improve the goodput of TCP to around 8000 Mbit/s. Our framework can be applied to evaluate the effects of future improvements to the protocol or the OS.
Autores: Benedikt Jaeger, Johannes Zirngibl, Marcel Kempf, Kevin Ploch, Georg Carle
Última atualização: 2023-09-28 00:00:00
Idioma: English
Fonte URL: https://arxiv.org/abs/2309.16395
Fonte PDF: https://arxiv.org/pdf/2309.16395
Licença: https://creativecommons.org/licenses/by-nc-sa/4.0/
Alterações: Este resumo foi elaborado com a assistência da AI e pode conter imprecisões. Para obter informações exactas, consulte os documentos originais ligados aqui.
Obrigado ao arxiv pela utilização da sua interoperabilidade de acesso aberto.