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.

War es hilfreich?

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 positionieren
  • write - Schreiben Sie an einen Dateideskriptor aus dem Puffer
  • close - Löschen Sie einen Deskriptor aus der Referenztabelle pro Prozess-Objekt.
  • mmap - Speicher oder Kartendateien oder Geräte in den Speicher zuweisen
  • munmap - Entfernen Sie eine Zuordnung für den angegebenen Adressbereich
  • fstat - 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?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top