본문 바로가기
IT 이야기/Android Performance

Perfetto - Recording traces on Android boot

by KaySeo 2023. 12. 1.
반응형

Android 13(T)부터는 Perfetto를 이용하여 booting시의 trace를 잡을 수 있습니다.

boot process를 profiling할 때 크게 도움이 될 수 있을 거라 생각이 되어 어떻게 Perfetto를 이용하여 trace를 잡는 지 설명하도록 하겠습니다.

 

Steps:

1. 먼저 Perfetto trace를 Record하기 위해서는 아래와 같이 Text 포맷으로 Recording 할 내용이 담긴 config 파일을 생성해야 합니다.

# One buffer allocated within the central tracing binary for the entire trace,
# shared by the two data sources below.
buffers {
  size_kb: 32768
  fill_policy: DISCARD
}

# Ftrace data from the kernel, mainly the process scheduling events.
data_sources {
  config {
    name: "linux.ftrace"
    target_buffer: 0
    ftrace_config {
      ftrace_events: "sched_switch"
      ftrace_events: "sched_waking"
      ftrace_events: "sched_wakeup_new"

      ftrace_events: "task_newtask"
      ftrace_events: "task_rename"

      ftrace_events: "sched_process_exec"
      ftrace_events: "sched_process_exit"
      ftrace_events: "sched_process_fork"
      ftrace_events: "sched_process_free"
      ftrace_events: "sched_process_hang"
      ftrace_events: "sched_process_wait"
    }
  }
}

# Resolve process commandlines and parent/child relationships, to better
# interpret the ftrace events, which are in terms of pids.
data_sources {
  config {
    name: "linux.process_stats"
    target_buffer: 0
  }
}

# 10s trace, but can be stopped prematurely via `adb shell pkill -u perfetto`.
duration_ms: 10000

아래 site를 가보시면 여러 케이스에 대한 config 파일이 있으므로 참고하시기 바랍니다.

https://cs.android.com/android/platform/superproject/+/main:external/perfetto/test/configs/

 

https://cs.android.com/android/platform/superproject/+/main:external/perfetto/test/configs/

 

cs.android.com

2. 생성한 config 파일을 Device의 /data/misc/perfetto-configs/폴더에 boottrace.pbtx 파일로 push합니다.

adb push <configfile> /data/misc/perfetto-configs/boottrace.pbtxt

 

3. perfetto_trace_on_boot service 를 실행하기 위해 아래 property를 1로 set 합니다. 이 property의 경우 boot 시에 reset 되기 때문에 다음 booting에서 trace를 record하기 위해서는 먼저 property를 1로 set해줘야 합니다.

adb shell setprop persist.debug.perfetto.boottrace 1

 

4. 디바이스를 Reboot 합니다.

 

5. Booting이 완료되면 record된 trace파일은 /data/misc/perfetto-traces/폴더에 boottrace.perfetto-trace 파일로 저장됩니다. 이 trace 파일은 새롭게 trace의 record를 시작하기 전에 삭제처리됩니다.

adb pull /data/misc/perfetto-traces/boottrace.perfetto-trace

만일 1번에 기재한 config를 이용한다면 duration_ms 후에 recording이 멈추게 되므로 적당한 값으로 설정되어야 한다는 점을 주의해주시기 바랍니다.

 

6. Record된 boottrace.perfetto-trace 파일은 ui.perfetto.dev 에서 확인할 수 있습니다.

 

※ 주의

1. trace를 시작하기 전에 /data 가 mount 되고 persistent properties가 load되어 있어야 합니다.

2. trace를 start하는 명령은 init service에서 oneshot 형태로 구현되어 있어야 합니다.

 

※ 참고사이트

https://perfetto.dev/docs/case-studies/android-boot-tracing

 

Recording traces on Android boot - Perfetto Tracing Docs

Recording traces on Android boot Since Android 13 (T), perfetto can be configured to automatically start recording traces on boot. This can be useful to profile the boot process. Steps Create a file with the desired trace configuration in Text format (not

perfetto.dev

https://perfetto.dev/docs/concepts/config

 

Trace configuration - Perfetto Tracing Docs

Trace configurationUnlike many always-on logging systems (e.g. Linux's rsyslog, Android's logcat), in Perfetto all tracing data sources are idle by default and record data only when instructed to do so. Data sources record data only when one (or more) trac

perfetto.dev

https://www.cnblogs.com/changweijinghu/p/15599579.html

 

android 使用 perfetto 抓取atrace - 长尾景虎 - 博客园

最近项目的原因需要抓自定义的一些atrace,发现使用google 自带的systrace python脚本抓出来的log使用chrome已经打不开了。 想着用用比较时髦的perfetto吧,发现无论如何也抓不到自定义的trace了,细看

www.cnblogs.com

 

반응형