Perfetto can capture system traces on Linux. All ftrace-based data sources and most other procfs / sysfs-based data sources are supported.
Currently there are no packages or prebuilts for Linux. In order to run Perfetto on Linux you need to build it from source.
git clone https://android.googlesource.com/platform/external/perfetto/ && cd perfetto
tools/install-build-deps
If the script fails with SSL errors, try invoking it as python3 tools/install-build-deps
, or upgrading your openssl libraries.
tools/build_all_configs.py
tools/ninja -C out/linux_clang_release traced traced_probes perfetto
This step is optional when using the convenience tools/tmux
script below.
Due to Perfetto's service-based architecture, in order to capture a trace, the traced
(session daemon) and traced_probes
(probes and ftrace-interop daemon) need to be running.
For a quick start, the tools/tmux script takes care of building, setting up and running everything. As an example, let's look at the process scheduling data, which will be obtained from the Linux kernel via the ftrace interface.
OUT=out/linux_clang_release CONFIG=test/configs/scheduling.cfg tools/tmux -n
This will open a tmux window with three panes, one per the binary involved in tracing: traced
, traced_probes
and the perfetto
client cmdline.
Start the tracing session by running the pre-filled perfetto
command in the down-most [consumer] pane.
Detach from the tmux session with Ctrl-B D
,or shut it down with tmux kill-session -t demo
. The script will then copy the trace to /tmp/trace.protobuf
, as a binary-encoded protobuf (see TracePacket reference).
We can now explore the captured trace visually by using a dedicated web-based UI.
NOTE: The UI runs fully in-browser using JavaScript + Web Assembly. The trace file is not uploaded anywhere by default, unless you explicitly click on the ‘Share’ link.
Navigate to ui.perfetto.dev in a browser.
Click the Open trace file on the left-hand menu, and load the captured trace (by default at /tmp/trace.protobuf
).
Explore the trace by zooming/panning using WASD, and mouse for expanding process tracks (rows) into their constituent thread tracks. Press “?” for further navigation controls.
Alternatively, you can explore the trace contents issuing SQL queries through the trace processor.