Jane Street의 함수 호출 40ns 추적 도구 'magic-trace' 깃허브 트렌딩 합류
Jane Street가 만든 리눅스 프로세스 추적 도구 'magic-trace'가 깃허브 트렌딩에 합류했다. 실행 중인 애플리케이션의 함수 호출을 약 40 나노초 해상도로 기록해, 운영 환경에서 일부 요청만 느리게 처리되는 원인이나 크래시 직전 프로그램 동작을 사후 분석하도록 돕는다.
magic-trace는 인텔 프로세서 트레이스(Intel PT) 하드웨어 기능을 활용해 제어 흐름을 링버퍼에 연속 기록한 뒤, 특정 시점의 스냅샷을 호출 스택 타임라인으로 재구성한다. perf처럼 일정 간격으로 콜 스택을 샘플링하는 방식이 아니라, 선택한 시점까지의 모든 제어 흐름을 그대로 담아 두는 것이 차이다.
오버헤드는 2%에서 10% 수준이고, 애플리케이션 코드를 수정하지 않아도 된다. 기본 설정에서 약 10밀리초 분량의 콜 스택 히스토리를 보여 주며, 이 길이는 조정할 수 있다. 사용법은 perf와 유사하게 추적할 프로세스를 가리키기만 하면 된다.
스냅샷을 찍는 방법은 두 가지다. magic-trace를 실행한 뒤 Ctrl+C를 눌러 프로그램 종료 직전 시점을 잡거나, -trigger 플래그로 특정 함수가 호출되는 순간을 지정하면 된다. 트리거는 실행 파일 안의 심볼을 퍼지 검색해 고르거나, 미리 정해 둔 magic_trace_stop_indicator 같은 빈 함수를 활용할 수도 있다.
Jane Street 엔지니어들이 자체적으로 활용한 사례도 저장소 안내문에 인용됐다. Francis Ricci는 "지금까지 써 본 커맨드라인 디버깅 도구 중 가장 단순한 축에 든다"고 평가했고, Doug Patti는 "70 나노초짜리 함수가 내부적으로 어떤 함수들을 호출하는지까지 보인다"며 perf로는 잡히지 않던 영역을 들여다볼 수 있다고 밝혔다. Andrew Hunter는 성능 분석뿐 아니라 프로그램 동작을 이해하기 위한 일반적인 내성 도구로도 쓸 만하다고 덧붙였다.
시스템 요구사항은 까다로운 편이다. 인텔 CPU 스카이레이크 이상, 리눅스 환경에서만 동작하며 가상머신은 대부분 지원되지 않는다. 추적 결과는 trace.fxt.gz 파일로 저장되고, 브라우저에서 magic-trace.org에 접속해 타임라인 형태로 열어 볼 수 있다.
뷰어인 magic-trace.org는 구글의 Perfetto를 일부 수정한 포크 버전으로 브라우저 안에서만 동작한다. 프로젝트 측은 magic-trace가 사용자의 코드나 트레이스 결과를 외부로 전송하지 않는다고 명시했고, 필요하다면 Perfetto UI를 로컬에 직접 띄워 사용할 수도 있다고 안내했다.
magic-trace는 Tristan Hume이 Jane Street 재직 시절에 처음 만들어 현재까지 회사가 유지보수하고 있다. Intel PT라는 하드웨어 기능과 perf의 디코딩 구현이 기반을 이루고 있어, 두 진영의 누적된 작업 위에 얹힌 도구라는 점도 안내문에서 강조됐다.