Wer die Leistung seiner Linux-Systeme optimieren will, muss eine Reihe von Komponenten und Parametern im Auge behalten. Dieser Artikel beschreibt einige Techniken zur Leistungsoptimierung durch das Tuning von TCP/IP, das Reduzieren von Latenzzeiten und die Konfiguration von NUMA-fähigen Systemen. Außerdem gehen wir auf eine vorausschauende CPU-Planung und Speicherverwaltung ein.
In modernen IT-Umgebungen stellt Linux den Eckpfeiler der meisten Unternehmensinfrastrukturen dar. Ganz gleich, ob es um das Hosting kritischer Cloudanwendungen, die Durchführung von Big-Data-Analysen oder die Verwaltung netzwerkintensiver Arbeitslasten geht – Linux ist aufgrund seiner Flexibilität, Leistung und Open-Source-Natur meist die Plattform der Wahl.
Allerdings ist die Standardkonfiguration von Linux, insbesondere auf Kernelebene, nicht immer für hohe Anforderungen optimiert. Um die Möglichkeiten des Betriebssystems voll ausschöpfen zu können, sollten sich Systemadministratoren mit dem Kernel-Tuning befassen, also mit der Anpassung wichtiger Kernelparameter, um bestimmte Leistungsziele zu erreichen. Im Folgenden beschreiben wir einige der Tools und Techniken, mit denen sich eine bessere Leistung Ihrer Linux-Systeme erreichen lässt.
Ganz gleich, ob Sie Webserver mit hohem Datendurchsatz, datenintensive Anwendungen oder Systeme mit geringer Latenz verwalten, das Wissen um Profiling, Benchmarking und die Interpretation von Leistungsdaten ist eine wichtige Fähigkeit. Um die Feinheiten der Linux-Kernelleistung zu verstehen, sind präzise Tools erforderlich. Wir konzentrieren uns zunächst auf drei wesentliche Dienstprogramme: perf, ftrace und bpftrace. Jedes dieser Werkzeuge dient einem bestimmten Zweck und hilft bei der Erfassung von Schlüsseldaten – von High-Level-Leistungsmetriken bis hin zu tiefem Kernel-Tracing.
In modernen IT-Umgebungen stellt Linux den Eckpfeiler der meisten Unternehmensinfrastrukturen dar. Ganz gleich, ob es um das Hosting kritischer Cloudanwendungen, die Durchführung von Big-Data-Analysen oder die Verwaltung netzwerkintensiver Arbeitslasten geht – Linux ist aufgrund seiner Flexibilität, Leistung und Open-Source-Natur meist die Plattform der Wahl.
Allerdings ist die Standardkonfiguration von Linux, insbesondere auf Kernelebene, nicht immer für hohe Anforderungen optimiert. Um die Möglichkeiten des Betriebssystems voll ausschöpfen zu können, sollten sich Systemadministratoren mit dem Kernel-Tuning befassen, also mit der Anpassung wichtiger Kernelparameter, um bestimmte Leistungsziele zu erreichen. Im Folgenden beschreiben wir einige der Tools und Techniken, mit denen sich eine bessere Leistung Ihrer Linux-Systeme erreichen lässt.
Ganz gleich, ob Sie Webserver mit hohem Datendurchsatz, datenintensive Anwendungen oder Systeme mit geringer Latenz verwalten, das Wissen um Profiling, Benchmarking und die Interpretation von Leistungsdaten ist eine wichtige Fähigkeit. Um die Feinheiten der Linux-Kernelleistung zu verstehen, sind präzise Tools erforderlich. Wir konzentrieren uns zunächst auf drei wesentliche Dienstprogramme: perf, ftrace und bpftrace. Jedes dieser Werkzeuge dient einem bestimmten Zweck und hilft bei der Erfassung von Schlüsseldaten – von High-Level-Leistungsmetriken bis hin zu tiefem Kernel-Tracing.
CPU-Auslastung en détail mit perf
Perf ist das Schweizer Taschenmesser unter den Linux-Leistungstools. Es wurde für Entwickler und Systemadministratoren gleichermaßen entwickelt und liefert detaillierte Statistiken zur CPU-Auslastung, Speicherzuweisung, E/A und vieles mehr. Indem es die Kernelzähler anzapft, zeigt perf, welche Teile Ihres Systems am meisten belastet werden.
Beginnen wir mit einem Beispiel. Angenommen, Sie bemerken eine Verlangsamung des Systems und vermuten einen CPU-Engpass. Mit dem folgenden Befehl erfassen Sie schnell CPU-Daten und analysieren diese:
sudo perf record -F 99 -a --call-graph dwarf sleep 30
Das Kommando weist perf an, das System mit einer Frequenz von 99 Hz (-F 99) abzutasten und 30 Sekunden lang ein Profil aller CPUs (-a) zu erstellen. Das Flag "--call-graph dwarf" ermöglicht die Aufzeichnung von Funktionsaufrufen, was Ihnen hilft, die "heißesten" Pfade in der Ausführung der Anwendung zu identifizieren. Sobald die Daten aufgezeichnet sind, analysieren Sie diese mit
sudo perf report --stdio
Der erstellte Bericht (Bild 1) gibt Aufschluss darüber, wo die CPU-Zyklen verbraucht werden. Fortgeschrittene Benutzer erhalten mit dem Flamegraph-ähnlichen Aufrufdiagramm tiefe Einblicke in die Ausführung auf Funktionsebene, die genau zeigen, wo die Zeit im Code verbracht wird. Dies ist besonders nützlich, um Funktionen zu identifizieren, die unnötig CPU-Zyklen verbrauchen, sodass IT-Verantwortliche besonders beanspruchte Pfade optimieren und die Systemlast reduzieren können.
Bild 1: Eine Untersuchung der CPU-Zyklen mit perf beleuchtet die Prozessoraktivitäten im Detail.
Ein weiteres Beispiel: Sie verwalten eine stark frequentierte Webanwendung und vermuten, dass einige Ihrer Dienste die CPU-Ressourcen nicht effizient nutzen. Mithilfe von perf können Sie ein Profil des Systems erstellen, um wichtige Metriken wie die Anzahl der Anweisungen, Cache-Fehlversuche und Verzweigungsfehlprognosen zu erfassen:
sudo perf stat -e cycles,instructions,cache-misses,branches,branch-misses ./web_service
Dieses Kommando erzeugt ein Profil der ausführbaren Datei "web_service" und erfasst Low-Level-CPU-Ereignisse wie:
- Zyklen: Gesamtzahl der verbrauchten CPU-Zyklen.
- Anweisungen: insgesamt ausgeführte Anweisungen.
- Cache-Misses: Anzahl der Cache-Misses während der Ausführung.
Das Verhältnis von Zyklen zu Anweisungen weist darauf hin, ob Ihre Anwendung CPU-gebunden ist (hohe Zyklen pro Anweisung) oder unter Ineffizienzen wie Cache-Fehlern leidet. Diese Information ist besonders in Cloudumgebungen wichtig, wo die Maximierung der Ressourceneffizienz direkt zu Kosteneinsparungen führt.
Wenn perf eine hohe Anzahl von Befehlen und erhebliche Cache-Misses aufweist, müssen Sie möglicherweise die Codepfade Ihrer Anwendung optimieren. Die Verringerung der Anzahl der pro Zyklus ausgeführten Anweisungen kann die CPU-Belastung erheblich reduzieren, insbesondere bei CPU-gebundenen Arbeitslasten wie Datenverarbeitungspipelines.
Kernelanalyse mit ftrace
Obwohl perf einen hervorragenden Überblick liefert, müssen Sie manchmal tiefer in die Kernelfunktionen eintauchen. ftrace gibt Ihnen diese Kontrolle, sodass Sie die Ausführung bestimmter Kernelfunktionen verfolgen und messen können.
Angenommen Sie suchen nach Fehlern in einer Anwendung, die bei Schreibvorgängen auf die Festplatte eine hohe Latenz aufweist. Indem Sie die Funktion "sys_enter_write" des Kernels verfolgen, können Sie genau beobachten, wann der Systemaufruf "write" erfolgt, wie lange er dauert und ob unerwartete Verzögerungen auftreten:
echo function > /sys/kernel/debug/tracing/current_tracerecho sys_enter_write > /sys/kernel/debug/tracing/ set_ftrace_filtercat /sys/kernel/debug/tracing/ trace_pipe
Diese Einstellung weist ftrace an, die Funktion "sys_enter_write" zu verfolgen, die Schreiboperationen auf der Kernelebene behandelt. Wenn Sie die Ausgabe in "trace_pipe" untersuchen, können Sie jeden Aufruf in Echtzeit verfolgen. Dieser Ansatz bietet wichtige Einblicke in potenzielle Verzögerungen bei der Festplatten-E/A, wie zum Beispiel hohe Latenzzeiten oder Konflikte.
Die Kombination von ftrace mit User-Space-Anwendungen ermöglicht eine Full-Stack-Performanceanalyse. Damit schließen Sie die Lücke zwischen dem Anwendungsverhalten und der Kernelperformance.
Planbares Tracing mit bpftrace
Wenn Standardwerkzeuge nicht ausreichen, kann bpftrace weiterhelfen. Basierend auf dem Framework des Berkeley Packet Filter (BPF), ermöglicht das Tool anpassbare, automatisierbare Tracing-Szenarien. Wenn Sie über perf oder ftrace hinausgehen wollen, bietet bpftrace erweiterte Möglichkeiten, Kernel- und User-Space-Programme in Echtzeit zu verfolgen.
Auch hier ein Beispiel: Es gilt, alle Speicherzuweisungen im gesamten System zu verfolgen, insbesondere in einer Cloudumgebung mit dynamischen Arbeitslasten. Mit bpftrace können Sie benutzerdefinierte Skripte erstellen, die jedes kmalloc-Ereignis (Kernelspeicherzuweisung) verfolgen:
Dieses Kommando verwendet einen Tracepoint, um jede Kernelspeicherzuweisung zu verfolgen und jedes Mal die Anzahl der zugewiesenen Bytes auszugeben. Dies hilft bei der Diagnose von Speicherverwaltungsproblemen, beispielsweise Speicherlecks oder Fragmentierungsproblemen in Hochleistungssystemen. Es ist besonders nützlich, wenn Sie mit Systemen arbeiten, die eine unvorhersehbare Speichernutzung aufweisen, etwa Datenbankserver oder in der Cloud gehostete Anwendungen.
Sie können bpftrace-Skripte weiter anpassen, um nur Zuweisungen über einer bestimmten Größe zu erfassen oder mehrere Tracepoints in einem einzigen Leistungsbericht zu kombinieren. Diese Flexibilität bietet einen genauen Einblick in die Speicherverwaltung Ihres Systems und ermöglicht gezielte Optimierungen.
Speicher-Profiling mit massif
Mit Memory-Profiling verfolgen Sie, wie eine Anwendung Speicher zuweist und verwaltet. Diese Informationen sind in Umgebungen mit begrenztem Memory von entscheidender Bedeutung. Ist Ihr System mit "Out of Memory"-Fehlern (OOM) konfrontiert, hat das Erkennen und Beheben von Speicherlecks oder ineffizienter Nutzung höchste Priorität. Sie können ein Profil einer speicherintensiven Anwendung mit massif erstellen, das Teil der valgrind-Suite ist:
Massif protokolliert die Speicherzuweisung über die Zeit. Indem Sie die Zeiteinheit mit "--time-unit=B" auf Bytes setzen, erhalten Sie präzise Messungen, wie viel Speicher zugewiesen wird und wann Spitzen auftreten. Mit ms_print massif.out.<PID> visualisieren Sie die Ergebnisse.
Die Ausgabe gibt Aufschluss darüber, welche Funktionen am meisten Speicher zuweisen, sodass Sie speicherintensive Codeabschnitte überarbeiten können. In Cloudumgebungen ist diese Art der Analyse unerlässlich, um zu verhindern, dass Anwendungen zu viel Speicher verbrauchen, was zu Abstürzen oder Leistungseinbußen bei hoher Last führen kann.
Übermäßige Speicherzuweisung, häufiges Paging oder OOM-Fehler lassen sich oft auf eine ineffiziente Speicherverwaltung zurückführen. Mithilfe von Tools wie bpftrace und valgrind spüren Sie die Punkte auf, an denen Speicherprobleme auftreten. Sobald diese identifiziert sind, lassen sich Verbesserungen vornehmen, etwa die Vergrößerung des physischen Speichers, die Anpassung des Kernelparameters "vm.swappiness" zur Verringerung des Swappings oder die Optimierung der Speicherzuweisungsmuster der Anwendung.
E/A-Profiling mit iostat
Festplatten- und Netzwerk-E/A werden oft zum Engpass in der Unternehmens-IT. Um die Leistung datengesteuerter Arbeitslasten zu verbessern, ist es wichtig zu verstehen, wie E/A-Anfragen verarbeitet werden – unabhängig davon, ob sie von der Festplatte oder den Netzwerkschnittstellen stammen.
Stellen Sie sich ein Szenario vor, in dem Datenbankabfragen langsamer als erwartet ausgeführt werden. Mit iostat klären Sie ganz einfach ab, ob der Engpass mit der Festplatten-E/A zusammenhängt:
iostat -dx 5
Dieser Befehl liefert detaillierte Festplatten-E/A-Statistiken, die alle fünf Sekunden aktualisiert werden (Bild 2). Die wichtigsten Metriken sind:
- await: Die durchschnittliche Zeit (in Millisekunden), die E/A-Anfragen in der Warteschlange verbringen.
- svctm: Die durchschnittliche Servicezeit für E/A-Anfragen.
Ist "await" deutlich höher als "svctm", deutet dies darauf hin, dass Ihre Festplatten mit Anfragen überlastet sind, was zu hohen Latenzzeiten führt. Auf der Grundlage dieser Diagnose können Sie verschiedene Maßnahmen ergreifen, beispielsweise die Optimierung Ihres E/A-Planers, den Wechsel zu schnellerem Speicher wie SSDs oder die Erhöhung der Festplattenbandbreite in einer Cloudumgebung.
Hohe Festplatten- oder Netzwerklatenz kann selbst Hochleistungssysteme lahmlegen. Wenn Festplatten-E/A zu einem Engpass wird, bringt der Wechsel zu einem schnelleren E/A-Scheduler (Noop oder Deadline) oder die Verwendung von Direct I/O unter Umständen erhebliche Verbesserungen . Bei netzwerkgebundenen Arbeitslasten verbessert meist die Erhöhung der TCP-Fenstergröße ("tcp_rmem" und "tcp_wmem") und die Einstellung der Kernelparameter für Verbindungen mit geringer Latenz den Durchsatz.
Bild 2: Bei der Überwachung der E/A-Leistung liefert iostat gute Ergebnisse.
Tuning des Netzwerk-Stacks
Die Leistung von Linux-Systemen hängt stark von der Effizienz des Netzwerk-Stacks ab – insbesondere in Umgebungen, in denen Anwendungen einen hohen Durchsatz, eine geringe Latenz oder beides benötigen. Ganz gleich, ob Sie einen Webserver mit Tausenden von gleichzeitigen Verbindungen oder ein Rechenzentrum samt Anwendungen mit hohen Bandbreiten verwalten, die Optimierung der Netzwerkparameter des Linux-Kernels ist entscheidend. Werfen wir also einen Blick darauf, wie Sie wesentliche TCP/IP-Parameter für maximale Leistung abstimmen, Latenzzeiten reduzieren und Systeme für Umgebungen mit hoher Bandbreite und NUMA konfigurieren.
Die Leistung des TCP/IP-Stacks von Linux hängt von mehreren Schlüsselparametern ab. Diese steuern, wie der Kernel mit Verbindungen, Puffern und dem Socket-Verhalten umgeht. Die richtige Einstellung dieser Parameter kann den Durchsatz erheblich steigern und die Latenzzeit verringern, insbesondere in Umgebungen mit hoher Nachfrage wie Webanwendungen mit hohen Zugriffsraten.
Ein wichtiger Parameter für Webserver oder Dienste, die zahlreiche gleichzeitige Verbindungen verarbeiten, ist "tcp_max_ syn_backlog". Diese Einstellung steuert die maximale Anzahl der anstehenden TCP-Verbindungsanfragen (SYN-Pakete), die in der Warteschlange landen können, bevor das System beginnt, Pakete zu verwerfen. Diese Einstellung ist besonders wichtig für Server, die stark belastet werden, wie zum Beispiel häufig frequentierte Websites oder API-Gateways. Sie können das maximale SYN-Backlog mit dem Abändern des Parameters erhöhen. Mit dem folgenden Befehl kann das System ein höheres Volumen an ausstehenden TCP-Verbindungen verwalten, was für die Bewältigung von hohem Datenverkehr ohne Verbindungsabbrüche entscheidend ist:
sudo sysctl -w net.ipv4.tcp_max_syn_backlog=4096
Der Standardwert für "tcp_max_syn_ backlog" – oft 128 oder 256 – könnte zu niedrig sein für Server mit hohem Datenaufkommen. Wenn Sie diesen Wert auf 4096 (je nach Auslastung sogar höher) anheben, kann Ihr Server mehr eingehende SYN-Pakete verarbeiten, bevor er Verbindungen abbricht, was die Fähigkeit des Systems verbessert, Anforderungs-Bursts zu bewältigen. Sie können die veränderte Konfiguration beibehalten, indem Sie folgenden Eintrag zu "/etc/sysctl.conf" hinzufügen:
echo "net.ipv4.tcp_max_syn_backlog=4096" | sudo tee -a /etc/sysctl.confsudo sysctl -p
Anpassen von tcp_rmem und tcp_wmem
Linux verwendet dynamische Speicherpuffer für das Senden und Empfangen von Daten über TCP-Verbindungen. Die Parameter "tcp_rmem" und "tcp_wmem" steuern die minimale, standardmäßige und maximale Puffergröße für den Empfang und die Übertragung von Daten. In Umgebungen, in denen die Netzwerklatenz oder -bandbreite variiert, kann die Einstellung dieser Puffer Leistungsengpässe verhindern, die durch ineffiziente Pufferverwaltung verursacht werden:
Mit diesem Befehl bestimmen Sie auch die Puffergrößen für den Empfang und das Senden von Daten, sodass sich auch große Datenmengen effizient übertragen lassen. In diesem Beispiel
- legt die erste Zahl (4096) die Mindestpuffergröße fest,
- die zweite (87380 für "tcp_rmem" und "65536" für tcp_wmem) ist die Standardgröße und
- die dritte (6291456) bestimmt die maximale Größe.
In Umgebungen mit hoher Bandbreite ermöglicht ein Anheben der maximalen Puffergröße TCP, mehr Speicher für eine effiziente Datenübertragung zu nutzen, insbesondere bei großen Dateiübertragungen oder Streaming-Workloads. Die Einstellung einer angemessenen Standardgröße stellt sicher, dass kleineren, weniger bandbreitenintensiven Verbindungen nicht unnötig große Puffer zugewiesen werden, sodass der Systemspeicher für kritische Verbindungen erhalten bleibt.
Auch hier bewirkt ein Eintrag in "/etc/ sysctl.conf", dass die Anpassungen gespeichert werden:
echo "net.ipv4.tcp_rmem = 4096 87380 6291456" | sudo tee -a /etc/sysctl.confecho
"net.ipv4.tcp_wmem = 4096 65536 6291456" | sudo tee -a /etc/sysctl.confsudo sysctl -p
Mit diesen Modifikationen stellen Sie sicher, dass der Kernel ausreichend Pufferplatz für Anwendungen mit hohem Durchsatz bereitstellt, um Engpässe aufgrund von Puffererschöpfung zu vermeiden.
Verringern der Latenz
Bei latenzempfindlichen Anwendungen wie Finanzhandelsplattformen oder Echtzeit-Videostreaming ist die Reduzierung der Netzwerklatenz entscheidend. Durch die Abstimmung von Kernelparametern für die Staukontrolle und die Pufferverwaltung minimieren Sie Verzögerungen und erreichen niedrigere Round-Trip-Zeiten (RTT).
TCP-Überlastungssteuerungsalgorithmen spielen eine Schlüsselrolle bei der Verwaltung von Paketverlusten und der Anpassung der Übertragungsrate, um eine Überlastung der Netzwerkpfade zu vermeiden. Der Standardalgorithmus auf den meisten Linux-Systemen ist der kubische Algorithmus, der für Szenarien mit hoher Bandbreite optimiert ist, aber möglicherweise nicht immer die beste Wahl für latenzempfindliche Anwendungen ist.
BBR (Bottleneck Bandwidth and Round-trip propagation time) ist ein moderner Staukontroll-Algorithmus, der die Netzwerklatenz minimiert, indem er die Größe des Staufensters auf der Grundlage der geschätzten Engpassbandbreite und RTT und nicht auf der Grundlage von Paketverlusten steuert:
Mit diesem setzen Sie den TCP-Überlastungssteuerungsparameter auf "bbr", was zur Verbesserung des Netzwerkdurchsatzes und zur Verringerung der Latenzzeit durch Anpassung der Überlastungssteuerungsmethode beiträgt. Überprüfen Sie mit
sysctl net.ipv4.tcp_congestion_ control
den derzeit verwendeten Staukontroll-Algorithmus. Schreiben Sie bei Bedarf BBR in den Settings fest, indem Sie folgende Zeile zu "/etc/sysctl.conf" hinzufügen:
echo "net.ipv4.tcp_congestion_ control=bbr" | sudo tee -a /etc/sysctl.confsudo sysctl -p
Dieser Befehl stellt sicher, dass die Einstellung nach einem Neustart aktiv bleibt. Für eine verbesserte Verbindungsbehandlung unter Last sorgen Sie durch Anhängen der Konfiguration und erneutes Laden mit sysctl -p. In der Praxis kann diese Änderung die Latenz gerade in Umgebungen mit schwankenden Netzwerkbedingungen verringern, wie zum Beispiel in mobilen Netzwerken oder geografisch verteilten Systemen.
Jitter vermeiden
Die Pufferverwaltung ist ein weiterer Aspekt der Reduzierung der Netzwerklatenz. Große Puffer können zu Schwankungen in der Latenz – auch bekannt als Jitter – führen, was sich wiederum nachteilig auf Echtzeitanwendungen auswirkt. Linux bietet Parameter zur Begrenzung der Puffergrößen und zur Reduzierung der Auswirkungen übermäßigen Pufferns, allgemein bekannt als Bufferbloat. Sie konfigurieren den maximalen Empfangspufferspeicher für den Netzwerkkern mit "rmem_max":
sudo sysctl -w net.core.rmem_max=262144
Mit diesem Befehl legen Sie eine größere Puffergröße für eingehende Daten fest, sodass das System einen höheren Durchsatz effektiv verarbeiten kann. Indem Sie die maximale Puffergröße begrenzen, verhindern Sie eine Überpufferung und reduzieren damit Jitter. Durch das Anpassen der Empfangs- und Sendepuffer-Einstellungen für einzelne Verbindungen stellen Sie außerdem sicher, dass TCP keine unnötigen Verzögerungen bei der Paketübertragung verursacht. Diese scheinbar unbedeutenden Anpassungen können die Leistung in Umgebungen, in denen Vorhersagbarkeit und Konsistenz wichtiger sind als die reine Bandbreite, erheblich verbessern.
Sonderfall NUMA
Im High Performance Computing (HPC) und in Rechenzentren führen NUMA-Systeme (Non-Uniform Memory Access) zu komplexen Problemen bei der Optimierung der Netzwerkleistung. NUMA-Systeme verteilen den Speicherzugriff auf mehrere Knoten, und die Netzwerkleistung kann leiden, wenn Speicher und Netzwerkschnittstellenkarten (NIC) zwischen NUMA-Knoten falsch ausgerichtet sind.
Die Optimierung der NUMA-Netzwerkkonfiguration ist entscheidend für einen hohen Durchsatz und geringe Latenzzeiten in derartigen Umgebungen. Stellen Sie in einem NUMA-System sicher, dass die NICs den richtigen CPU-Kernen zugewiesen sind, um die Verzögerungen beim knotenübergreifenden Speicherzugriff zu reduzieren. Sie erreichen dies, indem Sie die NIC-Interrupts und die Netzwerkverarbeitung an CPUs binden, die lokal zum NUMA-Knoten der NIC gehören. Dadurch minimieren Sie den Overhead des Speicherzugriffs über NUMA-Grenzen hinweg:
Im Befehl entspricht der Platzhalter in spitzen Klammern der IRQ-Nummer der Netzwerkkarte. Wenn Sie die Affinität auf "1" setzen, wird der Interrupt von der ersten CPU auf dem NUMA-Knoten der NIC bearbeitet. Bei Netzwerken mit hohem Durchsatz können Sie Interrupts auf mehrere CPUs auf demselben NUMA-Knoten verteilen, um die Paketverarbeitung zu parallelisieren.
Um diesen Prozess über Systemneustarts hinweg zu automatisieren, sollten Sie den Dienst "irqbalance" verwenden, der die Interrupt-Verarbeitung je nach Auslastung dynamisch auf die CPUs verteilt. In Umgebungen, die auf Latenzzeiten angewiesen sind, führt eine manuelle Einstellung jedoch oft zu besseren Ergebnissen.
Receive Side Scaling (RSS) ermöglicht die parallele Verarbeitung von Netzwerkverkehr über mehrere CPUs, wodurch sich die Last gleichmäßiger verteilen lässt. In NUMA-Systemen sollten Sie zur weiteren Leistungsoptimierung sicherstellen, dass RSS NUMA-fähig ist:
ethtool -L eth0 combined 8
Dieser Befehl weist das System an, acht RX/TX-Warteschlangen auf der Netzwerkschnittstelle "eth0" zu verwenden, wodurch sich der Datenverkehr auf acht Kerne verteilen lässt. Indem Sie sicherstellen, dass sich diese Kerne auf demselben NUMA-Knoten wie die Netzwerkkarte befinden, sorgen Sie für eine minimale Latenz beim Speicherzugriff und einen maximalen Netzwerkdurchsatz.
Fazit
Die Optimierung des Netzwerk-Stacks von Linux ist für eine hohe Leistung in anspruchsvollen Umgebungen wie stark ausgelasteten Servern, Anwendungen mit geringer Latenz und Rechenzentren mit hoher Bandbreite unerlässlich. In diesem Artikel haben wir einige wichtige Optimierungstechniken behandelt, darunter das Setzen bestimmter TCP/IP-Parametern oder Möglichkeiten zum Verringern von Latenzzeit und Jitter.
Neben der reinen Netzwerktechnik gibt es zahlreiche weitere Techniken zur Optimierung der Linux-Leistung, so etwa vorausschauende CPU-Planung und effiziente Speicherverwaltung. Richtig eingesetzt, tragen diese Strategien dazu bei, dass Linux-Umgebungen optimal funktionieren und skalierbar sind, um selbst anspruchsvolle Arbeitslasten zu bewältigen.