Unterstützung für Perf-Maps¶
Auf unterstützten Plattformen (derzeit nur Linux) kann die Laufzeitumgebung von Perf-Map-Dateien profitieren, um Python-Funktionen für ein externes Profiling-Tool (wie z.B. perf) sichtbar zu machen. Ein laufender Prozess kann eine Datei im /tmp-Verzeichnis erstellen, die Einträge enthält, welche einen Abschnitt ausführbaren Codes einem Namen zuordnen können. Diese Schnittstelle ist in der Dokumentation des Linux Perf-Tools beschrieben.
In Python können diese Hilfs-APIs von Bibliotheken und Features genutzt werden, die zur Laufzeit Maschinencode generieren.
Beachten Sie, dass das Halten eines angehängten Thread-Zustands für diese APIs nicht erforderlich ist.
-
int PyUnstable_PerfMapState_Init(void)¶
- Dies ist eine Instabile API. Sie kann sich ohne Vorwarnung in kleineren Releases ändern.
Öffnet die Datei
/tmp/perf-$pid.map, falls sie noch nicht geöffnet ist, und erstellt ein Sperrobjekt, um thread-sichere Schreibvorgänge in die Datei zu gewährleisten (vorausgesetzt, die Schreibvorgänge erfolgen überPyUnstable_WritePerfMapEntry()). Normalerweise gibt es keinen Grund, diese Funktion explizit aufzurufen. Verwenden Sie einfachPyUnstable_WritePerfMapEntry(), und die Zustandsinitialisierung erfolgt beim ersten Aufruf.Gibt
0bei Erfolg zurück,-1bei einem Fehler beim Erstellen/Öffnen der Perf-Map-Datei oder-2bei einem Fehler beim Erstellen eines Sperrobjekts. Überprüfen Sieerrnofür weitere Informationen über die Ursache eines Fehlers.
-
int PyUnstable_WritePerfMapEntry(const void *code_addr, unsigned int code_size, const char *entry_name)¶
- Dies ist eine Instabile API. Sie kann sich ohne Vorwarnung in kleineren Releases ändern.
Schreibt einen einzelnen Eintrag in die Datei
/tmp/perf-$pid.map. Diese Funktion ist threadsicher. Hier ist ein Beispiel für einen Eintrag:# address size name 7f3529fcf759 b py::bar:/run/t.py
Ruft
PyUnstable_PerfMapState_Init()vor dem Schreiben des Eintrags auf, falls die Perf-Map-Datei noch nicht geöffnet ist. Gibt0bei Erfolg oder dieselben Fehlercodes wiePyUnstable_PerfMapState_Init()bei einem Fehler zurück.
-
void PyUnstable_PerfMapState_Fini(void)¶
- Dies ist eine Instabile API. Sie kann sich ohne Vorwarnung in kleineren Releases ändern.
Schließt die von
PyUnstable_PerfMapState_Init()geöffnete Perf-Map-Datei. Dies wird von der Laufzeitumgebung selbst während des Herunterfahrens des Interpreters aufgerufen. Im Allgemeinen gibt es keinen Grund, diese Funktion explizit aufzurufen, außer in bestimmten Szenarien wie z.B. beim Forken.