- QUIC es un protocolo del que se esperaba un cambio revolucionario para mejorar el rendimiento de las aplicaciones web, pero su desempeño no cumple con lo esperado
- Este artículo analiza de forma sistemática el rendimiento de QUIC en redes de alta velocidad
Resumen
- En Internet de alta velocidad, la pila UDP+QUIC+HTTP/3 muestra hasta un 45.2% menos de tasa de transferencia de datos en comparación con TCP+TLS+HTTP/2
- La brecha de rendimiento entre QUIC y HTTP/2 se amplía a medida que aumenta el ancho de banda disponible
- Este problema se observa en clientes ligeros de transferencia de datos y en los principales navegadores web (Chrome, Edge, Firefox, Opera), en distintos hosts (escritorio, móvil) y en varias redes (banda ancha cableada, celular)
- Afecta no solo la transferencia de archivos, sino también diversas aplicaciones como el streaming de video (hasta un 9.8% menos de bitrate de video) y la navegación web
- Mediante un análisis riguroso de rastreo de paquetes y perfiles del kernel y del espacio de usuario, se identifican las causas raíz
- En particular, el overhead de procesamiento del lado receptor es alto debido al exceso de paquetes de datos y a los ACK de QUIC en espacio de usuario
- Se presentan recomendaciones concretas para mitigar los problemas de rendimiento observados
Causas raíz de la degradación del rendimiento
- Se produce un exceso de overhead de procesamiento de paquetes a nivel de kernel en el lado receptor
- QUIC no usa UDP GRO (Generic Receive Offload), por lo que debe procesar muchos más paquetes que TCP
- Esto se confirma por la cantidad mucho mayor de llamadas a la función
netif_receive_skb en QUIC
- También se produce un exceso de overhead de procesamiento de paquetes de QUIC en espacio de usuario
- Hay un gran costo al procesar la gran cantidad de paquetes entregados por el kernel
- La generación de ACK de QUIC en espacio de usuario también es una causa del overhead
Propuestas para mitigar la degradación del rendimiento
- Introducir UDP GRO en el lado receptor
- Reduce la cantidad de paquetes que debe procesar la pila UDP, disminuyendo el overhead en kernel y espacio de usuario
- Sin embargo, desplegar UDP GRO en diversos entornos de cliente puede no ser sencillo
- Mejorar soluciones de offloading como GSO/GRO para adaptarlas a QUIC
- Permitir el offloading incluso para trenes de paquetes UDP de distinto tamaño
- Agregar una configuración de pacing adecuada a GSO para evitar congestión de red
- Optimizar la lógica de QUIC en el lado receptor
- Retrasar el envío de ACK de QUIC para reducir el overhead de generación de respuestas
- Usar
recvmmsg para leer múltiples paquetes UDP a la vez y mejorar el rendimiento
- Usar descargas multihilo
- En archivos grandes, las descargas multihilo que aprovechan varios núcleos de CPU pueden mejorar el rendimiento de recepción
- Sin embargo, hay que considerar problemas de equidad
1 comentarios
Opiniones en Hacker News
syscalles compleja y la API base es demasiado lenta para paquetes de tamaño normal (unos 1500 bytes)syscallha aumentadouringes complejo, pero hace falta una API de nivel intermedio