blob: 96fc4b5cd485fea3104d006c33c624025dbb4050 [file] [view] [edit]
# TRACEBOX(1)
## NAME
tracebox - all-in-one binary for Perfetto tracing services
## DESCRIPTION
`tracebox` bundles all Perfetto tracing services (`traced`, `traced_probes`,
`traced_perf`) and the `perfetto` command-line client into a single binary. It
is the primary tool for recording traces on Linux systems where Perfetto is not
pre-installed as a system service.
**Key behavior change (2025):** `tracebox` no longer spawns temporary daemons by default.
It expects daemons to be already running. Use `tracebox ctl` to manage them or
`--autodaemonize` for the classic self-contained mode.
## MODES OF OPERATION
`tracebox` supports three distinct modes of operation depending on how you want
to manage the lifecycle of the tracing services.
### 1. Managed Mode (Recommended)
In this mode, you explicitly start and stop the tracing services using the `ctl`
applet. This creates persistent background daemons that remain active across
multiple tracing sessions.
**Commands:**
`tracebox ctl start`
: Starts `traced` and `traced_probes` in the background.
`tracebox ctl stop`
: Stops daemons started via `ctl start`.
`tracebox ctl status`
: Checks if daemons are running, accessible, and which sockets they are using.
**Example Workflow:**
```bash
# Start services once (as root for full system/SDK support)
./tracebox ctl start
# Record multiple traces
./tracebox -t 10s -o trace1.pftrace sched
./tracebox -t 10s -o trace2.pftrace sched
# Stop services when finished
./tracebox ctl stop
```
### 2. Autodaemonize Mode
In this mode, `tracebox` spawns temporary, ephemeral daemons solely for the
duration of a single command. The daemons are cleaned up automatically when the
command finishes.
**Usage:**
Pass the `--autodaemonize` flag before other arguments.
```bash
# Start daemons, record trace, stop daemons
./tracebox --autodaemonize -t 10s -o trace.pftrace sched
```
### 3. Applet Mode
`tracebox` can behave like any of the bundled binaries if invoked with that
binary's name as the first argument (or if symlinked to that name).
**Available Applets:** `traced`, `traced_probes`, `traced_perf`, `perfetto`,
`trigger_perfetto`, `websocket_bridge`, `ctl`.
**Example:**
```bash
# equivalent to running the standalone 'perfetto' client
./tracebox perfetto -t 10s -o trace.pftrace sched
```
## CHOOSING BETWEEN MANAGED AND AUTODAEMONIZE
Choosing the right mode depends on your specific tracing needs, particularly
regarding application instrumentation and workflow frequency.
### When to use Managed Mode (`ctl`)
This is the preferred mode for most workflows.
* **SDK/App Tracing:** If you are tracing applications instrumented with the
Perfetto SDK (using `track_event`), you **must** use Managed Mode (usually
as root). SDK applications connect to the standard system socket paths
(e.g., `/run/perfetto/` on Linux).
* **Repeated Tracing:** If you are recording multiple traces in succession,
Managed Mode avoids the overhead of restarting the services for every trace.
* **Interactivity:** Useful when manually exploring system behavior and you
want the tracing service to be always available.
### When to use Autodaemonize Mode
* **One-off Scripts:** Useful for self-contained scripts or cron jobs where
you want to ensure no leftover processes remain after execution.
* **Debugging:** Quick verification of ftrace events where setting up a full
service is unnecessary.