80 lines
2.6 KiB
Markdown
80 lines
2.6 KiB
Markdown
# 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](/docs/concepts/config.md)
|
|
in Text format (not binary). Example (more in [/test/configs/](/test/configs/)):
|
|
```
|
|
# 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
|
|
```
|
|
* Put the file on the device at `/data/misc/perfetto-configs/boottrace.pbtxt`:
|
|
```
|
|
adb push <yourfile> /data/misc/perfetto-configs/boottrace.pbtxt
|
|
```
|
|
* Enable the `perfetto_trace_on_boot` service:
|
|
```
|
|
adb shell setprop persist.debug.perfetto.boottrace 1
|
|
```
|
|
The property is reset on boot. In order to trace the next boot, the command
|
|
must be reissued.
|
|
* Reboot the device.
|
|
* The output trace will be written at
|
|
`/data/misc/perfetto-traces/boottrace.perfetto-trace`. The file will be
|
|
removed before a new trace is started.
|
|
```
|
|
adb pull /data/misc/perfetto-traces/boottrace.perfetto-trace
|
|
```
|
|
**N.B.:** The file will appear after the recording has stopped (be sure to set
|
|
`duration_ms` to a reasonable value in the config) or after the first
|
|
`flush_period_ms`.
|
|
* `boottrace.perfetto-trace` can now be opened in
|
|
[ui.perfetto.dev](https://ui.perfetto.dev/)
|
|
|
|
## Implementation details
|
|
* The trace will start only after persistent properties are loaded, which
|
|
happens after /data has been mounted.
|
|
* The command to start the trace is implemented as oneshot init service.
|