Stack de networking de Linux
Recepción de paquetes de red en Linux
- En el dispositivo de red, la NIC (Network Interface Card) genera una IRQ (Interrupt Request) para avisar que llegó un paquete
- El manejador de IRQ se ejecuta con una prioridad muy alta y bloquea la generación de IRQ adicionales
- El sistema softIRQ se usa para procesar trabajo fuera del contexto de IRQ del controlador del dispositivo
- Se crea el hilo del kernel de softIRQ y se crea la estructura
softnet_data
- La NIC usa DMA (Direct Memory Access) para que los datos de red se escriban en el ring buffer de la RAM
- Se inicia el bucle de sondeo softIRQ de NAPI
- El bucle
net_rx_action revisa la estructura NAPI y entrega los paquetes a napi_gro_receive
- Los paquetes se entregan al stack de protocolos a través de
netif_receive_skb
Transmisión de red en el kernel de Linux
- Cuando la aplicación envía un mensaje, se escribe el encabezado TCP y se llama al manejador de L3
- El paquete se fragmenta y se llama a la función de transmisión de L2
- El controlador encola el paquete en el ring buffer
tx
- La NIC toma el paquete desde la RAM y lo transmite
- Cuando termina la transmisión, la NIC genera una IRQ de hardware
- El controlador procesa esta IRQ y programa el sistema de polling de NAPI
Ajuste de rendimiento de red
HOWTO rápido
/proc/net/softnet_stat & /proc/net/sockstat
- El archivo
/proc/net/softnet_stat proporciona estadísticas de cada núcleo de CPU
- El archivo
/proc/net/sockstat proporciona estadísticas de uso de sockets
ss
ss es una utilidad para inspeccionar estadísticas de sockets y permite revisar el uso de memoria
netstat
netstat es una utilidad de línea de comandos que proporciona conexiones de red y estadísticas del stack de protocolos
sysctl
- Se puede usar el comando
sysctl para cambiar la configuración del sistema/red
- Se pueden cambiar valores de forma permanente editando el archivo
/etc/sysctl.conf
Ring buffer de la NIC
- El ring buffer de la NIC es un búfer FIFO de tamaño fijo ubicado en la RAM
- Puede ser necesario aumentar esta cola para absorber mejor conexiones en ráfaga
Resumen de GN⁺
- Esta guía explica en detalle cómo funciona el stack de red de Linux y presenta varios métodos para optimizar el rendimiento de red
- Es importante entender el papel de las IRQ y las softIRQ en el proceso de recepción y transmisión de paquetes de red
- Se puede mejorar el rendimiento ajustando la configuración del sistema con el comando
sysctl y modificando el tamaño del ring buffer de la NIC
- El ajuste de rendimiento de red puede variar según las necesidades específicas del sistema, por lo que es necesario experimentar con distintas configuraciones
Aún no hay comentarios.