magic-trace - Intel PT 고해상도 추적 치트시트
magic-trace (Jane Street)는 **Intel 프로세서 추적 (Intel PT)**를 사용하여 고해상도 실행 추적을 캡처하고 표시합니다. 샘플링 프로파일러가 평균적으로 어디로 시간이 가는지 말해주는 반면, magic-trace는 실제 제어 흐름을 기록합니다 — 모든 함수 진입 및 종료 — 마지막 몇 밀리초 동안, 나노초 해상도로. 이는 희귀하고, 지연시간에 민감한 이벤트에 고유하게 적합합니다: 일만 개 중 하나가 40ms 걸렸던 요청, 평균 프로필이 당신에게 아무것도 보여주지 않는 경우.
요구 사항
- Intel PT 지원 Intel CPU (대부분의 현대 Intel)
- perf 및 PT 활성화 Linux
- Root 또는 적절한
perf_event_paranoid 설정
- 읽을 수 있는 출력을 위한 프레임 포인터 / 심볼이 있는 바이너리
설치
| 방법 | 명령 |
|---|
| 바이너리 | GitHub Releases에서 magic-trace 다운로드 |
| opam (OCaml) | opam install magic_trace |
| 권한 | sysctl kernel.perf_event_paranoid=-1 (또는 1) |
| 확인 | magic-trace --help |
두 캡처 모드
| 모드 | 명령 | 사용 |
|---|
| 실행 중 연결 | magic-trace attach -pid <pid> | 실시간 서비스 |
| 명령 실행 | magic-trace run ./my-program | 재현 가능한 실행 |
# 연결, Ctrl-C에서 캡처, 추적 작성
sudo magic-trace attach -pid $(pgrep -n myservice)
스냅샷 트리거
핵심 아이디어: 롤링 버퍼를 유지하고 흥미로운 것이 발생할 때 스냅샷을 찍기.
| 트리거 | 방법 |
|---|
| 수동 | 연결 중 Ctrl-C 누르기 |
| Magic 중단점 | 앱이 지정된 심볼을 호출하여 스냅샷 트리거 |
| 타이머 | 고정 기간 후 캡처 |
| 심볼 트리거 | -trigger <symbol>로 함수 호출 시 스냅샷 |
# 특정 함수가 맞을 때마다 스냅샷
sudo magic-trace attach -pid <pid> -trigger 'handle_slow_path'
버퍼가 선행 몇 밀리초를 보유하기 때문에, 이벤트 자체가 아니라 그것으로 이어지는 것을 봅니다.
추적 보기
magic-trace는 Perfetto UI에서 볼 수 있는 추적을 내보냅니다.
| 단계 | 동작 |
|---|
| 1 | 캡처는 trace.fxt (또는 유사)를 생성 |
| 2 | ui.perfetto.dev 열기 |
| 3 | 추적 파일 로드 |
| 4 | 마이크로초 범위로 확대 |
| 5 | 정확한 호출 순서 및 기간 읽기 |
| Perfetto 제어 | 역할 |
|---|
W/S | 확대/축소 |
A/D | 이동 |
| 조각 클릭 | 기간 및 함수 세부 |
| 범위 선택 | 실행된 것의 요약 |
무엇을 볼 수 있는가
| 질문 | magic-trace 답변 |
|---|
| 이 40ms 스파이를 일으킨 함수? | 정확한 호출, 정확한 기간 |
| 예상치 못한 분기를 했는가? | 전체 제어 흐름, 보이는 |
| 한 요청 내에서 시간이 어디로 갔는가? | 나노초 레벨 분류 |
| syscall, 락 또는 계산이었는가? | 호출 순서가 보여줍니다 |
알아야 할 옵션
| 플래그 | 목적 |
|---|
-multi-thread | 모든 스레드 추적 |
-duration | 캡처 창 길이 |
-trigger SYMBOL | 심볼에서 스냅샷 |
-full-execution | 전체 짧은 실행 추적 |
-output FILE | 추적 출력 경로 |
제한 사항
| 제한 | 참고 |
|---|
| Intel만 | Intel PT 필요 (AMD/ARM 없음) |
| 짧은 창 | 분, 아니라 밀리초 |
| 심볼 품질 | 스트립된 바이너리는 나쁜 추적을 산출 |
| 오버헤드 | 낮지만 추적 중 0이 아님 |
magic-trace vs 관련 도구
| 측면 | magic-trace | perf | Perfetto |
|---|
| 데이터 | 전체 제어 흐름 (Intel PT) | 샘플된 스택 | 시스템 전체 타임라인 |
| 해상도 | 나노초 | 샘플 간격 | 이벤트 레벨 |
| 창 | 마지막 몇 ms | 전체 실행 | 구성 가능 |
| 최고의 용도 | 희귀 지연시간 스파이 | 평균 핫 경로 | 시스템 전체 상관관계 |
평균 핫 경로를 위해 perf를 사용하고, 시스템 전체 타임라인을 위해 Perfetto를 사용하고, 한 희귀 느린 이벤트의 정확한 이야기가 필요할 때 magic-trace를 사용하세요.
리소스