Perfetto를 활용한 Android 성능 분석 기법

안드로이드에서 성능 문제를 분석할 때 다양한 도구들이 사용됩니다. 특히 렉이나 응답 지연과 같은 문제는 TraceView, SysTrace, Perfetto 및 Android Studio의 Android Profiler와 같은 도구들을 통해 해결할 수 있습니다.

  1. 성능 분석 도구 소개
  • TraceView: 함수 단위의 성능 프로파일러로, 각 메서드 호출 시간을 측정했으나 성능 영향이 크다는 이유로 더 이상 권장되지 않습니다.
  • SysTrace: 시스템 전반의 동작 정보를 수집하며 CPU 스케줄링, 바인더 통신 등을 모니터링합니다.
  • Perfetto: 안드로이드 공식 성능 분석 플랫폼으로, SysTrace를 대체하기 위해 설계되었습니다. 더 나은 데이터 수집 능력과 SQL 쿼리 지원을 제공합니다.
  • Android Profiler: Android Studio 내에 통합된 도구로, 다양한 성능 지표를 시각적으로 표현합니다.

일반적인 개발 환경에서는 간단한 성능 문제를 해결하려면 Android Profiler가 적합하고, 복잡한 문제나 시스템 레벨 이슈에는 Perfetto가 유용합니다.

  1. Perfetto 트레이스 수집 방법

Perfetto의 기본적인 트레이스 수집은 명령줄을 통해 이루어집니다.

adb shell perfetto -o /data/misc/perfetto-traces/trace_file.perfetto-trace -t <duration> <data_sources>

예시: 20초 동안의 트레이스를 수집하여 저장하는 명령어입니다.

adb shell perfetto -o /data/misc/perfetto-traces/trace_file.perfetto-trace -t 20s sched freq idle am wm gfx view binder_driver hal dalvik camera input res memory
adb pull /data/misc/perfetto-traces/trace_file.perfetto-trace

모든 데이터를 수집하려면 -a 옵션을 사용하면 됩니다.

adb shell perfetto -o /data/misc/perfetto-traces/trace.perfetto-trace -t 10s -a "com.example.app"

보다 세부적인 제어를 원한다면 .pbtx 형식의 설정 파일을 사용할 수 있습니다.

# 설정 파일 예시 (trace_config.pbtx)
duration_ms = 30000
buffers = {
    size_kb = 65536,
    fill_policy = "DISCARD"
}
data_sources = [
    {
        name = "linux.ftrace",
        ftrace_events = ["sched/sched_switch", "power/suspend_resume"],
        atrace_categories = ["gfx", "view"],
        atrace_apps = ["com.example.app"]
    },
    {
        name = "linux.process_stats",
        process_stats_config = {
            scan_all_processes_on_start = True
        }
    }
]

설정 파일을 적용하려면 다음과 같이 실행합니다.

adb push trace_config.pbtx /data/misc/perfetto-configs/trace_config.pbtx
adb shell perfetto -c /data/misc/perfetto-configs/trace_config.pbtx -o /data/misc/perfetto-traces/trace.pftrace

편리함을 위해 Perfetto 팀에서 제공하는 스크립트도 있습니다.

curl -O https://raw.githubusercontent.com/google/perfetto/master/tools/record_android_trace
chmod u+x record_android_trace
./record_android_trace -o trace_file.perfetto-trace -t 10s -b 32mb sched gfx wm
  1. Perfetto를 활용한 트레이스 분석

Perfetto는 FrameTimeline이라는 기능을 제공하여 특정 애플리케이션의 프레임 상태를 한눈에 파악할 수 있게 합니다. 주요 색상 코드는 다음과 같습니다:

색상 상태 설명
초록색 정상 프레임 문제 없는 상태
연두색 고지연 상태 입력 지연이 발생
빨간색 카드 프레임 현재 앱에서 발생한 지연
노란색 외부 지연 SurfaceFlinger 등의 외부 요소에서 발생한 지연
파란색 프레임 드랍 더 새로운 프레임으로 교체되어 표시되지 않은 프레임

또한, 메인 스레드와 렌더링 스레드의 작업 흐름도 확인할 수 있습니다.

태그: Perfetto Android PerformanceAnalysis

6월 24일 23:29에 게시됨