5 puntos por GN⁺ 2024-07-29 | Aún no hay comentarios. | Compartir por WhatsApp

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.

Aún no hay comentarios.