CPython 3.15의 초저오버헤드 인터프리터 프로파일링: 디스패치 테이블 교체로 JIT 추적 비용을 4.5배로 줄이다
Python 3.15's Ultra-Low Overhead Interpreter Profiling Mode – Ken Jin's Blog
Ken Jin이 CPython 3.15 JIT의 핵심인 새로운 인터프리터 프로파일링 기법을 소개한다. 두 개의 디스패치 테이블을 런타임에 교체하는 '듀얼 디스패치' 방식으로, 기존의 두 인터프리터 방식(computed goto에서 6% 성능 저하)이나 프로파일링 모드(코드 비대화)의 단점을 피하면서도 분기 없이 프로파일링을 수행한다. 두 번째 테이블의 모든 명령을 단일 프로파일링 명령으로 매핑하는 팬인-팬아웃 구조로 코드 비대화를 막았다. 벤치마크 결과 프로파일링 오버헤드는 최대 4.5배로, PyPy의 900-1000배와 대조적이다. 저자는 이 기법이 JIT뿐 아니라 타입 프로파일링 등에도 확장 가능하다고 본다.
이 마법 같은 시스템이 CPython에서 복잡성을 감수할 가치가 있는지 스스로에게 묻곤 합니다. 저는 우아하고 단순한 시스템을 좋아하는데, 이 방식은 우아하지만 분명히 이해하기 단순하지는 않습니다.