linux-kernel-advanced networking performance tuning tcp kernel sysctl

TCP/IP Tuning: Kernel Network Stack (Artikel 367)

Maximierung des Netzwerkdurchsatzes durch Kernel-Tuning. Erfahren Sie alles über TCP-Puffergrößen, Backlog-Queues und die Optimierung des Netzwerk-Stacks für High-Traffic-Workloads.

# Network Stack Tuning: Die Autobahn für Datenbits

TL;DR / Management Summary Ein Standard-Kernel ist für das heimische WLAN optimiert, nicht für 100Gbit-Rechenzentren oder Webserver mit Millionen parallelen Verbindungen. Ein Senior Admin nutzt sysctl, um den TCP/IP-Stack zu tunen: Er vergrößert die Send- und Receive-Puffer, optimiert die Backlog-Queues, um Paketverluste bei Lastspitzen zu vermeiden, und aktiviert moderne Algorithmen wie BBR (Bottleneck Bandwidth and RTT). Dieses Modul zeigt, wie Sie den Kernel zur Höchstleistung peitschen.


# 1. Einführung & Architektur

Der Weg durch den Stack.

Jedes Paket durchläuft im Kernel mehrere Warteschlangen (Queues). Wenn diese voll sind, werden Pakete einfach verworfen (Packet Drop), was die Applikation extrem verlangsamt.

# Die Netzwerk-Pipeline (Mermaid)

graph LR
    A[Physical Link] --> B[NIC RX Queue]
    B --> C[SoftIRQ / NAPI]
    C --> D[IP Layer]
    D --> E[TCP/UDP Layer]
    E --> F[Socket Receive Buffer]
    F --> G[Application: read]
    subgraph "Tuning Hevers"
        H[net.core.netdev_max_backlog] --> C
        I[net.core.rmem_max] --> F
        J[net.ipv4.tcp_rmem] --> E
    end

# 2. Core-Buffer Tuning

Mehr Platz für Pakete.

Wenn der Server bei Traffic-Spitzen “schluckauf” hat, sind oft die Puffer zu klein.

# 1. Globale Speicher-Limits

Datei: /etc/sysctl.d/99-network-tuning.conf

# Max. Empfangspuffer (16MB)
net.core.rmem_max = 16777216
# Max. Sendepuffer (16MB)
net.core.wmem_max = 16777216

# 2. TCP Autotuning

Der Kernel kann den Speicher pro Verbindung dynamisch anpassen.

# min, default, max
net.ipv4.tcp_rmem = 4096 87380 16777216
net.ipv4.tcp_wmem = 4096 65536 16777216

# 3. High-Concurrency: Sockets & Ports

Tausende User gleichzeitig handhaben.

# Ephemeral Ports erweitern

Standardmäßig reserviert Linux nur ca. 28.000 Ports für ausgehende Verbindungen.

net.ipv4.ip_local_port_range = 1024 65535

# TCP Fast Open (TFO)

Beschleunigt den Verbindungsaufbau, indem Daten bereits im SYN-Paket gesendet werden.

net.ipv4.tcp_fastopen = 3

# 4. Day-2 Operations: BBR Congestion Control

Der Google-Algorithmus.

BBR ist ein moderner Algorithmus zur Stauregelung, der massiv höhere Durchsatzraten bei instabilen oder weiten Verbindungen (High BDP) erzielt.

# BBR aktivieren

# Erfordert Kernel 4.9+
echo "net.core.default_qdisc = fq" | sudo tee -a /etc/sysctl.conf
echo "net.ipv4.tcp_congestion_control = bbr" | sudo tee -a /etc/sysctl.conf
sudo sysctl -p

# 5. Troubleshooting & “War Stories”

Wenn das Tuning das Netz bricht.

# Story 1: “Der Packet-Drop trotz Idle-CPU”

Symptom: Monitoring meldet Paketverluste, aber die CPU-Last ist bei 5%. Ursache: net.core.netdev_max_backlog ist zu klein. Die Netzwerkkarte liefert Pakete schneller an, als der Kernel sie in die IP-Ebene schieben kann. Lösung: Erhöhen Sie den Backlog auf 5000 oder mehr: net.core.netdev_max_backlog = 5000.

# Story 2: “Time-Wait Bucket Full”

Symptom: In den Logs steht TCP: time wait bucket table overflow. Ursache: Zu viele beendete Verbindungen hängen im TIME_WAIT Status (Artikel 272). Lösung: Aktivieren Sie net.ipv4.tcp_tw_reuse = 1 und erhöhen Sie net.ipv4.tcp_max_tw_buckets. Deaktivieren Sie jedoch niemals tcp_tw_recycle (falls vorhanden), da dies Probleme mit NAT-Clients verursacht.


# 6. Fazit & Empfehlung

  • Vorsicht: Ändern Sie niemals alle Werte gleichzeitig. Testen Sie jeden Parameter einzeln.
  • Wartung: Dokumentieren Sie die Standardwerte vor der Änderung (sysctl -a > defaults.txt).
  • Wahl: Für Standard-Server reicht der Default. Nutzen Sie Tuning nur für Load-Balancer, Proxy-Server und Datenbanken.

# Anhang: Cheatsheet

Parameter Empfehlung Zweck
net.ipv4.tcp_window_scaling 1 Pflicht für > 100Mbit
net.ipv4.tcp_slow_start_after_idle 0 Hält Verbindung schnell
net.ipv4.tcp_mtu_probing 1 Hilft bei MTU-Problemen
net.core.somaxconn 4096 Max. wartende Verbindungen
net.ipv4.tcp_max_syn_backlog 8192 Schutz vor SYN-Floods
net.ipv4.tcp_fin_timeout 15 Schnelleres Aufräumen
net.ipv4.tcp_keepalive_time 600 Kürzere Zombie-Connects
Befehl Wirkung
sysctl -p Lädt /etc/sysctl.conf
sysctl -w var=val Setzt Wert temporär
ss -ti Zeigt RTT & MSS pro Slot