La nueva API (también conocida como NAPI ) es una interfaz para utilizar técnicas de mitigación de interrupciones en dispositivos de red dentro del kernel de Linux . Este enfoque busca reducir la sobrecarga en la recepción de paquetes. La idea es posponer el procesamiento de los mensajes entrantes hasta que haya una cantidad suficiente para que valga la pena procesarlos todos a la vez.
Motivación
Un método sencillo para implementar un controlador de red consiste en interrumpir el núcleo mediante una solicitud de interrupción (IRQ) para cada paquete entrante. Sin embargo, atender las IRQ consume muchos recursos del procesador y tiempo. Por lo tanto, esta implementación sencilla puede resultar muy ineficiente en redes de alta velocidad, ya que interrumpe constantemente el núcleo con miles de paquetes por segundo. Como consecuencia, el rendimiento general del sistema y el ancho de banda de la red pueden verse afectados.
El sondeo es una alternativa al procesamiento basado en interrupciones. El núcleo puede comprobar periódicamente la llegada de paquetes de red sin interrupciones, lo que elimina la sobrecarga del procesamiento por interrupciones. Sin embargo, es importante establecer una frecuencia de sondeo óptima. Un sondeo demasiado frecuente desperdicia recursos de la CPU al comprobar repetidamente la llegada de paquetes que aún no han llegado. Por otro lado, un sondeo demasiado infrecuente introduce latencia al reducir la capacidad de respuesta del sistema a los paquetes entrantes, y puede provocar la pérdida de paquetes si el búfer de paquetes entrantes se llena antes de ser procesado.
Como solución de compromiso, el núcleo de Linux utiliza por defecto el modo controlado por interrupciones y solo cambia al modo de sondeo cuando el flujo de paquetes entrantes supera un cierto umbral, conocido como el "peso" de la interfaz de red.
Conductores que cumplen
Un controlador que utilice la interfaz NAPI funcionará de la siguiente manera:
- Las interrupciones por recepción de paquetes están deshabilitadas.
- El controlador proporciona un método de sondeo al núcleo. Este método recuperará todos los paquetes entrantes disponibles, ya sea en la tarjeta de red o en un anillo DMA , para que el núcleo los procese posteriormente.
- Cuando se le permite, el núcleo llama al método de sondeo del dispositivo para, posiblemente, procesar muchos paquetes a la vez.
Ventajas
- La carga generada por las interrupciones se reduce a pesar de que el núcleo tiene que realizar sondeos.
- Es menos probable que los paquetes se reordenen, mientras que, de lo contrario, el manejo de paquetes desordenados podría convertirse en un cuello de botella.
- En caso de que el kernel no pueda procesar todos los paquetes entrantes, no tiene que realizar ningún trabajo para descartarlos: simplemente se sobrescriben en el búfer circular de entrada de la tarjeta de red . Sin NAPI, el kernel tiene que procesar cada paquete entrante independientemente de si hay tiempo para atenderlo, lo que provoca sobrecarga del sistema .
Historia
NAPI fue un proyecto que duró más de tres años, impulsado por Alexey Kuznetsov, Jamal Hadi Salim y Robert Olsson. El intento inicial de incluir a NAPI encontró resistencia por parte de algunos miembros de la comunidad; sin embargo, David Miller trabajó arduamente para asegurar su inclusión.
Se realizaron numerosas pruebas en entornos reales en la red de la Universidad de Uppsala antes de su implementación. De hecho, www.slu.se fue el primer sistema operativo basado en NAPI en producción y aún hoy funciona con enrutadores Bifrost/Linux basados en NAPI. El generador de tráfico pktgen también surgió por esta época. Pktgen se utilizó ampliamente para probar escenarios NAPI no generados por tráfico real.
Referencias
Lecturas adicionales
- Jamal Hadi Salim; Robert Olsson; Alexey Kuznetsov (10 de noviembre de 2001). Más allá de softnet (PDF) . 5.ª Conferencia y Exhibición Anual de Linux (ALS '01) . págs. 165–172 . Recuperado el 6 de marzo de 2011 . El papel NAPI clásico.
- Jonathan Corbet (28-04-2003). "Adaptación de controladores: controladores de red" . LWN.net . Consultado el 06-03-2011 .
- Jonathan Corbet (18 de diciembre de 2006). "Reelaborando NAPI" . LWN.net . Consultado el 6 de marzo de 2011 .
- Jonathan Corbet; Alessandro Rubini; Greg Kroah-Hartman (febrero de 2005). «Capítulo 17: Controladores de red» (PDF) . Controladores de dispositivos Linux (3.ª ed.). O'Reilly Media. ISBN 978-0-596-00590-0. Consultado el 6 de marzo de 2011 .
Enlaces externos
- Trabajo inicial de NAPI
- Descripción de NAPI en Linux Foundation. Archivado el 11 de junio de 2016 en Wayback Machine.
- Descripción general de la red , 19 de noviembre de 2009, The Linux Foundation, por Rami Rosen (archivado del original el 30 de octubre de 2011).
- Interfaces del núcleo de Linux
- Características del kernel de Linux
- controladores Linux
- Ethernet