Linux-Performance
(brendangregg.com)- Brendan Greggs Linux-Performance-Seite ist ein Link-Hub, der die für den Einstieg in die Untersuchung der Linux-Performance nötigen Materialien zu Observability, Analyse, Benchmarking und Tuning an einem Ort bündelt
- Der zentrale Werkzeug-Workflow verläuft über perf, eBPF, bcc, bpftrace, Flame Graphs; von Befehlsbeispielen bis hin zu Tracing-Tools und Visualisierung lässt sich alles direkt aufrufen
- Die Dokumentationsmaterialien reichen von Netflix’ Performance-Analyse-Artikel aus dem Jahr 2015 über EC2-Tuning, Linux load averages, frame pointers und gdb-Beispiele bis hin zu zwei Performance-Büchern
- Die Vortragsliste bietet situationsbezogene Lernpfade wie eine 40-Minuten-Übersicht, ein 90-Minuten-Tool-Tutorial, Container-Performance-Analyse und eine SRE-Checkliste
- Bei jeder Tool-Map sollte die Aktualität über das Jahr unten rechts im Bild geprüft werden; das integrierte Diagramm ist nicht so vollständig wie die anderen Einzelgrafiken
Hub für Performance-Materialien und Tool-Maps
- Diese Seite ist ein Link-Hub mit von Brendan Gregg zusammengestellten Linux-Performance-Materialien
- Die Tool-Map-Grafik rechts wurde mit großer Schrift für Foliensätze erstellt und ist in einem Format gehalten, das man ausdrucken und an die Bürowand hängen kann
- Die Tool-Maps gliedern Linux-Performance-Arbeit in die folgenden Bereiche
- Wie aktuell die einzelnen Bilder sind, sollte über das Jahr unten rechts geprüft werden
- Ein hochauflösendes Diagramm, das Observability, statisches Performance-Tuning und perf-tools/bcc zusammenführt, wird ebenfalls separat angeboten
Direkt verlinkte Hauptwerkzeuge
- perf: perf one-liners, Beispiele und Visualisierungsmaterialien
- eBPF tools: BPF/bcc-Tracing-Tools und Beispiele
- perf-tools: Ftrace-basierte perf-Werkzeugsammlung
- bcc: Sammlung von BPF/bcc-Performance-Tools
- bpftrace: Sammlung von BPF/bpftrace-Performance-Tools
- Flame Graphs: Verwendung von Flame Graphs mit perf und anderen Profilern
Dokumentation und Lernmaterialien
- Linux Performance Analysis in 60,000 Milliseconds ist Netflix-Material aus dem Jahr 2015, das die ersten zehn Befehle für den Einstieg in Performance-Untersuchungen zusammenfasst
- Performance Tuning Linux Instances on EC2 enthält die bei Netflix verwendeten EC2-Linux-Tuning-Werte
- Linux Load Averages: Solving the Mystery behandelt die Bedeutung von Linux load average und warum der Zustand uninterruptible sleep darin enthalten ist
- The Return of the Frame Pointers erklärt die Rolle von frame pointers, warum sie in wichtigen Linux-Distributionen zurückkehren und welche anderen Stack-Walking-Techniken es gibt
- gdb Debugging Full Example ist ein gdb-Tutorial, das auch die Nutzung von perf-/Debugging-Tools umfasst
- Systems Performance: Enterprise and the Cloud, 2nd Edition behandelt Methoden der Performance-Analyse und Linux-Tools, darunter perf, Ftrace und eBPF
- BPF Performance Tools behandelt mehr als 100 eBPF-Performance-Analysetools zusammen mit kurzen Zusammenfassungen traditioneller Werkzeuge
- Wenn Systems Performance 2nd Edition Band 1 ist, entspricht dieses Buch eher Band 2
- Materialien zum Erstellen von Flame Graphs mit perf und eBPF unter Linux werden ebenfalls separat angeboten
Vertiefende Artikel zu eBPF, ftrace und perf
- Artikel zu eBPF, bcc und bpftrace erschienen fortlaufend von 2015 bis 2023
- Ftrace: The Hidden Light Switch ist ein Artikel auf lwn.net, der Anwendungsfälle von Linux ftrace behandelt
- Artikel zu ftrace-basierten perf-tools wurden über 2014 bis 2015 hinweg veröffentlicht und umfassen Beiträge zu iosnoop, opensnoop, execsnoop, tcpretrans, Page Cache Hit Ratio, uprobe und USDT
- perf-basierte Materialien decken perf_events und CPU sampling, static tracepoints, heat maps, counting, kernel line tracing, off-CPU flame graphs, Netflix Linux profiling, Java mixed-mode flame graphs und perf sched ab
- Working Set Size Estimation ist Material zur Schätzung der Working Set Size unter Linux
- KPTI/KAISER Meltdown Initial Performance Regressions behandelt die Performance-Regressionen im Zusammenhang mit Meltdown im Jahr 2018
- CPU Utilization is Wrong behandelt das wachsende Problem, dass memory stall cycles die Kennzahl %CPU dominieren
- USE Method: Linux Performance Checklist und Off-CPU Analysis Method sind Materialien zur Methodik der Linux-Performance-Analyse
Empfohlene Vorträge nach Situation
-
Linux Systems Performance, USENIX LISA 2019
-
Linux Performance 2018, PerconaLive 2018
- Fasst die aktuellen Änderungen und Funktionen der Linux-Performance im Jahr 2018 in einer 20-minütigen Keynote zusammen
- youtube, slideshare, PDF
-
Linux Performance Tools, Velocity 2015
- Ein 90-minütiges Tutorial zu Performance-Observability, Benchmarking, Tuning, statischem Performance-Tuning, Tracing-Tools und -Methoden sowie Live-Demos
- youtube playlist, slideshare, PDF
-
How Netflix Tunes EC2 Instances for Performance, AWS re:Invent 2017
- Legt den Fokus stärker auf Tuning als auf Performance-Observability und behandelt den Netflix-Hintergrund, AWS-EC2-Instanztypen und -Features, Linux-kernel tunables sowie Observability
- youtube, slideshare
-
Container Performance Analysis, DockerCon 2017
- Behandelt, wie man Engpässe im Host oder Container findet, Container-Apps profiliert und tiefer bis in den Kernel vordringt
- youtube, slideshare
-
Broken Linux Performance Tools, SCaLE14x 2016
- Behandelt häufige Probleme bei Linux-System-Tools, Metriken, Statistiken, Visualisierung, Mess-Overhead und Benchmarks sowie Ratschläge im Abschnitt „What You Can Do“
- youtube, slideshare, PDF
-
Using Linux perf at Netflix, Kernel Recipes 2017
- Fokussiert auf CPU-Profiling und die Funktionsweise von Flame Graphs und behandelt Probleme mit Stack Traces und Symbols beim Profiling von perf_events-Eigenschaften sowie Java, Node.js, VMs und Containern
- youtube, slideshare
-
Give me 15 minutes and I'll change your view of Linux tracing, LISA 2016
- Eine Demo von ftrace, perf und bcc/BPF
- youtube, full talk video, slides
-
Performance analysis superpowers with Linux eBPF, O’Reilly Velocity 2017
- Behandelt den Einsatz von enhanced BPF, also eBPF, das zur Linux-4.x-Serie hinzugefügt wurde, für Performance-Analyse, Observability und Debugging
- Das Frontend ist das Open-Source-Projekt bcc, das die BPF-Schnittstelle und ein Toolset bereitstellt
- youtube, slideshare, PDF
-
Linux Performance Analysis: New Tools and Old Secrets, LISA 2014
- Behandelt die Tools ftrace und perf_events sowie perf-tools, das hauptsächlich ftrace verwendet
- ftrace wird als Tracer vorgestellt, der seit vielen Jahren in den Linux-Kernel integriert ist, aber kaum entdeckt wurde
- youtube, slideshare, PDF
-
Performance Checklists for SREs, SREcon 2016
- Enthält im hinteren Teil eine Checkliste für Linux-Incident-Performance-Response und kann auch für dringende Linux-Performance-Analysen nützlich sein
- youtube, usenix, slideshare, PDF
Externe Empfehlungen
- RHEL Performance Guide enthält viele CLI-Tools und Tunables
- Performance analysis & tuning of Red Hat Enterprise Linux - 2015 Red Hat Summit ist ein zweistündiges Video, das Linux-Performance-Tuning tiefgehend behandelt und auf die meisten Linux-Distributionen anwendbar ist
- Linux Instrumentation ist ein Foliensatz zu einem Vortrag von Ian Munsie aus dem Juni 2010 und fasst verschiedene Linux-Tracer zusammen
- Julia Evans blog bietet Beiträge zu verschiedenen Themen, darunter Performance-Tools
- Davidlohr Buesos Linux-Performance-Beiträge gehören ebenfalls zu den empfohlenen Materialien
1 Kommentare
Hacker-News-Meinungen
Ich nutze tuned auf einem Debian/Ubuntu-VPS, auf dem Echtzeit-Apps laufen, und es funktioniert ziemlich gut.
Es ist einfacher, als Kernel-Parameter, also sysctl-Einstellungen oder Kernel-Tunables, direkt zu ändern.
https://access.redhat.com/documentation/en-us/red_hat_enterp...
sudo apt install tunedIch wusste gar nicht, dass Brendan Gregg inzwischen bei Intel ist.
https://en.wikipedia.org/wiki/Brendan_Gregg
Er ist auch die Hauptfigur des viralen Videos Shouting in the Data Center.
https://www.youtube.com/watch?v=tDacjrSCeq4
Ein echtes Genie.
Es ist erwähnenswert, dass es bei fast allem im Original nicht um Latenz geht, sondern um Durchsatz/Bandbreite von Netzwerk, Festplatte, sonstiger Ein-/Ausgabe und CPU.
Für viele Leute bedeutet Performance eben Durchsatz, insofern verständlich. Es gibt aber auch Fälle, in denen Latenz viel wichtiger ist als Durchsatz, und um Latenz unter Linux zu tunen, braucht man ein anderes Set an Werkzeugen.
Eine weitere Achse, auf der man optimieren kann, ist Performance pro Watt, aber darauf gehe ich hier nicht weiter ein.
Manchmal ist Durchsatzoptimierung zugleich Latenzoptimierung. Wenn man zum Beispiel mehr Prozesse auf eine Maschine packen kann, sinkt die durchschnittliche Entfernung zwischen Prozess und Kommunikationsziel, und damit auch die durchschnittliche Latenz.
Beim Optimieren von Latenz ist es ein ganz naheliegender Schritt, den Durchsatz so weit zu erhöhen, dass er nicht zum Flaschenhals wird.
Wenn man Latenz aggressiv optimiert, habe ich den Eindruck, dass es bei Linux selbst gar nicht so viele Tuning-Schrauben gibt. Ich kann mich irren, aber meist scheinen Core Pinning, tickless Ausführung, User-Space-Networking und hardwareseitige Anpassungen wie Seitengröße, SMT, Energiespareinstellungen und Hardwareauswahl im Mittelpunkt zu stehen.
[1] https://pdfs.semanticscholar.org/bce7/5f78d340cac32dccd8631f...
Manchmal kann man beides verbessern, meistens ist es aber ein Trade-off.
Warten ist auch eine gute Strategie.
Seit Linux 6.5 versteht der Scheduler, dass es nicht unbedingt optimal ist, etwas auf einem anderen „Kern“ zu platzieren, wenn ein SMT-„Kern“ ausgelastet ist. Tatsächlich ähnelt das eher einem einzelnen Kern mit sehr niedrigen Kosten für Kontextwechsel.
Dadurch sind stark parallele Aufgaben spürbar flotter geworden, und man sieht es auch in den CPU-Auslastungsdiagrammen.
Wegen Cache-Kohärenz und NUMA-Problemen können die Ergebnisse unterschiedlich ausfallen.
Verwandte Beiträge:
Linux Performance - https://news.ycombinator.com/item?id=13498485 - Januar 2017, 64 Kommentare
Linux Performance - https://news.ycombinator.com/item?id=8205057 - August 2014, 22 Kommentare
Wenn jemand einen tunable Parameter ändern will, aber nicht erklären kann, warum diese Änderung den gewünschten Effekt haben sollte und warum der Wert überhaupt so gesetzt ist, würde ich die Änderung in der Produktion nicht zulassen.
Man könnte das „Chestertons tunable Parameter“ nennen.
Angesichts von Brendans eBPF-Arbeit verstehe ich dieses Material eher als Weg, unterschiedliche Performance-Situationen einfacher zu überwachen und zu bewerten.
Bei Anpassungen und Tuning gibt es Trade-offs, und oft geht die Optimierung einer Seite zulasten einer anderen.
Nebenbei: btop war als All-in-one-TUI-Viewer für Systemperformance und Last ein sehr nützlicher Ersatz für glances. Mich würde interessieren, wie stark Entwickler das nutzen und ob es Motivation gibt, bessere TUI-Monitoring-Tools zu bauen.
Wenn ich auf einen Server gehe, starte ich als Erstes tmux und weise ein Fenster btop zu.
Für mich bedeutet Linux-Performance-„Tuning“ im Grunde das Deaktivieren der Spectre/Meltdown-Mitigationen.
In diesem Fall laufen die Compute-Nodes in einer VPC ohne Internetzugang, daher wirkt das Risiko ziemlich gering.
Dieser konkrete Crash scheint behoben zu sein, aber ich würde es trotzdem nicht empfehlen. Moderne CPUs von AMD und Intel sind darauf ausgelegt, zumindest mit den grundlegenden Mitigationen aktiviert zu laufen.
Als Lesezeichen gespeichert. Wird mir vermutlich bald bei etwas nützen, an dem ich gerade arbeite
Ich habe die Folien noch nicht komplett gelesen, frage mich aber, ob jemand schon einmal durch Kernel-Build-Optionen einen spürbaren Performance-Gewinn gesehen hat
Früher, als ich Gentoo nutzte und an Build-Flags herumgeschraubt habe, habe ich das Kernel-Makefile geändert, um
-O3zu verwenden, und einen Patch für-march=nativeangewendet. Rückblickend scheint das laut Phoronix-Benchmarks bei mehreren Workloads eher schädlich zu sein; ich frage mich, ob jemand Gegenbeispiele gesehen hatGute Site. Sie neigt dazu, Linux-Performance zusammenzufassen, ob Tuning oder Monitoring, und lässt einen erst einmal tief Luft holen
Das Thema ist tief, und es gibt sehr viele Arten von Beobachtungstools. Zumindest uptime, dmesg und iostat sollte man gut kennen. Diese Tools geben einen Überblick über verschiedene Systemaspekte wie Last, Speicher und CPU und liefern erste Hinweise für die Zustandsdiagnose. Das ist Seite 1 von 100 meiner „Schauen wir mal rein“-Checkliste
In der Methodik der Performance-Analyse werden sorgfältige Benchmarks empfohlen, um das Systemverhalten und die Workload-Eigenschaften ganzheitlich zu bewerten. Man sollte Szenarien vor und nach Änderungen vergleichen, zunächst kleine Änderungen vornehmen und dann diejenigen, die einen Nutzen bringen, schrittweise zusammenführen. Labor und Produktionsumgebung verhalten sich niemals exakt gleich
Ab hier wird es knifflig. CPU-Profiling mit Tools wie
perfund Visualisierungen wie Flame Graphs ermöglichen eine gezielte Analyse der CPU-Aktivität; ergänzt um das Tracking von Hardware-Events lässt sich die Recheneffizienz weiter optimieren. Man muss mehr wissen als nur „Das ist ein App-Problem, vor dem letzten Release des Entwicklerteams war alles in Ordnung“Wenn man als Admin mit Entwicklern spricht, braucht man unter Linux Tools wie ftrace und BPF. Damit lassen sich die Ausführung von Kernel-Funktionen und Systemaufrufe detailliert nachverfolgen, was für Fehlerbehebung und Performance-Optimierung wichtig ist. Umgekehrt muss man als Entwickler möglicherweise die Intuition des Admins überprüfen. Wie man sagt: Vertrauen ist gut, Kontrolle ist besser
Wenn es der eigene Code ist, sollte man BPF kennen. BPF ermöglicht nicht nur effizientes Tracing im Kernel, sondern unterstützt auch die Entwicklung fortgeschrittener, maßgeschneiderter Profiling-Tools mit bcc und bpftrace und erlaubt tiefere Einblicke in die System-Performance
Abschließend: Das ist wirklich schwierig. Tuning bedeutet, zahlreiche Systemkomponenten und Kernel-Parameter anzupassen, von CPU und Speicher bis hin zu Netzwerkeinstellungen, um Performance und Zuverlässigkeit für unterschiedliche Workloads zu optimieren. Oder man schiebt es einfach auf das Netzwerk
In der Praxis braucht man eine gute Haltung zum Change Management. Das Nachjagen von Code oder Kernel-Parametern kann alle überfordern, und unter Zeitdruck steigt durch den Druck die Wahrscheinlichkeit menschlicher Fehler