Wie interpretiere ich Strace Output?
-
27-10-2019 - |
Frage
Ich muss die Leistung einer Anwendung profilieren, für die ich Strace verwende. Ich weiß jedoch nicht wirklich, wie man die verschiedenen Systeme als Strace -Emissionen interpretiert. Beispiele für einige von ihnen sind unten:
(A) lseek(3, 1600, SEEK_SET) = 1600
(B) write(3, "G_DATA 300 0 "..., 800) = 800
(C) close(3) = 0
(D) mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x2b600b179000
(E) munmap(0x2b600b179000, 4096) = 0
(F) fstat(3, {st_mode=S_IFREG|0644, st_size=1600, ...}) = 0
Ich wäre dankbar, wenn jemand in einfachem Englisch kurz erklären könnte, was diese Zeilen von (a) bis (f) wirklich in Bezug auf I/A, übertragene Daten, Bedeutung für die Leistung usw. bedeutet.
Ich ging durch die Mannseiten von Strace, bin aber immer noch nicht sehr zuversichtlich. Wenn Sie andere Zeiger für mich lesen, wäre das großartig.
Ich habe einige Hintergrundinformationen zu Betriebssystemen und verstehe, was Systemaufrufe, Speicher, virtueller Speicher, Planung usw. sind.
Lösung
Um diese zu verstehen, müssen Sie sich mit den POSIX -Systemaufrufen vertraut machen. Sie sind die Schnittstelle, die ein Benutzer-Raum-Programm verwendet, um mit dem Kernel zu interagieren.
lseek
, write
, close
, mmap
, munmap
und fstat
sind alle Systemaufrufe und sind in Abschnitt 2 des Linux -Handbuchs dokumentiert.
Knapp, lseek
Verschiebt den internen Zeiger des mitgelieferten Dateideskriptor SEEK_SET
(der Anfang), SEEK_CUR
(Stromposition) oder SEEK_END
(das Ende). Jede aufeinanderfolgende read
und write
Aufrufe auf denselben Deskriptor starten ihre Aktion von dieser Position aus. Beachten Sie, dass lseek
wird nicht für alle Arten von Deskriptoren implementiert - es ist sinnvoll für eine Datei auf der Festplatte, jedoch nicht für einen Sockel oder ein Rohr.
write
Kopiert den mitgelieferten Puffer in Kernespace und gibt die Anzahl der tatsächlich geschriebenen Bytes zurück. Abhängig von der Art des Deskriptors kann der Kernel die Daten an die Festplatte schreiben oder über das Netzwerk senden. Dies ist im Allgemeinen ein kostspieliger Betrieb, da diese Puffer an den Kernel übertragen werden.
close
Schließt den mitgelieferten Deskriptor und alle damit verbundenen Ressourcen im Kernel werden befreit. Beachten Sie, dass jeder Prozess eine Grenze für die Anzahl der gleichzeitig geöffneten Deskriptoren hat. Manchmal ist es erforderlich, Deskriptoren zu schließen, um diese Grenze nicht zu erreichen.
mmap
ist ein komplexer Systemaufruf und wird für viele Zwecke einschließlich gemeinsamer Speicher verwendet. Die allgemeine Verwendung besteht jedoch darin, mehr Speicher für den Prozess zuzuweisen. Das malloc
und calloc
Bibliotheksfunktionen verwenden es normalerweise intern.
munmap
befreit das mmap
'Ped -Speicher.
fstat
Gibt verschiedene Informationen zurück, die das Dateisystem über eine Datei behält - Größe, zuletzt geändert, Berechtigungen usw.
Andere Tipps
Für jeden Befehl gibt es eine manuelle Seite, die Sie durch Eingabe lesen können man
und der Name der C -Funktion, z. B. man lseek
(Auch überprüfen apropos
). Sie haben auch eine Beschreibung der bestandenen Parameter.
Hier sind kurze Zusammenfassungen:
lseek
- Read-/Schreibdateiversetzt des Dateideskriptors neu positionierenwrite
- Schreiben Sie an einen Dateideskriptor aus dem Pufferclose
- Löschen Sie einen Deskriptor aus der Referenztabelle pro Prozess-Objekt.mmap
- Speicher oder Kartendateien oder Geräte in den Speicher zuweisenmunmap
- Entfernen Sie eine Zuordnung für den angegebenen Adressbereichfstat
- Dateistatus erhalten, auf den durch Pfad hingewiesen wird
Bitte beachten Sie, dass die Interpretation von einzelnen/zufälligen Syscals in Bezug auf die Leistung nicht sinnvoll ist. Um die Bedeutung der Leistung dieser Systems zu testen, sollten Sie verwenden -c
Parameter, der Zeit, Aufrufe und Fehler für jede SYSCALLE zählen und die Zusammenfassung melden kann. Dann können Sie mehr darüber lesen, die am längsten dauern.
Um mehr über die Ausgabe zu erfahren und strace
Parameter, prüfen man strace
.
Siehe auch: Wie kann man Strace in Shell in einfachen Text analysieren?