콘텐츠로 이동

magic-trace - Intel PT 고해상도 추적 치트시트

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 (또는 유사)를 생성
2ui.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-traceperfPerfetto
데이터전체 제어 흐름 (Intel PT)샘플된 스택시스템 전체 타임라인
해상도나노초샘플 간격이벤트 레벨
마지막 몇 ms전체 실행구성 가능
최고의 용도희귀 지연시간 스파이평균 핫 경로시스템 전체 상관관계

평균 핫 경로를 위해 perf를 사용하고, 시스템 전체 타임라인을 위해 Perfetto를 사용하고, 한 희귀 느린 이벤트의 정확한 이야기가 필요할 때 magic-trace를 사용하세요.

리소스