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/
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
https://perfetto.dev/docs/concepts/config
https://www.cnblogs.com/changweijinghu/p/15599579.html