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 über PyUnstable_WritePerfMapEntry()). Normalerweise gibt es keinen Grund, diese Funktion explizit aufzurufen. Verwenden Sie einfach PyUnstable_WritePerfMapEntry(), und die Zustandsinitialisierung erfolgt beim ersten Aufruf.

Gibt 0 bei Erfolg zurück, -1 bei einem Fehler beim Erstellen/Öffnen der Perf-Map-Datei oder -2 bei einem Fehler beim Erstellen eines Sperrobjekts. Überprüfen Sie errno fü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. Gibt 0 bei Erfolg oder dieselben Fehlercodes wie PyUnstable_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.