콘텐츠로 이동

Perfetto - 시스템 전체 추적 및 분석 치트시트

Perfetto - 시스템 전체 추적 및 분석 치트시트

Perfetto는 Linux, Android, Chrome용 Google의 오픈소스 프로덕션 등급 추적 및 프로파일링 스택입니다. 시스템 전체 추적을 캡처합니다. CPU 스케줄링, syscall, 빈도 변경, 메모리 이벤트, 커스텀 애플리케이션 이벤트를 컴팩트 protobuf 형식으로 수집한 후, 정교한 웹 UI에서 탐색하거나 SQL로 쿼리하게 해줍니다. perf는 스택을 샘플링하지만, Perfetto는 모든 스레드와 CPU가 무엇을 했는지의 타임라인을 기록합니다. 이는 지연 및 동시성 문제에 필요한 것입니다.

설치

구성요소방법
UI (설치 없음)브라우저에서 ui.perfetto.dev 열기
CLI 도구GitHub Releases에서 tracebox/perfetto 다운로드
Android내장 (adb shell perfetto ...)
trace_processor로컬 SQL 분석을 위해 다운로드
확인./tracebox --help

추적 캡처 (Linux)

# ftrace 스케줄링 데이터가 있는 간단한 10초 시스템 전체 추적
./tracebox -o trace.pftrace --txt -c - <<EOF
buffers: { size_kb: 65536 }
data_sources: {
  config {
    name: "linux.ftrace"
    ftrace_config {
      ftrace_events: "sched/sched_switch"
      ftrace_events: "sched/sched_wakeup"
      ftrace_events: "power/cpu_frequency"
    }
  }
}
duration_ms: 10000
EOF
요소목적
buffers추적 데이터를 위한 링 버퍼 크기
data_sources기록할 내용 (ftrace, procstats, heapprofd, …)
ftrace_events특정 커널 tracepoint
duration_ms캡처 길이
-o출력 추적 파일

일반적인 데이터 소스

소스기록
linux.ftrace스케줄링, syscall, IRQ, 커스텀 tracepoint
linux.process_stats시간에 따른 프로세스별 CPU/메모리
linux.sys_stats시스템 전체 카운터 (meminfo, vmstat)
android.heapprofd네이티브 힙 프로파일링
android.java_hprofJava 힙 덤프
track_event애플리케이션이 내보낸 스팬/카운터

UI 워크플로우

단계작업
1ui.perfetto.dev를 열고 추적을 드래그
2타임라인이 CPU, 스레드, 트랙을 표시
3W/S 줌, A/D
4슬라이스를 클릭하여 지속 시간 및 인자 보기
5범위 선택 → 무엇이 실행되었는지의 요약
6SQL 분석을 위해 쿼리 박스 사용

SQL 분석 (슈퍼파워)

Perfetto의 추적 프로세서는 추적을 쿼리 가능한 테이블로 노출합니다.

-- 가장 오래 실행되는 슬라이스
SELECT name, dur/1e6 AS ms
FROM slice
ORDER BY dur DESC
LIMIT 20;

-- 프로세스당 CPU 시간
SELECT p.name, SUM(s.dur)/1e6 AS cpu_ms
FROM sched s JOIN thread t USING(utid) JOIN process p USING(upid)
GROUP BY p.name ORDER BY cpu_ms DESC;

-- 스레드가 차단된 이유?
SELECT ts, dur, state
FROM thread_state
WHERE utid = 42 AND state != 'Running'
ORDER BY dur DESC;
테이블포함
slice명명된, 중첩된 지속 이벤트
schedCPU별 스케줄링 슬라이스
thread_stateRunning/sleeping/blocked 간격
counter수치 시계열 (빈도, 메모리)
process, thread프로세스/스레드 메타데이터

로컬 분석

# 추적에 대한 대화형 SQL 셸
./trace_processor trace.pftrace

# 쿼리 실행 및 스크립팅을 위해 JSON 내보내기
./trace_processor -q query.sql --query-output json trace.pftrace

Perfetto가 최고인 것

문제Perfetto가 도움이 되는 이유
지연 스파이크그 순간에 정확히 무엇이 실행/차단되었는지 보기
잠금 경쟁thread_state가 차단된 간격 및 이유 표시
CPU 마이그레이션/스케줄링모든 스레드의 CPU별 타임라인
빈도/열 효과cpufreq 카운터를 slowdown과 상관관계
앱 + 커널 상관관계커널 이벤트와 같은 타임라인의 애플리케이션 스팬

Perfetto vs 관련 도구

측면Perfettoperfbpftrace
모델완전 타임라인 추적샘플링 프로파일러임시 eBPF 프로브
분석UI + SQL보고서/플레임 그래프커스텀 스크립트
최적 용도지연/동시성/타임라인CPU 핫 경로대상 커널 질문
오버헤드중간 (조정 가능)낮음낮음

perf (CPU 핫 스팟)를 보완하고 bpftrace (대상 프로브)를 보완합니다; Perfetto는 “언제 무엇이 일어났는가”에 답합니다.

리소스