The kernel writes records to an internal buffer to capture traces of various actions. These traces can then be retrieved, printed, and viewed in a tool such as Perfetto.
Kernel trace format
The kernel trace format uses FXT.
Trace buffer size
The size of the trace buffer is fixed at boot time and is controlled by
the ktrace.bufsize kernel command-line parameter. Its value is the
buffer size in megabytes. The default is 32MB.
Control what to trace
You can control what to trace through the kernel command-line parameter
ktrace.grpmask. The value is specified as 0xNNN and is a bitmask of tracing
groups to enable. See the KTRACEGRP values in
system/ulib/zircon-internal/include/lib/zircon-internal/ktrace.h. By default,
the value is 0xfff which traces everything.
You can also dynamically control what to trace with the ktrace command-line
utility.
ktrace command-line utility
You can control kernel tracing with the ktrace command-line utility.
Use ktrace --help to see all of the available commands:
ktrace --helpYou should see an output like:
Usage: ktrace [options] <control>
Where <control> is one of:
start <group_mask> - start tracing
stop - stop tracing
rewind - rewind trace buffer
written - print bytes written to trace buffer
Note: This value doesn't reset on "rewind". Instead, the rewind
takes effect on the next "start".
save <path> - save contents of trace buffer to <path>
Options:
--help - Duh.
View a kernel trace
You can view a trace with ui.perfetto.dev. Before you can view a trace, you
need to capture a trace.
Start the trace on the target:
ktrace start 0xfff ... do something ...
Stop the trace:
ktrace stopSave the trace to
/tmp/save.ktrace:ktrace save /tmp/save.ktraceUse
fx cpto copy the file to your development host:fx cp --to-host /tmp/save.ktrace save.fxtView the trace file in
ui.perfetto.dev.
Use with Fuchsia Tracing
Fuchsia's tracing system supports collecting kernel trace records through the
ktrace_provider trace provider. For more information about Fuchsia's tracing
system, see Fuchsia tracing system.