Поддержка перфокарт

На поддерживаемых платформах (на данный момент только Linux) среда выполнения может использовать perf map files, чтобы сделать функции Python видимыми для внешнего инструмента профилирования (например, perf). Запущенный процесс может создать файл в каталоге /tmp, содержащий записи, которые могут сопоставить участок исполняемого кода с именем. Этот интерфейс описан в разделе documentation of the Linux Perf tool.

В Python эти вспомогательные API могут использоваться библиотеками и функциями, которые полагаются на генерацию машинного кода на лету.

Обратите внимание, что для этих API не требуется удерживать глобальную блокировку интерпретатора (GIL).

int PyUnstable_PerfMapState_Init(void)
Это Нестабильный API. Она может меняться без предупреждения в небольших выпусках.

Откройте файл /tmp/perf-$pid.map, если он еще не открыт, и создайте блокировку, чтобы обеспечить потокобезопасную запись в файл (при условии, что запись осуществляется через PyUnstable_WritePerfMapEntry()). Обычно нет необходимости вызывать эту функцию явно; просто используйте PyUnstable_WritePerfMapEntry(), и она инициализирует состояние при первом вызове.

Возвращает 0 в случае успеха, -1 в случае неудачи при создании/открытии файла perf map или -2 в случае неудачи при создании блокировки. Проверьте errno для получения дополнительной информации о причине неудачи.

int PyUnstable_WritePerfMapEntry(const void *code_addr, unsigned int code_size, const char *entry_name)
Это Нестабильный API. Она может меняться без предупреждения в небольших выпусках.

Запишите одну единственную запись в файл /tmp/perf-$pid.map. Эта функция безопасна для потоков. Вот как выглядит пример записи:

# address      size  name
7f3529fcf759 b     py::bar:/run/t.py

Вызывает PyUnstable_PerfMapState_Init() перед записью записи, если файл perf map еще не открыт. Возвращает 0 в случае успеха или те же коды ошибок, что и PyUnstable_PerfMapState_Init() в случае неудачи.

void PyUnstable_PerfMapState_Fini(void)
Это Нестабильный API. Она может меняться без предупреждения в небольших выпусках.

Закрывает файл perf map, открытый командой PyUnstable_PerfMapState_Init(). Это вызывается самой средой выполнения во время закрытия интерпретатора. В целом, не должно быть причин для явного вызова этой функции, за исключением специфических сценариев, таких как форкинг.