SoftIRQs und schnelle Paketverarbeitung im Linux-Netzwerk

SoftIRQs und schnelle Paketverarbeitung im Linux-Netzwerk

Ich habe über die Leistungsoptimierung von Linux gelesen, um die schnellsten Paketverarbeitungszeiten beim Empfang von Finanzmarktdaten zu erreichen. Ich sehe, dass die Netzwerkkarte, wenn sie ein Paket empfängt, es über DMA in den Speicher legt und dann einen HardIRQ auslöst – der wiederum einige NAPI-Einstellungen festlegt und einen SoftIRQ auslöst. Der SoftIRQ verwendet dann NAPI/Gerätetreiber, um Daten über Polling aus den RX-Puffern zu lesen, aber dies wird nur für eine begrenzte Zeit ausgeführt (net.core.netdev_budget, standardmäßig auf 300 Pakete eingestellt). Dies bezieht sich auf einen echten Server mit Ubuntu und einer Solarflare-Netzwerkkarte. Meine Fragen sind unten aufgeführt:

  1. Wenn jeder HardIRQ einen SoftIRQ auslöst und der Gerätetreiber mehrere Pakete auf einmal liest (netdev_budget), was passiert dann mit den SoftIRQs, die von jedem der Pakete ausgelöst werden, die auf einmal aus dem RX-Puffer geleert wurden (jedes empfangene Paket löst einen Hard- und dann einen Soft-IRQ aus)? Werden diese in die Warteschlange gestellt?

  2. Warum verwendet NAPI Polling, um den RX-Puffer zu leeren? Das System hat gerade einen SoftIRQ generiert und liest den RX-Puffer. Warum dann das Polling?

  3. Vermutlich wird das Leeren des RX_Buffer über den Softirq nur von einem bestimmten RX_Buffer und nicht über mehrere RX_Buffer hinweg erfolgen? Wenn ja, kann eine Erhöhung des Netdev_Budgets die Verarbeitung/Leeren anderer RX_Buffer verzögern? Oder kann dies abgemildert werden, indem verschiedenen Kernen verschiedene RX_Buffer zugewiesen werden?

  4. Es gibt Einstellungen, die sicherstellen, dass HardIRQs sofort ausgelöst und verarbeitet werden. SoftIRQs können jedoch zu einem späteren Zeitpunkt verarbeitet werden. Gibt es Einstellungen/Konfigurationen, die sicherstellen, dass SoftIRQs im Zusammenhang mit Netzwerk-RX ebenfalls mit höchster Priorität und ohne Verzögerungen verarbeitet werden?

Antwort1

Zur Antwort auf die vierte Frage:

Ja, Netzwerk-NIC-Karten sind die Peripheriegeräte, die mit Softirq verknüpft sind, da Softirq in allen Mechanismen der unteren Hälfte die höchste Priorität hat.

Um die Verzögerung zu verhindern, die anschließend zum Paketverlust führen könnte, werden Softirqs verwendet.

Der NAPI-Mechanismus ist grundsätzlich auch dazu gedacht, Pakete zu verarbeiten, die mit einer Geschwindigkeit eintreffen, die der Kernel aus bestimmten Gründen mit dem Interrupt-Mechanismus nicht verarbeiten kann.

Ich würde vorschlagen, einfach das Kapitel zu Netzwerktreibern in LDD3 durchzugehen.Hierist der Link, der hierfür hilfreich sein kann.

verwandte Informationen