perfetto
는 Android 디버그 브리지(ADB)를 통해 Android 기기에서 성능 정보를 수집할 수 있는 도구입니다. adb shell perfetto ...
명령어를 사용하여 perfetto
도구를 호출합니다.
perfetto
는 다양한 소스를 사용하여 기기에서 다음과 같은 성능 트레이스를 수집합니다.
ftrace
: 커널의 정보atrace
: 서비스 및 앱의 사용자 공간 주석heapprofd
: 서비스 및 앱의 네이티브 메모리 사용량 정보
이 페이지에서는 perfetto
를 호출하여 원하는 출력을 생성하도록 구성하는 방법을 설명합니다. 자세한 내용은 perfetto
문서를 참고하세요.
문법
이 섹션에서는 ADB를 사용하여 다양한 모드에서 perfetto
를 호출하고 트레이스를 생성하는 방법을 설명합니다.
데이터 소스 선택
perfetto
에는 트레이스를 기록하는 데 사용하는 데이터 소스를 결정하는 다음 두 모드가 포함됩니다.
- 라이트 모드: 데이터 소스의 하위 집합, 특히
atrace
및ftrace
만 선택할 수 있습니다. 그러나 이 모드는systrace
와 유사한 인터페이스를 제공합니다. - 일반 모드: 프로토콜 버퍼에서 구성을 가져오고
atrace
및ftrace
와는 다른 데이터 소스를 사용하여 더 많은perfetto
의 기능을 활용하도록 합니다.
일반 옵션
다음 표는 두 모드 중 하나에서 perfetto
를 사용할 때 제공되는 옵션 목록입니다.
옵션 | 설명 |
---|---|
--background |
|
perfetto 는 명령줄 인터페이스를 즉시 종료하고 백그라운드에서 트레이스를 계속 기록합니다. |
--background-wait | -D
|
--background 와 같지만 종료하기 전에 모든 데이터 소스가 시작될 때까지 기다립니다(최대 30초). 확인이 성공적으로 수신되면 종료 코드는 0이고 그 외의 경우에는(오류 또는 시간 초과) 0이 아닙니다.
|
--alert-id
|
이 트레이스를 트리거한 알림 ID입니다. |
--config-id
|
트리거 구성의 ID입니다. |
--config-uid
|
구성을 등록한 앱의 UID입니다. |
--subscription-id
|
이 트레이스를 트리거한 구독의 ID입니다. |
--out OUT_FILE |
|
출력 트레이스 파일의 원하는 경로, 즉 참고: 출력 파일의 전체 경로 이름을 지정해야 합니다. 일반적으로 파일은 |
--upload
|
완료 시 proto trace 구성의 IncidentReportConfig 메시지에 의해 지정된 패키지에 트레이스를 전달합니다. |
--no-guardrails
|
테스트 중 --upload 플래그를 사용 설정하는 경우 과도한 리소스 사용 방지를 사용 중지합니다. |
--reset-guardrails
|
테스트를 위해 보호 대책 및 종료의 지속적인 상태를 재설정합니다. |
--rsave-for-bugreport
|
bugreport_score 가 0보다 큰 트레이스가 실행 중이면 트레이스를 파일에 저장합니다. 완료되면 경로를 출력합니다.
|
--query
|
서비스 상태를 쿼리하고 사람이 읽을 수 있는 텍스트로 출력합니다. |
--query-raw
|
--query 와 비슷하지만 tracing_service_state.proto. 의 원시 proto 인코딩 바이트를 출력합니다. |
--help | -h
|
perfetto 도구의 도움말 텍스트를 출력합니다. |
라이트 모드
라이트 모드에서 perfetto
를 사용하는 일반적인 문법은 다음과 같습니다.
adb shell perfetto [ --time TIMESPEC ] [ --buffer SIZE ] [ --size SIZE ] [ ATRACE_CAT | FTRACE_GROUP/FTRACE_NAME | FTRACE_GROUP/* ]... --out FILE
다음 표는 라이트 모드에서 perfetto
를 사용할 때 제공되는 옵션 목록입니다.
옵션 | 설명 |
---|---|
--time TIME[s|m|h] |
|
트레이스 기간을 초, 분 또는 시간 단위로 지정합니다.
예를 들어 --time 1m 은 트레이스 기간을 1분으로 지정합니다.
기본 기간은 10초입니다.
|
--buffer SIZE[mb|gb] |
|
링 버퍼 사이즈를 메가바이트(MB) 또는 기가바이트(GB) 단위로 지정합니다.
기본 매개변수는 --buffer 32mb 입니다.
|
--size SIZE[mb|gb] |
|
최대 파일 크기를 MB 또는 GB 단위로 지정합니다. 기본적으로 perfetto 는 메모리 내의 링 버퍼만 사용합니다.
|
--app | -a
|
Android (atrace) 앱 이름입니다. |
이러한 옵션 다음에는 이벤트 지정자 목록이 나옵니다.
이벤트 | 설명 |
---|---|
ATRACE_CAT |
트레이스를 기록할 atrace 카테고리를 지정합니다.
예를 들어 다음 명령어는 atrace 를 사용하여 창 관리자를 추적합니다.
adb shell perfetto --out FILE wm 기타 카테고리를 기록하려면 |
FTRACE_GROUP/FTRACE_NAME |
트레이스를 기록할 ftrace 이벤트를 지정합니다.
예를 들어 다음 명령어는 sched/sched_switch 이벤트를 추적합니다.
adb shell perfetto --out FILE sched/sched_switch |
일반 모드
일반 모드에서 perfetto
를 사용하는 일반적인 문법은 다음과 같습니다.
adb shell perfetto [ --txt ] --config CONFIG_FILE --out FILE
다음 표는 일반 모드에서 perfetto
를 사용할 때 제공되는 옵션 목록입니다.
옵션 | 설명 |
---|---|
--config CONFIG_FILE | -c CONFIG_FILE
|
구성 파일의 경로를 지정합니다. 일반 모드에서는 일부 구성이 구성 프로토콜 버퍼에 인코딩될 수 있습니다. 이 파일은 AOSP trace_config.proto 에 정의된 프로토콜 버퍼 스키마를 준수해야 합니다.
AOSP |
--txt
|
구성 파일을 pbtxt 로 파싱하도록 perfetto 에 지시합니다. 이 플래그는 로컬 테스트 전용이며 프로덕션에 사용 설정하지 않는 것이 좋습니다. |
지원되는 데이터 소스
이 섹션에서는 perfetto
에서 트레이스를 생성하는 데 사용하는 다양한 소스를 설명합니다.
ftrace
ftrace
데이터 소스를 사용하면 perfetto
가 커널에서 이벤트를 가져올 수 있습니다.
DataSourceConfig에서 ftrace_config
를 설정하여 이 소스를 사용 설정합니다.
사용 설정할 수 있는 이벤트는 다음과 같습니다.
-
sched/sched_switch
sched/sched_wakeup
sched/sched_wakeup_new
sched/sched_process_exec
sched/sched_process_exit
sched/sched_process_fork
sched/sched_process_free
sched/sched_process_hang
sched/sched_process_wait
파일 시스템 이벤트:
기기, OS 버전 또는 커널에 따라 더 많은 이벤트를 사용할 수 있습니다. 자세한 내용은 구성 proto를 참고하세요.
프로세스 통계
프로세스 통계 데이터 소스를 사용하면 시스템 및 개별 프로세스에 관한 폴링 카운터를 가져올 수 있습니다.
DataSourceConfig에서 process_stats_config
및 sys_stats_config
를 설정하여 이 소스를 사용 설정합니다.
perfetto
에서 생성되는 데이터는 다음과 같습니다.
기기, OS 버전, 커널에 따라 더 많은 이벤트를 사용할 수 있습니다. 자세한 내용은 sys_stats
및 process_stats
의 구성 proto를 참고하세요.
heapprofd
heapprofd
를 사용하면 네이티브 메모리 사용의 원인을 샘플링할 수 있습니다.
DataSourceConfig에서 heapprofd_config
를 설정하여 이 소스를 사용 설정합니다. 이 설정은 호출 스택의 자바 프레임을 포함하여 ProfilePackets
를 생성합니다.
heapprofd
사용 방법에 관한 자세한 내용은 perfetto.dev
를 참고하세요.
기타 소스
기기, OS 버전, 커널에 따라 더 많은 데이터 소스를 사용할 수 있습니다. 자세한 내용은 데이터 소스 구성 proto를 참고하세요.
perfetto
를 자세히 알아보려면 perfetto.dev를 참조하세요.