Stöd för Perf Maps¶
På plattformar som stöds (i skrivande stund endast Linux) kan runtime dra nytta av perf map files för att göra Python-funktioner synliga för ett externt profileringsverktyg (t.ex. perf). En process som körs kan skapa en fil i katalogen /tmp
, som innehåller poster som kan mappa ett avsnitt av körbar kod till ett namn. Det här gränssnittet beskrivs i dokumentationen för Linux Perf-verktyget.
I Python kan dessa hjälp-API:er användas av bibliotek och funktioner som förlitar sig på att generera maskinkod i farten.
Observera att det inte är nödvändigt att hålla en attached thread state för dessa API:er.
-
int PyUnstable_PerfMapState_Init(void)¶
- Detta är Instabilt API. Den kan ändras utan förvarning i mindre versioner.
Öppna filen
/tmp/perf-$pid.map
, om den inte redan är öppnad, och skapa ett lås för att säkerställa trådsäkra skrivningar till filen (förutsatt att skrivningarna görs viaPyUnstable_WritePerfMapEntry()
). Normalt finns det inget behov av att anropa detta explicit; använd baraPyUnstable_WritePerfMapEntry()
och det kommer att initiera tillståndet vid första anropet.Returnerar
0
vid framgång,-1
vid misslyckande med att skapa/öppna perf map-filen eller-2
vid misslyckande med att skapa ett lås. Kontrolleraerrno
för mer information om orsaken till ett misslyckande.
-
int PyUnstable_WritePerfMapEntry(const void *code_addr, unsigned int code_size, const char *entry_name)¶
- Detta är Instabilt API. Den kan ändras utan förvarning i mindre versioner.
Skriv en enda post till filen
/tmp/perf-$pid.map
. Denna funktion är trådsäker. Så här ser ett exempel på en post ut:# adress storlek namn 7f3529fcf759 b py::bar:/run/t.py
Anropar
PyUnstable_PerfMapState_Init()
innan posten skrivs, om perf map-filen inte redan är öppnad. Returnerar0
vid framgång, eller samma felkoder somPyUnstable_PerfMapState_Init()
vid misslyckande.
-
void PyUnstable_PerfMapState_Fini(void)¶
- Detta är Instabilt API. Den kan ändras utan förvarning i mindre versioner.
Stäng perf map-filen som öppnades av
PyUnstable_PerfMapState_Init()
. Detta anropas av körtiden själv under tolkens avstängning. I allmänhet bör det inte finnas någon anledning att uttryckligen anropa detta, förutom för att hantera specifika scenarier som forking.