Two tools, one trace schema. The Android app (the default)
and the Python CLI (see the repository README) both collect
the same I/O streams and write the same columns — only the compression container
differs (.csv.gz for the app, .csv.zst for the CLI).
- Android app — build, install, run, and the app architecture. The recommended, on-device way to trace.
- Quick start without root — what you can collect on an
unrooted device (snapshot-only), and how to get root (emulator / Magisk /
userdebug) for the full block trace.
- Trace types & collection — the streams, how each one is collected, the collection pipeline, and the clock model.
- Trace format — the exact CSV columns for every stream,
the
manifest.json, and how to read compressed traces. - Block I/O events — deep dive on the primary
dsstream: rwbs decoding and issue→complete latency recovery.
- Schema source of truth:
src/tracer/schema.py(SCHEMA_VERSION), mirrored 1:1 by the app'sSchema.kt. Bump the version whenever columns change. - Compression: app →
.csv.gz, CLI →.csv.zst(or plain.csvifzstandardis absent). The columns are identical either way. - Clock: every record carries a trailing
mono_ns(CLOCK_MONOTONIC) column — the common clock for correlating records across streams.