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.