xref: /aosp_15_r20/external/perfetto/docs/quickstart/linux-tracing.md (revision 6dbdd20afdafa5e3ca9b8809fa73465d530080dc)
1*6dbdd20aSAndroid Build Coastguard Worker# Quickstart: Record traces on Linux
2*6dbdd20aSAndroid Build Coastguard Worker
3*6dbdd20aSAndroid Build Coastguard WorkerPerfetto can capture system traces on Linux. All ftrace-based data sources
4*6dbdd20aSAndroid Build Coastguard Workerand most other procfs / sysfs-based data sources are supported.
5*6dbdd20aSAndroid Build Coastguard Worker
6*6dbdd20aSAndroid Build Coastguard WorkerCurrently there are no packages or prebuilts for Linux. In order to run Perfetto
7*6dbdd20aSAndroid Build Coastguard Workeron Linux you need to build it from source.
8*6dbdd20aSAndroid Build Coastguard Worker
9*6dbdd20aSAndroid Build Coastguard Worker## Building from source
10*6dbdd20aSAndroid Build Coastguard Worker
11*6dbdd20aSAndroid Build Coastguard Worker1. Check out the code:
12*6dbdd20aSAndroid Build Coastguard Worker```bash
13*6dbdd20aSAndroid Build Coastguard Workergit clone https://android.googlesource.com/platform/external/perfetto/ && cd perfetto
14*6dbdd20aSAndroid Build Coastguard Worker```
15*6dbdd20aSAndroid Build Coastguard Worker
16*6dbdd20aSAndroid Build Coastguard Worker2. Download and extract build dependencies:
17*6dbdd20aSAndroid Build Coastguard Worker```bash
18*6dbdd20aSAndroid Build Coastguard Workertools/install-build-deps
19*6dbdd20aSAndroid Build Coastguard Worker```
20*6dbdd20aSAndroid Build Coastguard Worker_If the script fails with SSL errors, try upgrading your openssl package._
21*6dbdd20aSAndroid Build Coastguard Worker
22*6dbdd20aSAndroid Build Coastguard Worker3. Generate the build configuration
23*6dbdd20aSAndroid Build Coastguard Worker```bash
24*6dbdd20aSAndroid Build Coastguard Workertools/gn gen --args='is_debug=false' out/linux
25*6dbdd20aSAndroid Build Coastguard Worker# Or use `tools/setup_all_configs.py` to generate more build configs.
26*6dbdd20aSAndroid Build Coastguard Worker```
27*6dbdd20aSAndroid Build Coastguard Worker
28*6dbdd20aSAndroid Build Coastguard Worker4. Build the Linux tracing binaries (On Linux it uses a hermetic clang toolchain, downloaded as part of step 2):
29*6dbdd20aSAndroid Build Coastguard Worker```bash
30*6dbdd20aSAndroid Build Coastguard Workertools/ninja -C out/linux tracebox traced traced_probes perfetto
31*6dbdd20aSAndroid Build Coastguard Worker```
32*6dbdd20aSAndroid Build Coastguard Worker
33*6dbdd20aSAndroid Build Coastguard Worker## Capturing a trace
34*6dbdd20aSAndroid Build Coastguard Worker
35*6dbdd20aSAndroid Build Coastguard WorkerDue to Perfetto's [service-based architecture](/docs/concepts/service-model.md),
36*6dbdd20aSAndroid Build Coastguard Workerin order to capture a trace, the `traced` (session daemon) and `traced_probes`
37*6dbdd20aSAndroid Build Coastguard Worker(probes and ftrace-interop daemon) need to be running.
38*6dbdd20aSAndroid Build Coastguard WorkerAs per Perfetto v16, the `tracebox` binary bundles together all the binaries you
39*6dbdd20aSAndroid Build Coastguard Workerneed in a single executable (a bit like `toybox` or `busybox`).
40*6dbdd20aSAndroid Build Coastguard Worker
41*6dbdd20aSAndroid Build Coastguard Worker#### Capturing a trace with ftrace and /proc pollers, no SDK
42*6dbdd20aSAndroid Build Coastguard Worker
43*6dbdd20aSAndroid Build Coastguard WorkerIf you are interested in overall system tracing and are not interested in
44*6dbdd20aSAndroid Build Coastguard Workertesting the SDK, you can use `tracebox` in autostart mode as follows:
45*6dbdd20aSAndroid Build Coastguard Worker
46*6dbdd20aSAndroid Build Coastguard Worker```bash
47*6dbdd20aSAndroid Build Coastguard Workerout/linux/tracebox -o trace_file.perfetto-trace --txt -c test/configs/scheduling.cfg
48*6dbdd20aSAndroid Build Coastguard Worker```
49*6dbdd20aSAndroid Build Coastguard Worker
50*6dbdd20aSAndroid Build Coastguard Worker#### Testing the SDK integration in out-of-process tracing mode (system mode)
51*6dbdd20aSAndroid Build Coastguard Worker
52*6dbdd20aSAndroid Build Coastguard WorkerIf you are using the Perfetto [tracing SDK](/docs/instrumentation/tracing-sdk)
53*6dbdd20aSAndroid Build Coastguard Workerand want to capture a fused trace that contains both system traces events and
54*6dbdd20aSAndroid Build Coastguard Workeryour custom app trace events, you need to start the `traced` and `traced_probes`
55*6dbdd20aSAndroid Build Coastguard Workerservices ahead of time and then use the `perfetto` cmdline client.
56*6dbdd20aSAndroid Build Coastguard Worker
57*6dbdd20aSAndroid Build Coastguard WorkerFor a quick start, the [tools/tmux](/tools/tmux) script takes care of building,
58*6dbdd20aSAndroid Build Coastguard Workersetting up and running everything.
59*6dbdd20aSAndroid Build Coastguard WorkerAs an example, let's look at the process scheduling data, which will be obtained
60*6dbdd20aSAndroid Build Coastguard Workerfrom the Linux kernel via the [ftrace] interface.
61*6dbdd20aSAndroid Build Coastguard Worker
62*6dbdd20aSAndroid Build Coastguard Worker[ftrace]: https://www.kernel.org/doc/Documentation/trace/ftrace.txt
63*6dbdd20aSAndroid Build Coastguard Worker
64*6dbdd20aSAndroid Build Coastguard Worker1. Run the convenience script with an example tracing config (10s duration):
65*6dbdd20aSAndroid Build Coastguard Worker```bash
66*6dbdd20aSAndroid Build Coastguard Workertools/tmux -c test/configs/scheduling.cfg -C out/linux -n
67*6dbdd20aSAndroid Build Coastguard Worker```
68*6dbdd20aSAndroid Build Coastguard WorkerThis will open a tmux window with three panes, one per the binary involved in
69*6dbdd20aSAndroid Build Coastguard Workertracing: `traced`, `traced_probes` and the `perfetto` client cmdline.
70*6dbdd20aSAndroid Build Coastguard Worker
71*6dbdd20aSAndroid Build Coastguard Worker2. Start the tracing session by running the pre-filled `perfetto` command in
72*6dbdd20aSAndroid Build Coastguard Worker   the down-most [consumer] pane.
73*6dbdd20aSAndroid Build Coastguard Worker
74*6dbdd20aSAndroid Build Coastguard Worker3. Detach from the tmux session with `Ctrl-B D`,or shut it down with
75*6dbdd20aSAndroid Build Coastguard Worker   `tmux kill-session -t demo`. The script will then copy the trace to
76*6dbdd20aSAndroid Build Coastguard Worker   `/tmp/trace.perfetto-trace`, as a binary-encoded protobuf (see
77*6dbdd20aSAndroid Build Coastguard Worker   [TracePacket reference](/docs/reference/trace-packet-proto.autogen)).
78*6dbdd20aSAndroid Build Coastguard Worker
79*6dbdd20aSAndroid Build Coastguard Worker## Visualizing the trace
80*6dbdd20aSAndroid Build Coastguard Worker
81*6dbdd20aSAndroid Build Coastguard WorkerWe can now explore the captured trace visually by using a dedicated web-based UI.
82*6dbdd20aSAndroid Build Coastguard Worker
83*6dbdd20aSAndroid Build Coastguard WorkerNOTE: The UI runs in-browser using JavaScript + Web Assembly. The trace
84*6dbdd20aSAndroid Build Coastguard Worker      file is **not** uploaded anywhere by default, unless you explicitly click
85*6dbdd20aSAndroid Build Coastguard Worker      on the 'Share' link. The 'Share' link is available only to Googlers.
86*6dbdd20aSAndroid Build Coastguard Worker
87*6dbdd20aSAndroid Build Coastguard Worker1. Navigate to [ui.perfetto.dev](https://ui.perfetto.dev) in a browser.
88*6dbdd20aSAndroid Build Coastguard Worker
89*6dbdd20aSAndroid Build Coastguard Worker2. Click the **Open trace file** on the left-hand menu, and load the captured
90*6dbdd20aSAndroid Build Coastguard Worker   trace (by default at `/tmp/trace.perfetto-trace`).
91*6dbdd20aSAndroid Build Coastguard Worker
92*6dbdd20aSAndroid Build Coastguard Worker3. Explore the trace by zooming/panning using WASD, and mouse for expanding
93*6dbdd20aSAndroid Build Coastguard Worker   process tracks (rows) into their constituent thread tracks.
94*6dbdd20aSAndroid Build Coastguard Worker   Press "?" for further navigation controls.
95*6dbdd20aSAndroid Build Coastguard Worker
96*6dbdd20aSAndroid Build Coastguard WorkerAlternatively, you can explore the trace contents issuing SQL queries through
97*6dbdd20aSAndroid Build Coastguard Workerthe [trace processor](/docs/analysis/trace-processor).
98