Python

Perf Map 지원

지원되는 플랫폼(Linux 및 macOS)에서, 런타임은 perf map 파일 을 활용하여 Python 함수를 외부 프로파일링 도구(예: perf 또는 samply)에서 인식할 수 있도록 할 수 있습니다. 실행 중인 프로세스는 /tmp 디렉토리에 실행 가능한 코드 섹션을 이름에 매핑하는 항목이 포함된 파일을 생성할 수 있습니다. 이 인터페이스는 Linux Perf 도구 설명서 에 설명되어 있습니다.

Python에서 이 보조 API는 실시간으로 머신 코드를 생성하는 데 의존하는 라이브러리 및 기능에서 사용될 수 있습니다.

이 API를 사용하는 데 있어 attached thread state 를 유지할 필요는 없다는 점에 유의하십시오.

int PyUnstable_PerfMapState_Init(void)
이것은 불안정 API. 마이너 릴리스에서 예고 없이 변경될 수 있습니다.

이미 열려 있지 않은 경우 /tmp/perf-$pid.map 파일을 열고 파일에 대한 스레드 안전한 쓰기를 보장하기 위해 잠금을 생성합니다(쓰기가 PyUnstable_WritePerfMapEntry() 를 통해 수행되는 경우). 일반적으로 이를 명시적으로 호출할 필요는 없으며, PyUnstable_WritePerfMapEntry() 를 사용하면 첫 번째 호출 시 상태가 초기화됩니다.

성공 시 0 을 반환하고, perf 맵 파일을 생성/열기 실패 시 -1 을, 잠금을 생성하는 데 실패할 경우 -2 를 반환합니다. 실패 원인에 대한 자세한 정보는 errno 를 확인하십시오.

int PyUnstable_WritePerfMapEntry(const void *code_addr, size_t code_size, const char *entry_name)
이것은 불안정 API. 마이너 릴리스에서 예고 없이 변경될 수 있습니다.

/tmp/perf-$pid.map 파일에 단일 항목을 기록합니다. 이 함수는 스레드 세이프(thread safe)합니다. 여기 예시 항목의 모습이 있습니다:

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

perf 맵 파일이 아직 열려 있지 않은 경우 항목을 쓰기 전에 PyUnstable_PerfMapState_Init() 을 호출합니다. 성공하면 0 을 반환하고, 실패하면 PyUnstable_PerfMapState_Init() 과 동일한 오류 코드를 반환합니다.

void PyUnstable_PerfMapState_Fini(void)
이것은 불안정 API. 마이너 릴리스에서 예고 없이 변경될 수 있습니다.

PyUnstable_PerfMapState_Init() 에 의해 열린 perf 맵 파일을 닫습니다. 이 함수는 인터프리터 종료 중에 런타임 자체에 의해 호출됩니다. 일반적으로 fork와 같은 특정 시나리오를 처리하는 경우를 제외하고 이 함수를 명시적으로 호출할 이유는 없습니다.

int PyUnstable_CopyPerfMapFile(const char *parent_filename)
이것은 불안정 API. 마이너 릴리스에서 예고 없이 변경될 수 있습니다.

/tmp/perf-$pid.map 파일을 열고 parent_filename 의 내용을 추가합니다.

이 함수는 모든 플랫폼에서 사용 가능하지만, perf 맵을 지원하는 플랫폼(현재 Linux만 해당)에서만 출력을 생성합니다. 다른 플랫폼에서는 아무런 동작도 하지 않습니다.

Added in version 3.13.

int PyUnstable_PerfTrampoline_CompileCode(PyCodeObject *code)
이것은 불안정 API. 마이너 릴리스에서 예고 없이 변경될 수 있습니다.

현재의 perf 트램펄린(trampoline)을 사용하여 주어진 코드 객체를 컴파일합니다.

“현재” 트램펄린은 런타임에 의해 설정되었거나 가장 최근의 PyUnstable_PerfTrampoline_SetPersistAfterFork() 호출에 의해 설정된 것입니다.

트램펄린이 설정되지 않은 경우, 일반적인 컴파일로 대체됩니다(perf 맵 항목 없음).

매개변수:
  • code – 컴파일할 코드 객체.

반환:

성공 시 0, 실패 시 -1.

Added in version 3.13.

int PyUnstable_PerfTrampoline_SetPersistAfterFork(int enable)
이것은 불안정 API. 마이너 릴리스에서 예고 없이 변경될 수 있습니다.

fork 이후에도 perf 트램펄린이 유지될지 여부를 설정합니다.

  • enable 이 참(0이 아님)인 경우: fork 후에도 perf 맵 파일이 열려 있고 유효하게 유지됩니다. 자식 프로세스는 기존의 모든 perf 맵 항목을 상속받습니다.

  • enable 이 거짓(0)인 경우: fork 후 perf 맵이 닫힙니다. 자식 프로세스는 비어 있는 perf 맵을 받게 됩니다.

기본값: false (fork 시 초기화됨).

매개변수:
  • enable – 활성화하려면 1, 비활성화하려면 0.

반환:

성공 시 0, 실패 시 -1.

Added in version 3.13.

분실물 보관소