The xCapture and xtop eBPF tools are now in beta, with a demo dataset

2025-09-09

The title says it all, I think it’s time to call the xcapture and xtop toolset a beta version now. There are plenty of bugs, issues and shortcomings to fix before calling this production-grade, but I want people to be able to play with this sooner!

I plan to announce the production release (or at least a release candidate) at P99CONF this October. Holding myself back from adding more interesting features instead of fixing “boring” known issues is the hardest thing - eBPF can really give you superpowers!

I have added a few MB of compressed parquet files (and some CSVs) to the xtop/demo/ directory, so you can play with the xtop TUI even on your laptop, without having to run xcapture on some Linux machine first.

The 0x.tools repo link and four 1-minute asciicasts about different functionality (all based on the same xcapture data source!) are below:

Source: github.com/tanelpoder/0xtools

Thread sleep and TCP connection metrics

Disk IO waits and filename/blockdevice latency drilldown

Kernel and user-level thread stack trace sampling

Text mode output for scripting and testing

Running xtop demo

It’s simple, works on Linux, Mac (Python 3.8+ should be ok) if you just want to navigate through the existing xcapture demo files using the xtop text UI. For running xcapture, you of course need to be on Linux and have a new enough kernel (instructions are in the GitHub repo).

For xtop, you need something like this:

source ~/dev/venv/bin/activate # use your own python venv
pip install duckdb textual

git clone https://github.com/tanelpoder/0xtools.git

cd 0xtools/xtop
export XCAPTURE_DATADIR=demo

./xtop

Running xtop without arguments will make it look up the latest hourly files in XCAPTURE_DATADIR location and visualize whatever is in there:

$ ls -lh $XCAPTURE_DATADIR
total 9.7M
-r--r--r-- 1 tanel tanel  900 Sep  8 15:56 partitions
-rw-rw-r-- 1 tanel tanel 1.2K Sep  8 15:56 xcapture_cgroups_2025-09-05.13.parquet
-rw-rw-r-- 1 tanel tanel 1.3K Sep  8 15:56 xcapture_cgroups_2025-09-05.14.parquet
-rw-rw-r-- 1 tanel tanel 1.5M Sep  8 15:56 xcapture_iorqend_2025-09-05.13.parquet
-rw-rw-r-- 1 tanel tanel 117K Sep  8 15:56 xcapture_iorqend_2025-09-05.14.parquet
-rw-rw-r-- 1 tanel tanel 1.4K Sep  8 15:56 xcapture_iorqmap_2025-09-05.13.parquet
-rw-rw-r-- 1 tanel tanel 1.4K Sep  8 15:56 xcapture_iorqmap_2025-09-05.14.parquet
-rw-rw-r-- 1 tanel tanel 5.8K Sep  8 15:56 xcapture_kstacks_2025-09-05.13.parquet
-rw-rw-r-- 1 tanel tanel  11K Sep  8 15:56 xcapture_kstacks_2025-09-05.14.parquet
-rw-rw-r-- 1 tanel tanel 3.8M Sep  8 15:56 xcapture_samples_2025-09-05.13.parquet
-rw-rw-r-- 1 tanel tanel 1.9M Sep  8 15:56 xcapture_samples_2025-09-05.14.parquet
-rw-rw-r-- 1 tanel tanel 1.9M Sep  8 15:56 xcapture_syscend_2025-09-05.13.parquet
-rw-rw-r-- 1 tanel tanel 582K Sep  8 15:56 xcapture_syscend_2025-09-05.14.parquet
-rw-rw-r-- 1 tanel tanel  13K Sep  8 15:56 xcapture_ustacks_2025-09-05.13.parquet
-rw-rw-r-- 1 tanel tanel  48K Sep  8 15:56 xcapture_ustacks_2025-09-05.14.parquet

You can also run xtop with --from and --to options (currently you need to use both, due to a bug):

$ ./xtop -d /home/tanel/dev/0xtools-next/xtop/demo \
  --from "2025-09-05T13:00:00" --to "2025-09-05T14:30:00" \
  --where "STATE='DISK'" -g state,username,comm,syscall,filenamesum,devname \
  --textmode --latency iolat_histogram --peek --limit 15

You can also see the (dynamically discovered) full column list that xtop has access to by running:

./xtop --list

And that is all!


  1. Updated video course material to be announced soon:
    Linux Performance & Troubleshooting training, Advanced Oracle SQL Tuning training, Advanced Oracle Troubleshooting training.
    Check the current versions out here! ^^^
  2. Get randomly timed updates by email or follow Social/RSS