Eine verschiedene Sammlung von in der Entwicklung befindlichen und nicht unterstützten Leistungsanalysetools für Linux ftrace und perf_events (auch bekannt als „perf“-Befehl). Sowohl ftrace als auch perf sind zentrale Linux-Tracing-Tools, die in der Kernel-Quelle enthalten sind. Ihr System verfügt wahrscheinlich bereits über ftrace und perf ist oft nur ein hinzugefügtes Paket (siehe Voraussetzungen).
Diese Tools sind so konzipiert, dass sie einfach zu installieren sind (geringste Abhängigkeiten), eine erweiterte Leistungsbeobachtbarkeit bieten und einfach zu verwenden sind: Eines tun und es gut machen. Diese Sammlung wurde von Brendan Gregg (Autor des DTraceToolkit) erstellt.
Viele dieser Tools verwenden Workarounds, sodass die Funktionalität auf vorhandenen Linux-Kerneln möglich ist. Aus diesem Grund weisen viele Tools Einschränkungen auf (siehe Manpages) und ihre Implementierung sollte als Platzhalter betrachtet werden, bis zukünftige Kernelfunktionen oder neue Tracing-Subsysteme hinzugefügt werden.
Diese sind für Linux 3.2 und neuere Kernel gedacht. Für Linux 2.6.x siehe Warnungen.
Diese Tools wurden in der USENIX LISA 2014-Präsentation vorgestellt: Linux Performance Analysis: New Tools and Old Secrets
Mit ftrace:
Verwendung von perf_events:
Verwendung von eBPF:
Neue Prozesse und Argumente aufzeigen:
# ./execsnoop exec()s verfolgen. Strg-C zum Beenden. PID PPID ARGS 22898 22004 Mann ls 22905 22898 preconv -e UTF-8 22908 22898 Pager -s 22907 22898 nroff -mandoc -rLL=164n -rLT=164n -Tutf8 22906 22898 Tabl 22911 22910 Gebietsschema Charmap 22912 22907 groff -mtty-char -Tutf8 -mandoc -rLL=164n -rLT=164n 22913 22912 troff -mtty-char -mandoc -rLL=164n -rLT=164n -Tutf8 22914 22912 schäbig
Messen der E/A-Latenz von Blockgeräten vom Einfügen in die Warteschlange bis zum Abschluss:
# ./iolatency -Q Block-E/A verfolgen. Ausgabe alle 1 Sekunde. Strg-C zum Beenden. >=(ms) .. <(ms) : E/A |Verteilung | 0 -> 1 : 1913 |####################################| 1 -> 2 : 438 |######### | 2 -> 4 : 100 |## | 4 -> 8 : 145 |### | 8 -> 16 : 43 |# | 16 -> 32 : 43 |# | 32 -> 64 : 1 |# | [...]
Verfolgung des Block:block_rq_insert-Tracepoints mit Kernel-Stack-Traces und nur für Lesevorgänge:
# ./tpoint -s block:block_rq_insert 'rwbs ~ "*R*"' cksum-11908 [000] d... 7269839.919098: block_rq_insert: 202,1 R 0 () 736560 + 136 [cksum] cksum-11908 [000] d... 7269839.919107: => __elv_add_request => blk_flush_plug_list => blk_finish_plug => __do_page_cache_readahead => ondemand_readahead => page_cache_async_readahead => generic_file_read_iter => new_sync_read => vfs_read => SyS_read => system_call_fastpath [...]
Zählen Sie Kernel-Funktionsaufrufe, die mit „bio_“ beginnen, und fassen Sie jede Sekunde zusammen:
# ./funccount -i 1 'bio_*' „bio_*“ verfolgen... Strg-C zum Beenden. FUNKZÄHLER bio_attempt_back_merge 26 bio_get_nr_vecs 361 bio_alloc 536 bio_alloc_bioset 536 bio_endio 536 bio_free 536 bio_fs_destructor 536 bio_init 536 bio_integrity_enabled 536 bio_put 729 bio_add_page 1004 [...]
Im Beispielverzeichnis finden Sie viele weitere Beispiele. Siehe auch die Manpages.
Die Absicht ist so gering wie möglich. ZB ein Linux 3.2-Server ohne Debuginfo. Einzelheiten finden Sie auf der Manpage des Tools.
FTRACE im Kernel konfiguriert. Möglicherweise ist dies bereits in Ihrer Kernel-Version konfiguriert und verfügbar, da FTRACE erstmals in 2.6.27 hinzugefügt wurde. Dies erfordert je nach Tool CONFIG_FTRACE und andere FTRACE-Optionen. Einige Tools (z. B. funccount) erfordern CONFIG_FUNCTION_PROFILER.
Erfordert die Installation des Befehls „perf“. Dies ist im Paket linux-tools-common enthalten. Nach der Installation fordert Sie perf möglicherweise auf, ein zusätzliches Linux-Tools-Paket (linux-tools -kernel_version ) zu installieren. perf kann auch unter tools/perf in der Kernel-Quelle erstellt werden. Weitere Informationen dazu, wie Sie perf_events vollständig zum Funktionieren bringen, finden Sie unter „Voraussetzungen für perf_events“.
Erfordert einen Kernel mit aktivierter CONFIG_DEBUG_FS-Option. Wie bei FTRACE ist dies möglicherweise bereits aktiviert (debugfs wurde in 2.6.10-rc3 hinzugefügt). Die debugfs müssen ebenfalls gemountet werden:
# mount -t debugfs none /sys/kernel/debug
Viele dieser Skripte verwenden awk und versuchen, je nach gewünschtem Verhalten entweder mawk oder gawk zu verwenden: mawk für gepufferte Ausgabe (aufgrund der Geschwindigkeit) und gawk für synchrone Ausgabe (da fflush() funktioniert, was eine effizientere Gruppierung ermöglicht). schreibt).
Das sind nur Skripte. Entweder schnapp dir alles:
git clone --depth 1 https://github.com/brendangregg/perf-tools
Oder nutzen Sie die Raw-Links auf Github, um einzelne Skripte herunterzuladen. Z.B:
wget https://raw.githubusercontent.com/brendangregg/perf-tools/master/iosnoop
Dadurch bleiben Tabs erhalten (was durch Kopieren und Einfügen zu Problemen führen kann).
Ftrace wurde erstmals zu Linux 2.6.27 und perf_events zu Linux 2.6.31 hinzugefügt. Diese frühen Versionen hatten Kernel-Fehler und es wurden Abstürze und Paniken bei Kerneln der Serie 2.6.32 gemeldet. Dazu gehört CentOS 6.x. Wenn Sie ältere Kernel analysieren müssen, sind diese Tools möglicherweise nur in einer fehlertoleranten Umgebung nützlich, beispielsweise in einem Labor mit simulierten Problemen. Diese Tools wurden hauptsächlich für Linux 3.2 und spätere Kernel entwickelt.
Je nach Werkzeug kann auch ein Mehraufwand entstehen. Siehe den nächsten Abschnitt.
perf_events entwickelt sich weiter. Die Entwicklung dieser Sammlung begann um Linux 3.16, mit Linux 3.2-Servern als Hauptziel, zu einer Zeit, als perf_events bestimmte programmatische Fähigkeiten fehlten (z. B. benutzerdefinierte In-Kernel-Aggregationen). Es ist möglich, dass diese in einer kommenden Kernel-Version hinzugefügt werden. Bis dahin nutzen viele dieser Tools Workarounds, Tricks und Hacks, um zu funktionieren. Einige dieser Tools übergeben Ereignisdaten zur Nachbearbeitung an den Benutzerbereich, was einen viel höheren Overhead verursacht als Aggregationen im Kernel. Der Overhead jedes Tools wird in seiner Manpage beschrieben.
WARNUNG : In extremen Fällen kann Ihre Zielanwendung bei Verwendung dieser Tools fünfmal langsamer laufen. Je nach Tool und Kernel-Version kann auch die Gefahr einer Kernel-Panic bestehen. Lesen Sie den Programmkopf auf Warnungen und testen Sie ihn vor der Verwendung.
Wenn der Overhead ein Problem darstellt, können diese Tools verbessert werden. Wenn ein Tool dies noch nicht tut, könnte es in C umgeschrieben werden, um perf_events_open() und mmap() für den Trace-Puffer zu verwenden. Es könnte auch Häufigkeitszählungen in C implementieren und direkt mit mmap() arbeiten, anstatt awk/Perl/Python zu verwenden. Für Ftrace-basierte Tools sind weitere Verbesserungen möglich, beispielsweise die Verwendung von Snapshots und instanzbezogenen Puffern.
Einige dieser Tools sind als kurzfristige Workarounds gedacht, bis mehr Kernel-Funktionen vorhanden sind und sie dann grundlegend neu geschrieben werden können. Ältere Versionen dieser Tools werden für ältere Kernel-Versionen in diesem Repository aufbewahrt.
Da mein Hauptziel eine Flotte von Linux 3.2-Servern ist, die keine Debuginformationen haben, versuchen diese Tools, diese nicht zu erfordern. Manchmal wird das Tool dadurch anfälliger als nötig, da ich Problemumgehungen (die möglicherweise Kernel-Versions- und plattformspezifisch sind) verwende, anstatt Debuginfo-Informationen (die generisch sein können) zu verwenden. Detaillierte Voraussetzungen für jedes Tool finden Sie auf der Manpage.
Ich habe versucht, nach Möglichkeit perf_events („perf“) zu verwenden, da diese Schnittstelle für die Verwendung durch mehrere Benutzer entwickelt wurde. Aus verschiedenen Gründen musste ich stattdessen oft ftrace verwenden. ftrace ist überraschend leistungsstark (danke Steven Rostedt!), und nicht alle seiner Funktionen werden über perf oder im allgemeinen Sprachgebrauch verfügbar gemacht. Diese Toolsammlung ist in gewisser Weise eine Demonstration versteckter Linux-Funktionen, die ftrace verwenden.
Da sich die Dinge ändern, ist es sehr wahrscheinlich, dass einige Tools auf Ihrer Linux-Kernelversion nicht funktionieren. Um sie zu reparieren, sind einige Fachkenntnisse und Montage erforderlich.
Eine Fallstudie und Zusammenfassung:
Verwandte Artikel: