perfetto
는 Android 디버그 브리지(ADB)를 통해 Android 기기에서 성능 정보를 수집할 수 있는 도구입니다. perfetto
는 다양한 소스를 사용하여 기기에서 다음과 같은 성능 트레이스를 수집합니다.
ftrace
: 커널의 정보atrace
: 서비스 및 앱의 사용자 공간 주석heapprofd
: 서비스 및 앱의 네이티브 메모리 사용량 정보
이 페이지에서는 perfetto
를 호출하여 원하는 출력을 생성하도록 구성하는 방법을 설명합니다.
구문
이 섹션에서는 ADB를 사용하여 perfetto
를 호출하고 트레이스를 생성하는 방법을 설명합니다.
데이터 소스 선택
perfetto
에는 트레이스를 기록하는 데 사용하는 데이터 소스를 결정하는 다음 두 모드가 포함됩니다.
- 라이트 모드: 데이터 소스의 하위 집합(구체적으로는 atrace 및 ftrace)만 선택할 수 있습니다. 하지만
systrace
와 유사한 인터페이스를 제공합니다. - 일반 모드: 프로토콜 버퍼에서 구성을 가져오며 atrace 및 ftrace와는 다른 데이터 소스를 사용하여
perfetto
의 기능을 훨씬 더 많이 활용할 수 있습니다.
이 섹션에서는 perfetto
가 위에 설명된 각 모드를 사용해 트레이스를 생성하는 데 필요한 구문을 설명합니다.
일반 옵션
다음 표는 두 모드 중 하나에서 perfetto
를 사용할 때 제공되는 옵션 목록입니다.
옵션 | 설명 |
---|---|
--background | -d
|
Perfetto는 명령줄 인터페이스를 즉시 종료하고 백그라운드에서 트레이스를 계속 기록합니다. |
--out OUT_FILE | -o OUT_FILE
|
출력 트레이스 파일의 원하는 경로, 즉 stdout에 -를 지정합니다.
perfetto 는 위 플래그에 설명된 파일에 출력을 씁니다. 출력 형식은 AOSP trace.proto 에 정의된 형식으로 컴파일됩니다.
|
--dropbox TAG
|
지정한 태그를 사용하여 DropBoxManager API를 통해 트레이스를 업로드합니다. |
--no-guardrails
|
테스트 중 --dropbox 플래그를 사용 설정하는 경우 과도한 리소스 사용 방지를 사용 중지합니다. |
--reset-guardrails
|
보호 대책 및 종료의 지속적인 상태를 재설정합니다(테스트용). |
--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/* ]...
다음 표는 라이트 모드에서 perfetto
를 사용할 때 제공되는 옵션 목록입니다.
옵션 | 설명 |
---|---|
--time TIME[s|m|h] | -t TIME[s|m|h]
|
트레이스 기간을 초, 분 또는 시간 단위로 지정합니다.
예를 들어 --time 1m 은 트레이스 기간을 1분으로 지정합니다.
기본 기간은 10초입니다.
|
--buffer SIZE[mb|gb] | -b SIZE[mb|gb]
|
링 버퍼 사이즈를 메가바이트(MB) 또는 기가바이트(GB) 단위로 지정합니다.
기본 매개변수는 --buffer 32mb 입니다.
|
--size SIZE[mb|gb] | -s SIZE[mb|gb]
|
최대 파일 크기를 MB 또는 GB 단위로 지정합니다. 기본적으로 perfetto 는 메모리 내의 링 버퍼만 사용합니다.
|
그다음에 이벤트 지정자 목록을 사용합니다.
이벤트 | 설명 |
---|---|
ATRACE_CAT |
트레이스를 기록할 atrace 카테고리를 지정합니다.
예를 들어 다음 명령어는 atrace를 사용하여 창 관리자를 추적합니다.
adb shell perfetto --out FILE wm 기타 카테고리를 기록하려면 atrace 카테고리 목록을 참조하세요. |
FTRACE_GROUP/FTRACE_NAME |
트레이스를 기록할 ftrace 이벤트를 지정합니다.
예를 들어 다음 명령어는 sched/sched_switch 이벤트를 추적합니다.
adb shell perfetto --out FILE sched/sched_switch |
일반 모드
일반 모드에서 perfetto
를 사용하는 일반적인 구문은 다음과 같습니다.
adb shell perfetto [ --txt ] --config CONFIG_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를 설정하여 이 소스를 사용 설정할 수 있습니다.
profetto
에서 생성되는 데이터는 다음과 같습니다.
기기, OS 버전, 커널에 따라 더 많은 이벤트를 사용할 수 있습니다. 자세한 내용은 sys_stats 및 process_stats의 구성 proto를 참조하세요.
Heapprofd
Heapprofd를 사용하면 네이티브 메모리 사용의 원인을 샘플링할 수 있습니다.
DataSourceConfig에서 heapprofd_config를 설정하여 이 소스를 사용 설정할 수 있습니다.
ProfilePackets가 생성됩니다. 여기에는 callstack의 자바 프레임이 포함됩니다.
heapprofd
를 사용하는 방법을 자세히 알아보려면 perfetto.dev를 참조하세요.
기타 소스
기기, OS 버전, 커널에 따라 더 많은 데이터 소스를 사용할 수 있습니다. 자세한 내용은 데이터 소스 구성 proto를 참조하세요.
perfetto
를 자세히 알아보려면 perfetto.dev를 참조하세요.