La nueva API (también conocida como NAPI ) es una interfaz para utilizar técnicas de mitigación de interrupciones para dispositivos de red en el kernel de Linux . Este enfoque está destinado a reducir la sobrecarga de la recepción de paquetes. La idea es posponer el manejo de los mensajes entrantes hasta que haya una cantidad suficiente de ellos para que valga la pena manejarlos todos a la vez.
Motivación
Un método sencillo de implementar un controlador de red es interrumpir el kernel emitiendo una solicitud de interrupción (IRQ) para todos y cada uno de los paquetes entrantes. Sin embargo, el mantenimiento de las IRQ es costoso en términos de tiempo y recursos del procesador. Por lo tanto, la implementación sencilla puede ser muy ineficiente en redes de alta velocidad, interrumpiendo constantemente el kernel con miles de paquetes por segundo. Como resultado, el rendimiento general del sistema y el rendimiento de la red pueden verse afectados.
El sondeo es una alternativa al procesamiento basado en interrupciones. El kernel puede verificar periódicamente la llegada de paquetes de red entrantes sin ser interrumpido, lo que elimina la sobrecarga del procesamiento de interrupciones. Sin embargo, es importante establecer una frecuencia de sondeo óptima. El sondeo demasiado frecuente desperdicia recursos de la CPU al verificar repetidamente los paquetes entrantes que aún no han llegado. Por otro lado, el sondeo con poca frecuencia introduce latencia al reducir la reactividad del sistema a los paquetes entrantes, y puede resultar en la pérdida de paquetes si el búfer de paquetes entrantes se llena antes de ser procesado.
Como compromiso, el kernel de Linux usa el modo controlado por interrupciones por defecto y solo cambia al modo de sondeo cuando el flujo de paquetes entrantes excede un cierto umbral, conocido como el "peso" de la interfaz de red.
Controladores compatibles
Un controlador que utilice la interfaz NAPI funcionará de la siguiente manera:
- Las interrupciones de recepción de paquetes están deshabilitadas.
- El controlador proporciona un método de encuesta al kernel. Ese método buscará todos los paquetes entrantes disponibles, en la tarjeta de red o en un anillo DMA , para que luego sean manejados por el kernel.
- Cuando se le permite, el kernel llama al método de encuesta del dispositivo para posiblemente manejar muchos paquetes a la vez.
Ventajas
- La carga inducida por las interrupciones se reduce aunque el kernel tenga que sondear.
- Es menos probable que los paquetes se vuelvan a pedir, mientras que el manejo de paquetes fuera de orden podría ser un cuello de botella de lo contrario. [ cita requerida ]
- En caso de que el kernel no pueda manejar todos los paquetes entrantes, el kernel no tiene que hacer ningún trabajo para eliminarlos: simplemente se sobrescriben en el búfer de anillo entrante de la tarjeta de red . Sin NAPI, el kernel tiene que manejar todos los paquetes entrantes independientemente de si hay tiempo para repararlos, lo que conduce a una falla .
Historia
NAPI fue un esfuerzo de más de tres años de Alexey Kuznetsov, Jamal Hadi Salim y Robert Olsson. El esfuerzo inicial para incluir NAPI encontró resistencia por parte de algunos miembros de la comunidad, sin embargo, David Miller trabajó duro para asegurar la inclusión de NAPI.
Se realizaron muchas pruebas del mundo real en la red universitaria de Uppsala antes de la inclusión. De hecho, www.slu.se fue el primer sistema operativo basado en NAPI de producción y todavía funciona con enrutadores Bifrost / Linux basados en NAPI. El generador de tráfico pktgen también nació en esta época. Pktgen se utilizó ampliamente para probar escenarios NAPI no inducidos por el tráfico del mundo real.
Referencias
Otras lecturas
- Jamal Hadi Salim; Robert Olsson; Alexey Kuznetsov (10 de noviembre de 2001). Más allá de softnet (PDF) . Quinta Conferencia y Exhibición Anual de Linux (ALS '01) . págs. 165-172 . Consultado el 6 de marzo de 2011 . El artículo clásico de NAPI.
- Jonathan Corbet (28 de abril de 2003). "Portabilidad del controlador: controladores de red" . LWN.net . Consultado el 6 de marzo de 2011 .
- Jonathan Corbet (18 de diciembre de 2006). "Reelaboración de 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.a ed.). O'Reilly Media. ISBN 978-0-596-00590-0. Consultado el 6 de marzo de 2011 .
enlaces externos
- Trabajo inicial de NAPI [ enlace muerto ]
- Descripción de NAPI en Linux Foundation
- Descripción general de la red , 19 de noviembre de 2009, The Linux Foundation, por Rami Rosen (archivado desde el original el 30 de octubre de 2011)