Beginnen wir ohne Napi und Interrupt Coalescing.
Der erste Fall:Livelock. Das bedeutet, dass die CPU, wenn viele Interrupts kontinuierlich vom Serverprozess gesendet werden, nur Interrupts verarbeitet und niemals zulässt, dass ein Prozess auf Benutzerebene ausgeführt und die Anforderungen tatsächlich bedient wird. Dafür erstellen wir napi, die es im Hybridmodus handhaben (Interrupt + Polling). Wenn ein Interrupt auftritt, behandeln Sie ihn und führen Sie eine Weile eine Abfrage durch, um Folgeanforderungen zu lösen.
Der zweite Fall:Optimierung. Bevor ein Interrupt ausgelöst wird, wartet ein Gerät zunächst etwas, bevor es den Interrupt an die CPU weiterleitet. Während des Wartens können andere Anforderungen bald abgeschlossen werden, und somit können mehrere Interrupts zu einer einzigen Interrupt-Zustellung zusammengeführt werden, wodurch der Overhead der Interrupt-Verarbeitung gesenkt wird.
Zusammenfassend lässt sich sagen, dass es keinen Konflikt zwischen ihnen gibt. Und sie sind für verschiedene Fälle, obwohl napi auch den CPU-Overhead optimieren kann.
Ref:Prinzipien des Computersystemdesigns.
Ich betrachte NAPI als eine Form von Interrupt-Koaleszenz. Ich denke, Ihre Frage könnte auf ein Missverständnis über NAPI zurückzuführen sein. Zunächst einmal geht es bei NAPI um Interrupts. Außerdem ist die Umfrage von NAPI tatsächlich nicht "umsonst". Denken Sie daran, dass die Idee für NAPI darin besteht, dass Datenverkehr mit hohem Durchsatz stoßartig ist. NAPI "startet" nur, nachdem ein "Paketempfangs-Interrupt" auftritt.
Hier ist ein kurzer Überblick darüber, wie NAPI verwendet werden soll:
Der Kernel löst den Interrupt "Paket empfangen" aus, den ein Netzwerkgerätetreiber mit NAPI erkennt. Der Netzwerkgerätetreiber deaktiviert dann Interrupts im Zusammenhang mit dem Empfang von Paketen und unter Verwendung von NAPI weist das Linux-Netzwerksubsystem an, den Gerätetreiber abzufragen. Die Poll-Funktion wird vom Gerätetreiber implementiert und an das Netzwerksubsystem weitergegeben und enthält den Pakethandler des Gerätetreibers. Nachdem genügend Pakete empfangen wurden oder ein Timeout erreicht wurde, werden Paketempfangs-Interrupts wieder aktiviert und alles beginnt von vorne.
NAPI ist also im Grunde nur eine zentralisierte API im Linux-Netzwerksubsystem zur Unterstützung der Interrupt-Koaleszenz, um Livelock-Empfangssituationen zu reduzieren. NAPI bietet Entwicklern von Gerätetreibern ein sauberes Framework für Interrupt Coalescing. NAPI läuft nicht die ganze Zeit, sondern passiert nur, wenn tatsächlich Datenverkehr empfangen wird, was es im Wesentlichen zu einem Interrupt-Coalescing-Schema macht ... Zumindest meiner Meinung nach.
Hinweis :Dies alles im Zusammenhang mit einem Netzwerkgerätetreiber, der NAPI verwendet, aber tatsächlich kann NAPI für jede Art von Interrupt verwendet werden. Dies ist auch einer der Vorteile von NAPI.
Wenn ich Fehler in meinem Verständnis habe, können Sie mich gerne darauf hinweisen!