Comencemos sin napi e interrumpamos la fusión.
El primer caso:livelock. Eso significa que cuando muchas interrupciones se publican continuamente desde el proceso del servidor, la CPU solo procesa las interrupciones y nunca permite que se ejecute un proceso a nivel de usuario y realmente atienda las solicitudes. Para ello creamos napi, que lo manejan en modo híbrido (interupt + polling). Cuando ocurra una interrupción, manéjela y realice un sondeo durante un tiempo para resolver las solicitudes posteriores.
El segundo caso:la optimización. Antes de generar una interrupción, un dispositivo primero espera un poco antes de entregar la interrupción a la CPU. Mientras espera, otras solicitudes pueden completarse pronto y, por lo tanto, se pueden fusionar varias interrupciones en una sola entrega de interrupción, lo que reduce la sobrecarga del procesamiento de interrupciones.
Para concluir, no hay conflicto entre ellos. Y son para diferentes casos, aunque napi también puede optimizar la sobrecarga de la CPU.
Ref:Principios de diseño de sistemas informáticos.
Veo NAPI como una forma de fusión de interrupciones. Creo que su pregunta puede deberse a un malentendido sobre NAPI. En primer lugar, las interrupciones están involucradas con NAPI. Además, las encuestas de NAPI en realidad no son "en vano". Recuerde, para NAPI, la idea es que el tráfico de alto rendimiento sea en ráfagas. NAPI solo "comienza" después de que ocurre una "interrupción de paquete recibido".
Aquí hay una descripción general rápida de cómo se supone que se debe usar NAPI:
El kernel inicia la interrupción de "paquete recibido", que detecta un controlador de dispositivo de red que usa NAPI. El controlador del dispositivo de red luego desactiva las interrupciones relacionadas con la recepción de paquetes y usando NAPI, le dice al subsistema de red de Linux que sondee el controlador del dispositivo. El controlador de dispositivo implementa la función de sondeo, se pasa al subsistema de red y contiene el controlador de paquetes del controlador de dispositivo. Una vez que se reciben suficientes paquetes o se alcanza un tiempo de espera, las interrupciones de recepción de paquetes se vuelven a habilitar y todo comienza de nuevo.
Por lo tanto, NAPI es básicamente solo una API centralizada en el subsistema de red de Linux para admitir la fusión de interrupciones para reducir las situaciones de bloqueo de recepción. NAPI brinda a los desarrolladores de controladores de dispositivos un marco limpio para la combinación de interrupciones. NAPI no se ejecuta todo el tiempo, sino que solo ocurre cuando el tráfico se recibe realmente, lo que lo convierte esencialmente en un esquema de fusión de interrupciones... Al menos en mi libro.
Nota :Todo esto estaba en el contexto de un controlador de dispositivo de red que usaba NAPI, pero de hecho, NAPI se puede usar para cualquier tipo de interrupción. Este es también uno de los beneficios de NAPI.
Si hay algún error en mi comprensión, ¡no dude en señalarlo!