¿Cómo funciona GRO (descarga de recepción genérica) en NIC más avanzadas?


14

Estoy interesado en respuestas particulares:

  1. ¿La NIC con GRO edita / crea TCP ACK o cualquier otro paquete (o esta característica es transparente para las pilas TCP del receptor / emisor)?
  2. ¿Debería haber un tiempo de espera / evento cuando NIC debe pasar los "segmentos pegados" a la pila TCP? ¿Qué son?
  3. En la configuración de reenvío de paquetes, ¿la función GRO también intenta leer los ACK del receptor (vea a continuación por qué pregunto esto)?
  4. Cualquier fuente que explique GRO y también otras características de descarga de NIC (TSO, LSO ...) mejor que las páginas de manual de wikipedia y Linux sería realmente apreciada.

Más detalles:

Estoy solucionando un problema de rendimiento con una implementación de IPSec. El problema es que el ancho de banda disponible no se distribuye uniformemente en los 4 túneles VPN (distribuidos aproximadamente como 200MBps / 200MBps / 1MBps / 1MBps; cada túnel VPN encapsula una única conexión TCP). En PCAP de vez en cuando veo que el servidor web está inactivo durante unos 2 segundos (esperando ACK). La descarga se reanuda cuando el servidor web retransmite segmentos no reconocidos.

Mi opinión interna de PCAP es que la función NIC GRO pega paquetes juntos, pero a veces no los pasa a la pila TCP de manera oportuna y eso está causando los problemas.

Como este servidor VPN no tiene interfaces que terminen las conexiones TCP sino que solo reenvían paquetes. Luego intenté desactivar GRO y luego observé que el tráfico se distribuía de manera uniforme en todos los túneles. Además, cuando el escalado de la ventana TCP está deshabilitado en el servidor web, el ancho de banda también se distribuye incluso con GRO habilitado (es por eso que tuve la pregunta # 3).

Estoy usando 2.6.32-27 Linux en el servidor Ubuntu 10.04 (64 bits). NIC es Intel 82571EB. Todas las interfaces (cliente HTTP, cliente VPN, servidor VPN, servidor web) están conectadas directamente en cadena con cables Ethernet de 1 Gbit.

Respuestas:


15

Este artículo me pareció increíblemente útil: JLS2009: descarga de recepción genérica . Da una gran visión general de cómo funciona GRO.

  1. Algunos adaptadores pueden hacerlo, pero los controladores asociados también deben tenerlo en cuenta. Además, los propios controladores pueden hacer esto en el software. Como esto sucede antes de ingresar la pila TCP / IP del kernel, para cuando la pila TCP / IP del espacio del kernel se ingrese por completo, los paquetes se han vuelto a secuenciar.
  2. El tiempo de espera está definido por la especificación GRO como un 'tick' TCP / IP (incremento del campo Time Stamp), que es un número muy pequeño pero en redes rápidas aún se pueden recibir múltiples paquetes.
  3. GRO entrará en juego en el lado receptor del reenviador, y de hecho GRO fue creado para que el método LRO más codicioso dejara de arruinar paquetes en reenviadores.
  4. Ese artículo al que me vinculé anteriormente realmente ayuda.

Ethtool puede habilitar / deshabilitar GRO en interfaces específicas. Depende de la versión.


1
Actualicé mi pregunta. Parece que respondió # 1 en el contexto de todas las funciones de descarga (IMHO GRO por sí solo no genera ACK, solo "pega" todos los paquetes para una marca TCP / IP y luego los maneja al sistema operativo). ¡Gracias!
user389238
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.