- Die Optimierung des Linux-Kernels erfordert die Kombination von Architekturkonfiguration, sysctl und latenzorientierter CPU-Planung.
- Benutzerdefinierte Kernel und PREEMPT_RT-Patches ermöglichen eine extreme Reduzierung der Latenz, bringen aber einen höheren Komplexitäts- und Wartungsaufwand mit sich.
- Netzwerk-, Speicher-, Festplatten- und Systemdienstoptimierung sollten stets durch strenges Monitoring und Benchmarking gemessen werden.
- Ein iterativer, kennzahlengesteuerter Ansatz wandelt Kernelverbesserungen in konkrete Vorteile für Anwendungen und Benutzer um.

Wenn wir über Leistung unter Linux sprechen, läuft fast alles auf dasselbe hinaus: die Der Kernel als zentrale Komponente steuert Latenz, Stabilität und Ressourcennutzung.Die richtige Feinabstimmung kann den Unterschied ausmachen zwischen einem System, das gerade so „funktioniert“, und einem, das reibungslos auf Servern, Desktops, Cloud-Umgebungen oder sogar in … reagiert. sehr alte Hardware.
Dieser Leitfaden konzentriert sich darauf, wie Optimieren Sie den Linux-Kernel, um die Latenz zu minimieren, ohne die Sicherheit oder Wartbarkeit zu beeinträchtigen.Wir behandeln alles von grundlegenden Architekturkonzepten bis hin zu Optimierungen mit sysctl, dem Kompilieren benutzerdefinierter Kernel, der Verwendung von Echtzeit-Patches, der Optimierung für Netzwerke mit niedriger Latenz (wie in EC2) sowie Überwachungs- und Benchmarking-Techniken, um zu messen, ob die vorgenommenen Optimierungen tatsächlich zu Verbesserungen führen.
Linux-Kernel-Architektur und wichtige Aspekte der Latenz
Der Linux-Kernel fungiert als Vermittlungsschicht zwischen Anwendungen und Hardware und verwaltet Speicher, Prozesse, Interrupts, Treiber und Dateisysteme. Auf monolithisches, aber modulares DesignDank der ladbaren Module können Sie Funktionen flexibel aktivieren oder deaktivieren, ohne das gesamte System neu kompilieren zu müssen.
Um zu verstehen, woher Latenzen kommen, ist es entscheidend, mehrere Subsysteme zu kennen: die Prozessplaner (Terminplaner)Speichermanagement und Interruptbehandlung sind von entscheidender Bedeutung. Ein schlecht konfigurierter Scheduler, eine aggressive Speicherrichtlinie oder eine übermäßige Anzahl unkontrollierter Interrupts können selbst bei leistungsstarker Hardware zu langsamen Reaktionszeiten führen.
Die Kernelkonfiguration umfasst Optionen wie beispielsweise CONFIG_PREEMPT, CONFIG_PREEMPT_VOLUNTARY oder CONFIG_SMPDiese Faktoren bestimmen, inwieweit der Kernel unterbrochen werden kann, um dringendere Aufgaben zu erledigen, und wie er Mehrkernsysteme nutzt. Die Wahl des richtigen Präemptionsmodells verändert die wahrgenommene Latenz auf Desktop-PCs, Servern mit niedriger Latenz oder industriellen Systemen erheblich.
Bei modernen Servern spielt auch die Hardwaretopologie eine Rolle: Verteilung von Kernen, Sockeln, NUMA und Cache-HierarchieDurch die Feinabstimmung der CPU-Affinitäten und NUMA-Richtlinien (z. B. durch die Festlegung von Prozessen und Speicher auf denselben Knoten) lassen sich die Zugriffszeiten verkürzen und die Cache-Trefferrate verbessern, was von entscheidender Bedeutung ist, wenn wir Jitter und unvorhersehbare Latenzen minimieren wollen.
Des Weiteren die Interaktion zwischen dem CPU-Scheduler und den Subsystemen von Die Ein-/Ausgabe (Festplatte und Netzwerk) bestimmt den Durchsatz und die End-to-End-Latenz. Die Anwendungen sehen diese Informationen. Bevor Sie irgendetwas ändern, ist es ratsam, den aktuellen Zustand (Kernelkonfiguration, sysctl, GRUB, geladene Module) zu dokumentieren, damit Sie die Änderungen schnell rückgängig machen können, falls diese die Leistung verschlechtern.
Anpassungen über sysctl zur Verbesserung von Latenz und Leistung
die Schnittstelle Mit sysctl können Sie Kernelparameter dynamisch ändern. über /proc/sys, ohne dass eine Neukompilierung erforderlich ist. Es ist der ideale Einstiegspunkt, um mit dem Optimieren zu beginnen, ohne sich gleich in Kompilierungen zu verlieren.
Im Netzwerkbereich spielen Parameter wie beispielsweise net.core.rmem_max, net.core.wmem_max oder net.ipv4.tcp_congestion_control Sie beeinflussen direkt Durchsatz, Latenz und das Verhalten von TCP-Verbindungen. Die korrekte Anpassung von Puffern und des Staualgorithmus ist für stark frequentierte Webserver oder Cloud-Instanzen mit geringer Latenz unerlässlich.
Für den Speicher, Werte wie z.B. vm.swappiness, vm.dirty_ratio, vm.vfs_cache_pressure oder vm.overcommit_memory Sie ermöglichen die Steuerung der Auslagerungsspeichernutzung, der Seitencache-Verwaltung und des Verhaltens des virtuellen Speichers. Eine Reduzierung der Auslagerungsspeichernutzung (z. B. auf 10) trägt in der Regel dazu bei, dass das System nicht zu häufig Auslagerungsspeicher nutzt und somit Latenzspitzen bei der Festplatten-E/A reduziert werden.
Wenn Sie mit großen Datenbanken oder Anwendungen arbeiten, die große Mengen an gemeinsam genutztem Speicher verwenden, ist es entscheidend, die Einstellungen anzupassen. kernel.shmmax, kernel.shmall und die maximale Anzahl der mit geöffneten Dateien fs.file-max und fs.nr_openDiese ungünstig dimensionierten Grenzwerte können zu Engpässen und Fehlern führen, die unter Last schwer zu diagnostizieren sind.
Der beste Ansatz besteht darin, kleine Änderungen umzusetzen, deren Auswirkungen mithilfe von Überwachungsinstrumenten zu messen und erst dann Speichern Sie sie in /etc/sysctl.conf oder in /etc/sysctl.d/In containerisierten Umgebungen ist zu beachten, dass viele Kernelparameter global für den Host gelten: Eine unbedachte Änderung dieser Parameter kann alle Dienste beeinträchtigen. Daher ist die Kombination von sysctl mit cgroups und Namespaces nahezu unerlässlich.
Kompilieren und Warten von benutzerdefinierten Kerneln
Das Kompilieren eines benutzerdefinierten Kernels bleibt ein sehr mächtiges Werkzeug, wenn man möchte Latenzzeiten reduzieren, unnötigen Overhead beseitigen oder seltene Hardware unterstützenObwohl die Distributionen mit recht vielseitigen Kernels ausgestattet sind, kann in bestimmten Szenarien ein spezifischer Kernel den entscheidenden Unterschied machen.
Der klassische Arbeitsablauf beinhaltet das Herunterladen des Codes von kernel.org oder gepatchte Trees wie xanmod oder Likörund nutzen Sie Werkzeuge wie make menuconfig Sie können Optionen auswählen. Durch das Speichern der .config-Datei in Ihrem eigenen Git-Repository zusammen mit den Build-Skripten können Sie Builds reproduzieren und die Konsistenz zwischen den Versionen gewährleisten.
Wenn Sie Debian oder Derivate verwenden, ist es sehr praktisch, „Debian-Stil„Um .deb-Pakete des Kernels, der Header und der zugehörigen Bibliotheken zu erhalten. Dies ermöglicht es Ihnen, diesen benutzerdefinierten Kernel auf mehreren Rechnern bereitzustellen, indem Sie einfach die Pakete installieren und die Versionen mit Ihrem eigenen Repository verwalten.“
In der realen Welt ist die manuelle Kompilierung oft sinnvoll, wenn man mit alte oder sehr eingeschränkte HardwareEin typisches Beispiel ist ein altes Netbook mit einer Atom-CPU und 1 GB RAM, wo ein moderner generischer Kernel voller unnötiger Treiber und Serveroptionen Latenzen und zusätzlichen CPU-Verbrauch verursacht, die Sie sich nicht leisten können.
Eine gängige Strategie besteht darin, von der aktuellen Kernelkonfiguration auszugehen (z. B. durch Kopieren der /Boot-Konfiguration), und von dort aus zuschneiden oder anpassen. Sie können das Vorrangmodell auf „ ändernPräemptiver Kernel (Desktop mit niedriger Latenz)„um die Reaktionszeit interaktiver Desktops zu priorisieren oder spezifische E/A-Scheduler hinzuzufügen, wie z. B. BFQ in Form eines Moduls zur Verbesserung des Benutzererlebnisses auf mechanischen CDs/DVDs.
Um nicht die Hälfte Ihrer Zeit mit dem Kompilieren zu verbringen, ist es sinnvoll, den Build auf einem leistungsstärkeren Rechner durchzuführen und gegebenenfalls zu verwenden Cross-Compiling (Zum Beispiel lässt sich ein 32-Bit-Kernel für einen Atom-Prozessor auf einem x86_64-PC kompilieren, indem man einfach die Architektur (ARCH) und die zugehörigen Toolchains anpasst.) Anschließend müssen Sie nur noch die .deb-Dateien auf dem Zielrechner installieren und den entsprechenden Eintrag in GRUB hinzufügen.
Die Schwierigkeit liegt in der Wartung: Es ist ratsam Test des neuen Kernels auf Knoten der Kanarischen InselnSie sollten klare Rollback-Pfade im Bootmanager haben und während des Übergangs Protokolle und Metriken aufzeichnen, um Regressionen bei der Leistung oder der Treiberkompatibilität zu erkennen.
Präemptionsmodelle und PREEMPT_RT-Patches für Systeme mit niedriger Latenz
Das Präemptionsmodell des Kernels legt fest, in welchem Umfang ein laufender Prozess unterbrochen werden kann, damit ein Prozess mit höherer Priorität die Ausführung übernehmen kann, was sich direkt auf die AntwortlatenzDies umfasst sowohl Standardkonfigurationsoptionen als auch Echtzeit-Patches.
Generische Kernel bieten mehrere Optionen: keine Präemption (stärkerer Fokus auf Serverdurchsatz), freiwillige Präemption und Präemptiver Kernel für DesktopDiese Einstellung priorisiert die schnelle Reaktionszeit interaktiver Anwendungen. Durch Anpassen dieser Einstellung lässt sich die Leistung von Desktop-Systemen, Audio-Systemen oder sogar stark ausgelasteten älteren Rechnern deutlich verbessern.
Wenn Sie einen Schritt weitergehen müssen, erscheinen folgende Optionen: PREEMPT- und PREEMPT_RT-PatchesDiese Modifikationen verändern wesentliche Teile des Kernels, um nicht unterbrechbare Abschnitte zu minimieren. PREEMPT_RT ist für Systeme vorgesehen, bei denen die Latenz im ungünstigsten Fall (nicht nur im Durchschnitt) sehr niedrig und vorhersehbar sein muss: Industrieautomation, professionelle Audiotechnik, Telekommunikation oder Hochfrequenzhandel.
Die Entscheidung zur Einführung von PREEMPT_RT sollte nicht auf Moden, sondern auf spezifische Messungen von Latenz und JitterZunächst empfiehlt es sich, die Scheduler-Einstellungen, CPU-Affinitäten, sysctl und gegebenenfalls Konfigurationen wie dynamic tickless voll auszuschöpfen, bevor man die Wartung mit einem RT-Baum verkompliziert.
Auch die Kompatibilität muss berücksichtigt werden: einige Treiber und Subsysteme sind nicht vollständig an Echtzeitkommunikation angepasst. und möglicherweise sind bestimmte Versionen oder zusätzliche Patches erforderlich. Sinnvoll ist es, einen Wartungsplan zu erstellen, der klar beschreibt, wann und wie neue Versionen des Hauptkernels in den RT-Zweig integriert werden, der zwar regelmäßig synchronisiert wird, aber dennoch etwas hinterherhinkt.
CPU-Scheduling-Optimierung, tickloser Betrieb und Kernisolierung
Neben der Wahl des Präemptionsmodells können Sie die Latenz auch durch Experimentieren mit der CPU-Planung und dem Verhalten des Kernel-Timers feinabstimmen, insbesondere bei unternehmensorientierten Distributionen wie RHEL.
Red Hat Enterprise Linux 8 wird beispielsweise mit folgendem Inhalt ausgeliefert: Kernel-Tickless-Modus standardmäßig für im Leerlauf befindliche CPUsDadurch wird der Energieverbrauch reduziert, indem periodische Unterbrechungen vermieden werden, wenn der Kern im Leerlauf ist. Für latenzempfindliche Arbeitslasten kann ein Modus aktiviert werden. dynamisches tickloses Verhalten in einer Reihe von Kernelnsodass nur eine CPU (der „Heimatkern“) den Großteil der zeitbasierten Aufgaben übernimmt und die übrigen CPUs so weit wie möglich von periodischen Unterbrechungen frei sind.
Diese Konfiguration erfolgt durch Hinzufügen geeigneter Parameter zu die Kernel-Befehlszeile in GRUBdie Konfiguration neu zu generieren und anschließend die Affinität kritischer Kernel-Threads, wie z. B. RCU-Threads oder Threads, anzupassen bdi-flushsodass sie sich im für die Wartung reservierten Kernbereich befinden.
Dieser Ansatz kann durch den Parameter ergänzt werden isolcpusDies ermöglicht die Trennung von Kernen von normalen Benutzerprozessen. In Szenarien mit geringer Latenz ist es üblich, mehrere Kerne exklusiv für eine kritische Anwendung zu reservieren, während der Rest des Systems (Daemons, Interrupts usw.) von anderen Kernen verarbeitet wird.
Um zu überprüfen, ob der dynamische ticklose Modus funktioniert, können einfache Tests durchgeführt werden mit stress oder Skripte, die die CPU für eine Sekunde beschäftigen und beobachten mit Timer-Tickzähler Wie die Anzahl der Interrupts pro Sekunde in isolierten Kernen von Tausenden auf nur noch einen sinkt, ist ein Zeichen dafür, dass der periodische Timer verschwunden ist.
Speicher- und Speichermanagement mit Fokus auf Latenz
Die Art und Weise, wie der Kernel Speicher- und Festplatten-E/A verwaltet, hat einen enormen Einfluss auf die von Anwendungen wahrgenommene Latenzinsbesondere in Datenbanken und Diensten, die viele kleine und häufige Operationen ausführen.
Auf der Speicherseite sollte reduziert werden vm.swappiness Minimieren Sie die Nutzung von Swap-Speicher (der fast immer viel langsamer ist als RAM). vm.vfs_cache_pression Es steuert, wie schnell das System versucht, den Inode- und Dentry-Cache zu leeren, und vm.nr_hugepages Es ermöglicht die Reservierung statischer HugePages für rechenintensive Anwendungen wie Datenbanken oder JVMs und reduziert so den TLB-Overhead.
Im Lager wählen Sie die Geeigneter E/A-Scheduler je nach Festplattentyp Das ist unerlässlich. Bei modernen SSDs ist es in der Regel ratsam, ... zu verwenden. none o mq-deadlineBei mechanischen Festplatten und Multitasking-Systemen sind hingegen Algorithmen, die auf Fairness ausgelegt sind, möglicherweise besser geeignet, wie zum Beispiel BFQDarüber hinaus können Dateisysteme mit Optionen wie noatime y nodiratime Vermeiden Sie unnötige Schreibvorgänge bei jedem Zugriff auf eine Datei oder ein Verzeichnis.
Bezüglich Dateisystemen, ext4 und XFS Dies sind nach wie vor die gängigsten Optionen: Ein gut konfiguriertes ext4-Dateisystem ist eine sichere Wahl, während XFS bei hoher gleichzeitiger Nutzung tendenziell besser skaliert. In sehr anspruchsvollen Szenarien kann die Kombination von RAID (RAID 10 für Datenbanken, RAID 0 für temporären Scratch-Speicher) mit einem guten Scheduler die durchschnittliche Latenz und vor allem die Variabilität reduzieren.
Netzwerk- und Kerneloptimierung für geringe Latenz in Linux und EC2
In Hochleistungsnetzwerkanwendungen hängt die Latenz nicht nur von der Hardware oder der Entfernung ab, sondern auch von wie der TCP/IP-Stack und der Kernel selbst konfiguriert sindDies zeigt sich besonders deutlich bei Cloud-Instanzen wie Amazon EC2 mit ENA-Schnittstellen.
Zunächst ist es entscheidend, externe Faktoren wie die Anzahl der Netzwerk-Hops dass die Pakete Folgendes leisten: Durch die Verwendung direkterer Topologien, Load Balancer in der Nähe des Backends oder optimierte Verfügbarkeitszonen werden die Übertragungszeiten in Millisekunden verkürzt, bevor das Betriebssystem überhaupt erreicht wird.
Innerhalb des Kernels beinhaltet die Netzwerkkonfiguration die Erhöhung Dateideskriptoren (ulimit -n), Größe der Empfangs- und Sendepuffer mit net.core.rmem_max, net.core.wmem_max, net.ipv4.tcp_rmem, net.ipv4.tcp_wmemund Optionen wie z. B. aktivieren TCP Fast Open um die Latenzzeit beim Verbindungsaufbau zu reduzieren.
Bei AWS ENA-Schnittstellen spielt die Interrupt-Moderation eine wichtige Rolle: Standardmäßig gruppiert der Treiber Pakete, um die Anzahl der IRQs zu reduzieren. rx-µs und tx-µsWenn Sie die Latenz auf ein absolutes Minimum reduzieren möchten, können Sie diese Moderation deaktivieren, indem Sie ethtool -CDurch das Setzen von rx-usecs und tx-usecs auf Null wird die Latenz verringert, aber der Interrupt-Overhead erhöht sich, daher muss je nach Last ein Gleichgewicht gefunden werden.
Es kann auch verwendet werden irqbalance zur Verteilung von IRQs auf mehrere Kerneoder man deaktiviert es und legt die Interrupt- und Netzwerkwarteschlangenaffinitäten (RSS/RPS) manuell bestimmten Kernen fest, was in Umgebungen mit extrem niedriger Latenz oder bei der Verwendung von DPDK und dem Überspringen eines großen Teils des Kernel-Stacks sehr typisch ist.
Ein weiterer zu berücksichtigender Parameter ist die CPU-C-ZuständeTiefschlafzustände reduzieren zwar den Stromverbrauch, führen aber zu Verzögerungen beim Aufwachen des Kerns. Um die Reaktionszeit zu verkürzen, können diese Tiefschlafzustände begrenzt werden, was einen höheren Stromverbrauch und weniger Spielraum für Turbo Boost auf anderen Kernen zur Folge hat. Jede Umgebung bietet ein optimales Verhältnis zwischen Stromverbrauch und Reaktionszeitgewinn.
CPU-, Service- und Anwendungsoptimierung zur Reduzierung der Latenz
Neben dem Kernel selbst hat auch die Umgebung viel mitzubestimmen über die Gesamtlatenz: von der aktive Dienste im System bis hin zur spezifischen Konfiguration jeder Anwendung.
Ein Hochleistungsserver sollte nur die folgenden Funktionen ausführen: Dämonen, die wirklich notwendig sindDienste wie Bluetooth, Drucken oder die automatische Netzwerkerkennung (CUPS, Avahi usw.) auf Backend-Rechnern verbrauchen unnötig CPU, Arbeitsspeicher und E/A, ohne einen Nutzen zu bringen. (Überprüfung erforderlich) systemctl list-unit-files --state=enabled Und das Deaktivieren unnötiger Funktionen ist eine der günstigsten und effektivsten Maßnahmen, die man ergreifen kann.
Um kritische Prozesse zu priorisieren, können Sie Tools wie beispielsweise folgende verwenden: renice, chrt und tasksetDurch Anpassen der Priorität eines Prozesses (renice), durch Echtzeitplanung (chrt -f 99) oder durch Zuweisung zu bestimmten Kernen (taskset) werden Interferenzen mit anderen Aufgaben reduziert und die Vorhersagbarkeit der CPU-Auslastung für Datenbanken, VoIP, Streaming oder Handelsdienste verbessert.
Auf Anwendungsebene ist die Optimierung genauso wichtig wie die Kernel-Optimierung. Webserver wie beispielsweise Nginx oder Apache Sie benötigen eine Feinabstimmung von Workern, Keepalive-Funktionen, Caches und Komprimierung. Datenbanken wie PostgreSQL oder MySQL Sie müssen Puffergrößen, Prüfpunkte, Verbindungspool und Parameter für synchrones Schreiben überprüfen, um niedrige und stabile Latenzen zu erreichen.
Die JVMs spielen ebenfalls eine Rolle: die Auswahl von Garbage Collectoren wie G1GC oder ZGC Durch die Anpassung der Heap-Größe lassen sich Pausen reduzieren, die von außen als Latenz wahrgenommen werden. In virtualisierten und containerisierten Umgebungen ist eine korrekte Verteilung entscheidend. vCPU-, vRAM- und E/A-Kontingente Dadurch werden stille Konflikte vermieden, die sich später in endlosen Warteschlangen auf der Festplatte oder einer ausgelasteten CPU äußern.
Kernel- und Systemüberwachung und Benchmarking
All diese Feinabstimmungen sind nutzlos, wenn man die Auswirkungen nicht misst. Der Schlüssel liegt in der Kombination. kontinuierliche Überwachung mit reproduzierbaren Leistungstestsdamit jede Änderung am Kernel oder an sysctl anhand objektiver Daten bewertet werden kann.
Um den Gesamtstatus des Systems zu ermitteln, können Sie klassische Werkzeuge wie beispielsweise verwenden htop, vmstat, iotop o sarWenn Sie mehr Details benötigen, kommen spezielle Kernel-Tools zum Einsatz, wie zum Beispiel perf und ftracedie es Ihnen ermöglichen, das Verhalten des Schedulers, von Interrupts und internen Aufrufen mit erheblicher Genauigkeit zu verfolgen.
In Produktionsumgebungen wird der Einsatz von Metriksystemen wie beispielsweise Prometheus, collectd oder sysstat mit Exportern Diese Daten zeigen CPU-Zähler, E/A-Latenzen, Festplatten- und Netzwerklatenzen, Prozesswarteschlangen usw. an. Die Visualisierung dieser Daten in Grafana oder ähnlichen Tools hilft dabei, Regressionen oder Anomalien zu erkennen, bevor der Endbenutzer Probleme bemerkt.
Beim Benchmarking geht es darum, die tatsächliche Arbeitslast zu simulieren und die Ergebnisse vor und nach jeder Änderung zu vergleichen. Tools wie beispielsweise Sysbench (für CPUs und Datenbanken), Gewinde (für Disc) oder iperf3 (Für Netzwerke) ermöglichen sie die Erstellung wiederholbarer Szenarien. Eine Dokumentation ist unerlässlich. Kernelversionen, sysctl-Konfigurationen, Hardware und Testparameter damit die Vergleiche im Laufe der Zeit sinnvoll sind.
In der Praxis ist die Linux-Kernel-Optimierung ein iterativer Prozess: Man testet verschiedene Anpassungen, misst die Ergebnisse, behält die nutzbringenden bei und verwirft den Rest. Mit einem guten Änderungsmanagement lassen sich die Verbesserungen neuer Kernel-Versionen (z. B. aktuelle Serien mit Scheduler-, Grafik-, Energie- oder Netzwerk-Optimierungen) in messbare Vorteile für Ihre Anwendungen umsetzen – egal ob auf lokalen Servern, in der Cloud oder auf anspruchsvollen Workstations.
Die Kombination aus Kernelarchitekturkenntnissen, Feinabstimmung mit sysctl, kontrollierter Kompilierung, gezieltem Einsatz von Echtzeit-Patches und einem guten Metriksystem ermöglicht es einem Administrator oder Betriebsteam, Folgendes zu erreichen: Schnellere Reaktionszeiten, geringere Latenz und verbesserte Gesamtstabilität ohne dass bei der geringsten Provokation die Hardware ausgetauscht oder die Systemsicherheit beeinträchtigt werden muss.
Inhaltsverzeichnis
- Linux-Kernel-Architektur und wichtige Aspekte der Latenz
- Anpassungen über sysctl zur Verbesserung von Latenz und Leistung
- Kompilieren und Warten von benutzerdefinierten Kerneln
- Präemptionsmodelle und PREEMPT_RT-Patches für Systeme mit niedriger Latenz
- CPU-Scheduling-Optimierung, tickloser Betrieb und Kernisolierung
- Speicher- und Speichermanagement mit Fokus auf Latenz
- Netzwerk- und Kerneloptimierung für geringe Latenz in Linux und EC2
- CPU-, Service- und Anwendungsoptimierung zur Reduzierung der Latenz
- Kernel- und Systemüberwachung und Benchmarking