5 Punkte von GN⁺ 2024-07-29 | Noch keine Kommentare. | Auf WhatsApp teilen

Linux-Netzwerk-Stack

Empfang von Linux-Netzwerkpaketen

  • Auf dem Netzwerkgerät erzeugt die NIC (Network Interface Card) einen IRQ (Interrupt Request), um anzuzeigen, dass ein Paket eingetroffen ist
  • Der IRQ-Handler wird mit sehr hoher Priorität ausgeführt und blockiert die Erzeugung weiterer IRQs
  • Das softIRQ-System wird verwendet, um Arbeit außerhalb des IRQ-Kontexts des Gerätetreibers zu verarbeiten
  • Der softIRQ-Kernel-Thread wird erzeugt, und die Struktur softnet_data wird erstellt
  • Die NIC verwendet DMA (Direct Memory Access), damit Netzwerkdaten in den Ringpuffer im RAM geschrieben werden
  • Die NAPI-softIRQ-Polling-Schleife wird gestartet
  • Die Schleife net_rx_action prüft die NAPI-Struktur und übergibt Pakete an napi_gro_receive
  • Pakete werden über netif_receive_skb an den Protokoll-Stack weitergegeben

Netzwerkübertragung im Linux-Kernel

  • Wenn eine Anwendung eine Nachricht sendet, wird der TCP-Header erstellt und der L3-Handler aufgerufen
  • Das Paket wird fragmentiert, und die L2-Übertragungsfunktion wird aufgerufen
  • Der Treiber stellt das Paket im tx-Ringpuffer in die Queue
  • Die NIC holt das Paket aus dem RAM und überträgt es
  • Nach Abschluss der Übertragung erzeugt die NIC einen Hardware-IRQ
  • Der Treiber verarbeitet diesen IRQ und plant das NAPI-Polling-System ein

Tuning der Netzwerkleistung

Schnelles HOWTO

/proc/net/softnet_stat & /proc/net/sockstat
  • Die Datei /proc/net/softnet_stat liefert Statistiken für jeden CPU-Kern
  • Die Datei /proc/net/sockstat liefert Statistiken zur Socket-Nutzung
ss
  • ss ist ein Utility zur Untersuchung von Socket-Statistiken, mit dem sich die Speichernutzung prüfen lässt
netstat
  • netstat ist ein Kommandozeilen-Utility, das Statistiken zu Netzwerkverbindungen und zum Protokoll-Stack liefert
sysctl
  • Mit dem Befehl sysctl lassen sich System-/Netzwerkeinstellungen ändern
  • Durch Bearbeiten der Datei /etc/sysctl.conf können Werte dauerhaft geändert werden

NIC-Ringpuffer

  • Der NIC-Ringpuffer ist ein FIFO-Puffer fester Größe, der sich im RAM befindet
  • Um Burst-Verbindungen zuverlässig abzufangen, kann es nötig sein, diese Queue zu vergrößern

Zusammenfassung von GN⁺

  • Dieser Leitfaden erklärt detailliert, wie der Linux-Netzwerk-Stack funktioniert, und stellt verschiedene Methoden zur Optimierung der Netzwerkleistung vor
  • Es ist wichtig, die Rolle von IRQ und softIRQ beim Empfang und bei der Übertragung von Netzwerkpaketen zu verstehen
  • Mit dem Befehl sysctl lassen sich Systemeinstellungen anpassen, und durch das Ändern der Größe des NIC-Ringpuffers kann die Leistung verbessert werden
  • Das Tuning der Netzwerkleistung hängt von den spezifischen Anforderungen des Systems ab, daher ist es notwendig, verschiedene Einstellungen auszuprobieren

Noch keine Kommentare.

Noch keine Kommentare.