Dies ist der Befehl „trace-cmd-record“, der beim kostenlosen Hosting-Anbieter OnWorks mit einer unserer zahlreichen kostenlosen Online-Workstations wie Ubuntu Online, Fedora Online, dem Windows-Online-Emulator oder dem MAC OS-Online-Emulator ausgeführt werden kann
PROGRAMM:
NAME/FUNKTION
Trace-cmd-Record – Zeichnen Sie einen Trace vom internen Tracer von Ftrace Linux auf
ZUSAMMENFASSUNG
Trace-Befehl Rekord [OPTIONAL] [Befehl]
BESCHREIBUNG
Die Trace-Befehl(1) Der Befehl „record“ richtet den Ftrace Linux-Kernel-Tracer zum Aufzeichnen ein
angegebene Plugins oder Ereignisse, die während der Befehl ausführt. Wenn kein Befehl vorhanden ist
gegeben, dann wird aufgezeichnet, bis der Benutzer Strg-C drückt.
Der Befehl „record“ von „trace-cmd“ richtet den Ftrace-Tracer ein, um mit der Verfolgung der verschiedenen Daten zu beginnen
Ereignisse oder Plugins, die in der Befehlszeile angegeben werden. Es werden dann mehrere erstellt
Verfolgen von Prozessen (einer pro CPU), die mit der Aufzeichnung aus dem Kernel-Ringpuffer beginnen
direkt in temporäre Dateien. Wenn der Befehl abgeschlossen ist (oder Strg-C gedrückt wird), werden alle
Dateien werden zu einer Trace.dat-Datei zusammengefasst, die später gelesen werden kann (siehe
Trace-Befehl-Bericht(1)).
OPTIONAL
-p Plugin
Geben Sie ein Trace-Plugin an. Plugins sind spezielle Ftrace-Tracer, die normalerweise mehr als tun
Verfolgen Sie einfach ein Ereignis. Gängige Plugins sind Funktion, function_graph, preemptirqsoff,
irqsoff, Präemptiv und aufwachen. Ein Plugin muss vom laufenden Kernel unterstützt werden. Zu
Eine Liste der verfügbaren Plugins finden Sie unter Trace-Cmd-Liste(1).
-e Event
Geben Sie ein Ereignis an, das verfolgt werden soll. Dem Linux wurden verschiedene statische Trace-Punkte hinzugefügt
Kernel. Sie sind nach Subsystemen gruppiert, in denen Sie alle Ereignisse eines bestimmten Systems aktivieren können
Subsystem oder geben Sie bestimmte Ereignisse an, die aktiviert werden sollen. Der Event ist vom Format
„Subsystem:Ereignisname“. Sie können das Subsystem auch einfach ohne angeben
:Veranstaltungsname oder der Ereignisname ohne das „Subsystem:“. Die Verwendung von „-e sched_switch“ wird
Aktivieren Sie das Ereignis „sched_switch“, wobei „-e sched“ alle Ereignisse unter dem aktiviert
„sched“-Subsystem.
Das „Ereignis“ kann auch Glob-Ausdrücke enthalten. Das heißt, „*stat*“ wird es tun
Wählen Sie alle Ereignisse (oder Subsysteme) aus, die die Zeichen „stat“ enthalten
Namen.
Mit dem Schlüsselwort „all“ können alle Ereignisse aktiviert werden.
-a
Für jedes aufgezeichnete Ereignis wird die Ausgabeformatdatei in der Ausgabedatei gespeichert
um es später anzeigen zu können. Wenn jedoch andere Ereignisse im Trace aktiviert sind, ohne
Nach Kenntnis von Trace-CMD werden die Formate dieser Ereignisse nicht aufgezeichnet und Trace-CMD
Der Bericht kann sie nicht anzeigen. Wenn dies der Fall ist, geben Sie Folgendes an -a
Option und das Format für alle Ereignisse im System wird gespeichert.
-T
Aktivieren Sie einen Stacktrace für jedes Ereignis. Zum Beispiel:
-0 [003] 58549.289091: sched_switch: kworker/0:1:0 [120] R ==> Trace-cmd:2603 [120]
-0 [003] 58549.289092: kernel_stack:
=> Zeitplan (ffffffff814b260e)
=> cpu_idle (ffffffff8100a38c)
=> start_secondary (ffffffff814ab828)
--func-stack
Aktivieren Sie einen Stack-Trace für alle Funktionen. Beachten Sie, dass dies nur für die „Funktion“ gilt.
Plugin-Tracer und wird nur wirksam, wenn die Option -l erfolgreich verwendet wird
begrenzende Funktionen. Wenn der Funktions-Tracer nicht gefiltert wird, der Stack-Trace jedoch
aktiviert, können Sie die Maschine live sperren.
-f Filter
Geben Sie einen Filter für das vorherige Ereignis an. Dies muss nach a kommen -e. Dadurch wird gefiltert
welche Ereignisse basierend auf dem Inhalt der Veranstaltung aufgezeichnet werden. Die Filterung wird an die übergeben
direkt in den Kernel ein, sodass die zulässige Filterung möglicherweise von der Kernelversion abhängt
du hast. Grundsätzlich können Sie die C-Notation verwenden, um zu überprüfen, ob ein Ereignis stattfinden sollte
verarbeitet werden oder nicht.
==, >=, <=, >, <, &, |, && und ||
Die oben genannten Felder können normalerweise sicher zum Vergleichen von Feldern verwendet werden.
-R auslösen
Geben Sie einen Auslöser für das vorherige Ereignis an. Dies muss nach a kommen -e. Dies wird a . hinzufügen
gegebener Auslöser für das gegebene Ereignis. Um nur den Auslöser und nicht das Ereignis selbst zu aktivieren,
Platzieren Sie dann das Ereignis nach dem -v .
Weitere Informationen finden Sie unter Documentation/trace/events.txt in der Linux-Kernel-Quelle
Informationen zu Auslösern.
-v
Dies führt dazu, dass alle danach in der Befehlszeile angegebenen Ereignisse nicht nachverfolgt werden.
Dies ist nützlich, um ein zu verfolgendes Subsystem auszuwählen, aber verschiedene Ereignisse auszulassen.
Beispiel: „-e sched -v -e „*stat\*““ aktiviert alle Ereignisse im Sched-Subsystem
außer denen, deren Namen „stat“ enthalten.
Hinweis: Die Option *-v* wurde übrigens übernommen grep(1) kehrt Folgendes um
Streichhölzer.
-F
Dadurch wird nur die ausführbare Datei gefiltert, die in der Befehlszeile angegeben ist. Wenn kein Befehl
gegeben ist, dann filtert es sich selbst (ziemlich sinnlos). Benutzen -F lässt Sie aufspüren
Nur Ereignisse, die durch den angegebenen Befehl verursacht werden.
-P pid
Ähnlich -F Sie können jedoch eine zu verfolgende Prozess-ID angeben.
-c
Wird mit beiden verwendet -F um auch die Kinder des Prozesses zu verfolgen.
-C Uhr
Stellen Sie die Trace-Uhr auf „clock“.
Nutzen Sie Trace-Befehl(1) list -C, um zu sehen, welche Uhren verfügbar sind.
-o Ausgabedatei
Standardmäßig erstellt der Trace-CMD-Bericht eine Trace.dat Datei. Sie können eine andere angeben
Datei, in die mit dem geschrieben werden soll -o .
-l Funktionsname
Dadurch wird die begrenzt Funktion und function_graph Tracer, um nur das Gegebene zu verfolgen
Funktionsname. Mehr als eine -l kann in der Befehlszeile angegeben werden, um mehr zu verfolgen
mehr als eine Funktion. Die eingeschränkte Verwendung von Glob-Ausdrücken ist ebenfalls zulässig. Diese sind
übereinstimmen* um nur Funktionen zu filtern, die mit beginnen Spiel. *übereinstimmen nur filtern
Funktionen, die mit enden Spiel. *übereinstimmen\* um nur nach Funktionen zu filtern, die enthalten
Spiel.
-g Funktionsname
Diese Option ist für das function_graph-Plugin. Es wird die gegebene Funktion grafisch darstellen. Das
Das heißt, es werden nur die Funktion und alle von ihr aufgerufenen Funktionen verfolgt. Sie können mehr haben
als eines -g in der Kommandozeile.
-n Funktionsname
Dies hat den gegenteiligen Effekt -l. Die mit gegebene Funktion -n Option wird nicht sein
verfolgt. Dies gilt dann vorrangig, wenn Sie für beide die gleiche Funktion einbinden -n
und -l, es wird nicht zurückverfolgt.
-d
Einige Tracer-Plugins aktivieren die Funktion Tracer standardmäßig. Wie die Latenz-Tracer.
Diese Option verhindert, dass der Funktions-Tracer beim Start aktiviert wird.
-D
Die Option -d Ich werde versuchen, die Funktion-Trace-Option zu verwenden, um den Funktions-Tracer zu deaktivieren
(falls verfügbar), andernfalls wird standardmäßig die proc-Datei verwendet:
/proc/sys/kernel/ftrace_enabled, berührt es aber nicht, wenn die Option „function-trace“ vorhanden ist
verfügbar. Das -D Option deaktiviert sowohl die ftrace_enabled-Proc-Datei als auch die
Funktion-Trace-Option, falls vorhanden.
Beachten Sie, dass dadurch die Funktionsverfolgung für alle Benutzer, einschließlich Benutzer, deaktiviert wird
außerhalb von ftrace-Tracern (stack_tracer, perf usw.).
-O ganz ohne irgendetwas tun oder drücken zu müssen.
Ftrace verfügt über verschiedene Optionen, die aktiviert oder deaktiviert werden können. Dies ermöglicht Ihnen die Einstellung
ihnen. Anhängen des Textes nicht Auf eine Option wird diese deaktiviert. Zum Beispiel: „-O nograph-time“
deaktiviert die Ftrace-Option „graph-time“.
-s Intervall
Die Prozesse, die Trace-CMD erstellt, um aus dem Ringpuffer aufzuzeichnen, müssen aktiviert werden
Mach die Aufnahme. Einstellen der Intervall auf Null führt dazu, dass die Prozesse aufwachen
jedes Mal, wenn neue Daten in den Puffer geschrieben werden. Aber da Ftrace den Kernel aufzeichnet
Aktivität, der Akt dieses Prozesses, der wieder einschläft, kann neue Ereignisse in der Umgebung verursachen
Ringpuffer, der den Prozess wieder aufweckt. Dadurch werden unnötigerweise zusätzliche Daten hinzugefügt
in den Ringpuffer.
Die „Intervall“-Metrik ist Mikrosekunden. Der Standardwert ist auf 1000 (1 ms) eingestellt.
Dies ist die Zeit, die jeder Aufnahmevorgang in den Ruhezustand versetzt, bevor er aufwacht
Zeichnen Sie alle neuen Daten auf, die in den Ringpuffer geschrieben wurden.
-r Prioritätsliste
Die Priorität, mit der die Erfassungsthreads ausgeführt werden sollen. In einem ausgelasteten System erfolgt die Trace-Erfassung
Threads können unterbrochen werden und Ereignisse können verloren gehen. Dies erhöht die Priorität dieser
Threads auf die Echtzeitpriorität (FIFO). Aber nutzen Sie diese Option mit Vorsicht, sie kann auch
Ändern Sie das Verhalten des verfolgten Systems.
-b Größe
Dadurch wird die Ringpuffergröße auf festgelegt Größe Kilobyte. Denn der Ftrace-Ringpuffer ist
pro CPU, diese Größe ist die Größe jedes Ringpuffers pro CPU im Kernel. Benutzen
„-b 10000“ auf einem Rechner mit 4 CPUs führt dazu, dass Ftrace eine Gesamtpuffergröße von 40 hat
Megs.
-B Puffername
Wenn der Kernel mehrere Puffer unterstützt, wird dadurch ein Puffer mit dem angegebenen Namen hinzugefügt.
Wenn der Puffername bereits vorhanden ist, wird dieser Puffer nur zurückgesetzt und nicht gelöscht
am Ende der Datensatzausführung. Wenn der Puffer erstellt wird, wird er sofort entfernt
Ende der Ausführung (es sei denn, die -k eingestellt ist, oder Anfang Befehl verwendet wurde).
Nachdem ein Puffername angegeben wurde, werden alle danach hinzugefügten Ereignisse angezeigt
mit diesem Puffer verbunden. Wenn kein Puffer angegeben ist, oder ein Ereignis
Wird vor einem Puffernamen angegeben, wird er dem zugeordnet
Hauptpuffer (oberste Ebene).
Trace-Cmd Record -e Sched -B Block -e Block -B Time -e Timer Sleep 1
Dadurch werden alle geplanten Ereignisse im Hauptpuffer aktiviert. Es wird
Erstellen Sie dann eine „Block“-Pufferinstanz und aktivieren Sie alle darin enthaltenen Blockereignisse
dieser Puffer. Es wird eine „Zeit“-Pufferinstanz und alle Timer-Ereignisse erstellt
wird für dieses Ereignis aktiviert.
-m Größe
Die maximale Größe in Kilobyte, die ein Puffer pro CPU haben sollte. Hinweis: Aufgrund der Rundung auf
Je nach Seitengröße ist die Zahl möglicherweise nicht ganz korrekt. Auch dies geschieht durch Umschalten
zwischen zwei Puffern, die halb so groß sind wie angegeben, sodass die Ausgabe möglicherweise nicht von der angegebenen Größe ist
gegebene Größe, auch wenn viel mehr geschrieben wurde.
Verwenden Sie diese Option, um zu verhindern, dass Ihnen bei längeren Ausführungen der Speicherplatz ausgeht.
-M CPU-Maske
Legen Sie die CPU-Maske für die Ablaufverfolgung fest. Es betrifft nur die letzte angegebene Pufferinstanz. Wenn
Wenn es vor einer Pufferinstanz bereitgestellt wird, wirkt es sich auf den Hauptpuffer aus. Der Wert
Die angegebene Zahl muss eine Hexadezimalzahl sein.
Trace-CMD-Datensatz -p Funktion -M c -B Ereignisse13 -e alle -M 5
Wenn -M weggelassen wird, bleibt die Maske gleich. Um alles zu ermöglichen
CPUs übergeben den Wert „-1“.
-k
Standardmäßig werden die Puffer zurückgesetzt und deaktiviert, wenn „trace-cmd“ mit der Ablaufverfolgung fertig ist
die gesamte Ablaufverfolgung, die dadurch ermöglicht wurde. Diese Option verhindert, dass „trace-cmd“ den Tracer deaktiviert
und Zurücksetzen des Puffers. Diese Option ist nützlich zum Debuggen von Trace-CMD.
Hinweis: Normalerweise setzt Trace-CMD die Datei „tracing_on“ auf den ursprünglichen Wert zurück
war, bevor es aufgerufen wurde. Mit dieser Option wird die Datei auf Null gesetzt.
-i
Wenn ein Ereignis aufgelistet ist, das Trace-CMD nicht findet, wird es standardmäßig mit einem beendet
Fehler. Diese Option ignoriert einfach Ereignisse, die in der Befehlszeile aufgeführt sind, aber dort aufgeführt sind
nicht im System gefunden.
-N Host: Port
Wenn auf einem anderen Computer „trace-cmd listen“ ausgeführt wird, wird diese Option verwendet, um die Daten abzurufen
mit UDP-Paketen an diesen Computer gesendet. Anstatt die Daten in eine Ausgabedatei zu schreiben
wird an eine Remote-Box gesendet. Dies ist ideal für eingebettete Maschinen mit wenig Speicherplatz,
oder einen einzigen Computer zu haben, der alle Daten in einem einzigen Repository speichert.
Hinweis: Diese Option wird mit Latenz-Tracer-Plugins nicht unterstützt:
wakeup, wakeup_rt, irqsoff, preemptoff und preemptirqsoff
-t
Diese Option wird mit verwendet -N, wenn die Live-Daten mit TCP gesendet werden müssen
Pakete statt UDP. Obwohl TCP bei weitem nicht so schnell ist wie das Senden von UDP-Paketen,
Dies kann jedoch erforderlich sein, wenn das Netzwerk und die Datenmenge nicht so zuverlässig sind
derart intensiv, und es muss gewährleistet werden, dass alle verfolgten Informationen übertragen werden
erfolgreich.
--Datum
Mit der --Datum Mit der Option „trace-cmd“ werden anschließend Zeitstempel in den Trace-Puffer geschrieben
Die Aufnahme ist beendet. Anschließend wird der Zeitstempel gettimeofday zugeordnet
Ermöglichen Sie die Ausgabe der Zeitstempel aus den erstellten Zeitstempeln Trace.dat Datei.
--Profil
Mit der --Profil Option „trace-cmd“ aktiviert die Ablaufverfolgung, die mit verwendet werden kann
Trace-Befehl-Bericht(1) Option --profile. Wenn ein Tracer -p ist nicht gesetzt, und Funktionsgraph
Wird die Tiefe vom Kernel unterstützt, wird der function_graph-Tracer mit aktiviert
eine Tiefe von eins (zeigt nur an, wo der Userspace in den Kernel eintritt). Es wird auch aktiviert
Verschiedene Tracepoints mit Stack-Tracing, sodass im Bericht angezeigt werden kann, wo sich Aufgaben befinden
ist seit langem gesperrt.
Weitere Informationen finden Sie auch in den Trace-CMD-Profil(1) für weitere Details und Beispiele.
-H Event-Hooks
Fügen Sie einen benutzerdefinierten Ereignisabgleich hinzu, um zwei beliebige Ereignisse miteinander zu verbinden. Bei Nichtgebrauch mit
--Profil, wird der Parameter gespeichert und dieser wird vom Trace-CMD-Bericht verwendet
--profile auch. Das ist:
Trace-Cmd-Datensatz -H hrtimer_expire_entry,hrtimer/hrtimer_expire_exit,hrtimer,sp
Trace-CMD-Bericht --profile
Profiliert die Zeiten hrtimer_expire_entry und hrtimer_expire_ext.
Weitere Informationen finden Sie auch in den Trace-CMD-Profil(1) für Format.
--stderr
Die Ausgabe soll an stderr statt an stdout gehen, aber die Ausgabe des Befehls wird ausgeführt
wird nicht geändert. Dies ist nützlich, wenn Sie die Ausgabe des Befehls überwachen möchten
ausgeführt wird, aber die Ausgabe von Trace-cmd wird nicht angezeigt.
Beispiele:
Der grundlegende Weg, alle Ereignisse zu verfolgen:
# Trace-cmd Record -e all ls > /dev/null
# Trace-CMD-Bericht
Trace-cmd-13541 [003] 106260.693809: filemap_fault: Adresse=0x128122 Offset=0xce
Trace-cmd-13543 [001] 106260.693809: kmalloc: call_site=81128dd4 ptr=0xffff88003dd83800 bytes_req=768 bytes_alloc=1024 gfp_flags=GFP_KERNEL|GFP_ZERO
ls-13545 [002] 106260.693809: kfree: call_site=810a7abb ptr=0x0
ls-13545 [002] 106260.693818: sys_exit_write: 0x1
So verwenden Sie den Funktions-Tracer mit der Zeitplanungsschalter-Ablaufverfolgung:
# Trace-cmd Record -p Funktion -e sched_switch ls > /dev/null
# Trace-CMD-Bericht
ls-13587 [002] 106467.860310: Funktion: hrtick_start_fair <-- pick_next_task_fair
ls-13587 [002] 106467.860313: sched_switch: prev_comm=trace-cmd prev_pid=13587 prev_prio=120 prev_state=R ==> next_comm=trace-cmd next_pid=13583 next_prio=120
Trace-cmd-13585 [001] 106467.860314: Funktion: native_set_pte_at <-- __do_fault
Trace-cmd-13586 [003] 106467.860314: Funktion: up_read <-- do_page_fault
ls-13587 [002] 106467.860317: Funktion: __phys_addr <-- Zeitplan
Trace-cmd-13585 [001] 106467.860318: Funktion: _raw_spin_unlock <-- __do_fault
ls-13587 [002] 106467.860320: Funktion: native_load_sp0 <-- __switch_to
Trace-cmd-13586 [003] 106467.860322: Funktion: down_read_trylock <-- do_page_fault
Hier ist eine gute Möglichkeit herauszufinden, welche Interrupts die höchste Latenz haben:
# Trace-CMD-Datensatz -p Funktionsgraph -e irq_handler_entry -l do_IRQ Schlaf 10
# Trace-CMD-Bericht
-0 [000] 157412.933969: funcgraph_entry: | do_IRQ() {
-0 [000] 157412.933974: irq_handler_entry: irq=48 name=eth0
-0 [000] 157412.934004: funcgraph_exit: + 36.358 us | }
-0 [000] 157413.895004: funcgraph_entry: | do_IRQ() {
-0 [000] 157413.895011: irq_handler_entry: irq=48 name=eth0
-0 [000] 157413.895026: funcgraph_exit: + 24.014 us | }
-0 [000] 157415.891762: funcgraph_entry: | do_IRQ() {
-0 [000] 157415.891769: irq_handler_entry: irq=48 name=eth0
-0 [000] 157415.891784: funcgraph_exit: + 22.928 us | }
-0 [000] 157415.934869: funcgraph_entry: | do_IRQ() {
-0 [000] 157415.934874: irq_handler_entry: irq=48 name=eth0
-0 [000] 157415.934906: funcgraph_exit: + 37.512 us | }
-0 [000] 157417.888373: funcgraph_entry: | do_IRQ() {
-0 [000] 157417.888381: irq_handler_entry: irq=48 name=eth0
-0 [000] 157417.888398: funcgraph_exit: + 25.943 us | }
Ein Beispiel für das Profil:
# Trace-cmd Record --profile Sleep 1
# Trace-cmd Report --profile --comm Sleep
Aufgabe: Schlaf-21611
Ereignis: sched_switch:R (1) Gesamt: 99442 Durchschnitt: 99442 Maximal: 99442 Min: 99442
1 gesamt:99442 min:99442 max:99442 avg=99442
=> ftrace_raw_event_sched_switch (0xffffffff8105f812)
=> __schedule (0xffffffff8150810a)
=> preempt_schedule (0xffffffff8150842e)
=> ___preempt_schedule (0xffffffff81273354)
=> cpu_stop_queue_work (0xffffffff810b03c5)
=> stop_one_cpu (0xffffffff810b063b)
=> sched_exec (0xffffffff8106136d)
=> do_execve_common.isra.27 (0xffffffff81148c89)
=> do_execve (0xffffffff811490b0)
=> SyS_execve (0xffffffff811492c4)
=> return_to_handler (0xffffffff8150e3c8)
=> stub_execve (0xffffffff8150c699)
Ereignis: sched_switch:S (1) Gesamt: 1000506680 Durchschnitt: 1000506680 Max: 1000506680 Min: 1000506680
1 gesamt:1000506680 min:1000506680 max:1000506680 avg=1000506680
=> ftrace_raw_event_sched_switch (0xffffffff8105f812)
=> __schedule (0xffffffff8150810a)
=> Zeitplan (0xffffffff815084b8)
=> do_nanosleep (0xffffffff8150b22c)
=> hrtimer_nanosleep (0xffffffff8108d647)
=> SyS_nanosleep (0xffffffff8108d72c)
=> return_to_handler (0xffffffff8150e3c8)
=> Tracesys_phase2 (0xffffffff8150c304)
Ereignis: sched_wakeup:21611 (1) Gesamt: 30326 Durchschnitt: 30326 Max: 30326 Min: 30326
1 gesamt:30326 min:30326 max:30326 avg=30326
=> ftrace_raw_event_sched_wakeup_template (0xffffffff8105f653)
=> ttwu_do_wakeup (0xffffffff810606eb)
=> ttwu_do_activate.constprop.124 (0xffffffff810607c8)
=> try_to_wake_up (0xffffffff8106340a)
Verwenden Sie Trace-CMD-Record online über die Dienste von onworks.net