perfetto

perfettoAndroid 디버그 브리지(ADB)를 통해 Android 기기에서 성능 정보를 수집할 수 있는 도구입니다. adb shell perfetto ... 명령어를 사용하여 perfetto 도구를 호출합니다. perfetto는 다양한 소스를 사용하여 기기에서 다음과 같은 성능 트레이스를 수집합니다.

  • ftrace: 커널의 정보
  • atrace: 서비스 및 앱의 사용자 공간 주석
  • heapprofd: 서비스 및 앱의 네이티브 메모리 사용량 정보

이 페이지에서는 perfetto를 호출하여 원하는 출력을 생성하도록 구성하는 방법을 설명합니다. 자세한 내용은 perfetto 문서를 참고하세요.

문법

이 섹션에서는 ADB를 사용하여 다양한 모드에서 perfetto를 호출하고 트레이스를 생성하는 방법을 설명합니다.

데이터 소스 선택

perfetto에는 트레이스를 기록하는 데 사용하는 데이터 소스를 결정하는 다음 두 모드가 포함됩니다.

  • 라이트 모드: 데이터 소스의 하위 집합, 특히 atraceftrace만 선택할 수 있습니다. 그러나 이 모드는 systrace와 유사한 인터페이스를 제공합니다.
  • 일반 모드: 프로토콜 버퍼에서 구성을 가져오고 atraceftrace와는 다른 데이터 소스를 사용하여 더 많은 perfetto의 기능을 활용하도록 합니다.

일반 옵션

다음 표는 두 모드 중 하나에서 perfetto를 사용할 때 제공되는 옵션 목록입니다.

표 1. 사용 가능한 일반 perfetto 도구 옵션 목록

옵션 설명
--background |
-d
perfetto는 명령줄 인터페이스를 즉시 종료하고 백그라운드에서 트레이스를 계속 기록합니다.
--background-wait | -D --background와 같지만 종료하기 전에 모든 데이터 소스가 시작될 때까지 기다립니다(최대 30초). 확인이 성공적으로 수신되면 종료 코드는 0이고 그 외의 경우에는(오류 또는 시간 초과) 0이 아닙니다.
--alert-id 이 트레이스를 트리거한 알림 ID입니다.
--config-id 트리거 구성의 ID입니다.
--config-uid 구성을 등록한 앱의 UID입니다.
--subscription-id 이 트레이스를 트리거한 구독의 ID입니다.
--out OUT_FILE |
-o OUT_FILE

출력 트레이스 파일의 원하는 경로, 즉 stdout-를 지정합니다. perfetto는 위 플래그에 설명된 파일에 출력을 씁니다. 출력 형식은 AOSP trace.proto에 정의된 형식으로 컴파일됩니다.

참고: 출력 파일의 전체 경로 이름을 지정해야 합니다. 일반적으로 파일은 /data/misc/perfetto-traces 폴더에 작성해야 합니다.

--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를 사용할 때 제공되는 옵션 목록입니다.

표 2. 라이트 모드를 사용할 때 제공되는 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는 메모리 내의 링 버퍼만 사용합니다.
--app | -a Android (atrace) 앱 이름입니다.

이러한 옵션 다음에는 이벤트 지정자 목록이 나옵니다.

표 3. 라이트 모드용 이벤트 지정자 목록

이벤트 설명
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 --out FILE

다음 표는 일반 모드에서 perfetto를 사용할 때 제공되는 옵션 목록입니다.

표 4. 일반 모드를 사용할 때 제공되는 perfetto 도구 옵션 목록

옵션 설명
--config CONFIG_FILE | -c CONFIG_FILE 구성 파일의 경로를 지정합니다. 일반 모드에서는 일부 구성이 구성 프로토콜 버퍼에 인코딩될 수 있습니다. 이 파일은 AOSP trace_config.proto에 정의된 프로토콜 버퍼 스키마를 준수해야 합니다.

AOSP data_source_config.proto에 정의된 대로 TraceConfigDataSourceConfig 멤버를 사용하여 데이터 소스를 선택하고 구성합니다.

--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
  • 파일 시스템 이벤트:

  • atrace 이벤트

기기, OS 버전 또는 커널에 따라 더 많은 이벤트를 사용할 수 있습니다. 자세한 내용은 구성 proto를 참고하세요.

프로세스 통계

프로세스 통계 데이터 소스를 사용하면 시스템 및 개별 프로세스에 관한 폴링 카운터를 가져올 수 있습니다.

DataSourceConfig에서 process_stats_configsys_stats_config를 설정하여 이 소스를 사용 설정합니다.

perfetto에서 생성되는 데이터는 다음과 같습니다.

기기, OS 버전, 커널에 따라 더 많은 이벤트를 사용할 수 있습니다. 자세한 내용은 sys_statsprocess_stats의 구성 proto를 참고하세요.

heapprofd

heapprofd를 사용하면 네이티브 메모리 사용의 원인을 샘플링할 수 있습니다.

DataSourceConfig에서 heapprofd_config를 설정하여 이 소스를 사용 설정합니다. 이 설정은 호출 스택의 자바 프레임을 포함하여 ProfilePackets를 생성합니다.

heapprofd 사용 방법에 관한 자세한 내용은 perfetto.dev를 참고하세요.

기타 소스

기기, OS 버전, 커널에 따라 더 많은 데이터 소스를 사용할 수 있습니다. 자세한 내용은 데이터 소스 구성 proto를 참고하세요.

perfetto를 자세히 알아보려면 perfetto.dev를 참조하세요.