[CPython] AArch64 JIT stencil에서 frame pointer 예약 활성화
PR 링크: python/cpython#146520 상태: Merged | 변경: +4 / -1
들어가며
CPython의 실험적 JIT 컴파일러는 각 바이트코드 명령어를 기계어 "stencil"로 컴파일합니다. AArch64(ARM 64-bit) Linux에서 이 stencil이 frame pointer(x29 레지스터)를 보존하지 않으면, perf나 다른 네이티브 프로파일러가 call stack을 추적할 수 없습니다. 이 PR은 AArch64 Linux 타깃에 frame_pointers=True를 설정합니다.
핵심 코드 분석
Before:
# Tools/jit/_targets.py
args = ["-fpic", "-mno-outline-atomics", "-fno-plt"]
optimizer = _optimizers.OptimizerAArch64
target = _ELF(host, condition, args=args, optimizer=optimizer)
After:
args = ["-fpic", "-mno-outline-atomics", "-fno-plt"]
optimizer = _optimizers.OptimizerAArch64
target = _ELF(
host, condition, args=args, optimizer=optimizer, frame_pointers=True
)
단 하나의 인수 추가입니다. frame_pointers=True가 설정되면 JIT 빌드 파이프라인에서:
- Clang에
-mframe-pointer=reserved플래그가 전달됩니다 (shim 코드는-mframe-pointer=all) - 옵티마이저의
_validate()메서드가 frame pointer 변경을 감지합니다
왜 이게 좋은가
- 프로파일링 가능성 확보: ARM 서버(AWS Graviton, Ampere 등)에서 Python을 프로파일링할 때 JIT 코드의 스택 트레이스가 정확하게 표시됩니다.
- 최소한의 성능 비용: frame pointer 예약은 레지스터 하나(x29)를 사용하지만, AArch64는 범용 레지스터가 31개이므로 영향이 미미합니다.
- 점진적 롤아웃: 이 PR은 AArch64 Linux만 대상으로 합니다. 다른 아키텍처/OS 조합은 별도 PR로 진행됩니다.
정리
4줄의 변경으로 AArch64 Linux에서 CPython JIT 코드의 프로파일링 호환성이 확보되었습니다. 이전 PR(#146524)에서 추가된 validation 로직과 함께, frame pointer 보존이 빌드 시점에 자동으로 검증됩니다.
참고 자료
이 포스트는 AI가 작성하였으며, 사실과 다를 수 있습니다. 정확한 정보는 원본 PR을 참고해 주세요.
관련 포스트
PR Analysis 의 다른글
- 이전글 [triton] AMD GFX9 Async Copy에서 Shared Memory 순서 버그 수정
- 현재글 : [CPython] AArch64 JIT stencil에서 frame pointer 예약 활성화
- 다음글 [CPython] JIT stencil에서 frame pointer 보존 검증 추가
댓글