A top-like TUI for bcachefs filesystems. Real-time per-device IO, latency, and internal stats with built-in tuning advisor.
Built for NASty but works on any system with a mounted bcachefs filesystem.
- Live IO throughput and latency per device with user/btree/journal/sb breakdown
- Latency from bcachefs time_stats (EWMA rolling mean, not useless cumulative averages)
- Per-device IO breakdown using
io_doneJSON andio_latency_stats_*_json - Blocked stats view showing what's actually blocking IO right now (allocator, journal, write buffer, etc.)
- Stall detection with 60-second event log when latency exceeds 200ms
- Tuning hints that flag known bcachefs pressure signals and show an example sysfs command (informational only — not applied automatically)
- Options panel with inline editing of runtime-tunable sysfs options
- Multi-filesystem support — press
fto cycle between mounted bcachefs filesystems - Process IO view showing which processes are doing IO
- Journal fill %, load average, reconcile progress
- Session-aware error counts: the device Err column dims pre-existing counts and turns bold red only when errors grow during the current run — so you can tell at a glance whether a number is dead history or actively climbing
- Consistent color scheme: yellow = read, blue = write, red = errors/stalls
Nix:
nix run github:nasty-project/nasty-topHomebrew (Linux):
brew install fenio/tap/nasty-topDownload binary:
curl -sL https://github.com/nasty-project/nasty-top/releases/latest/download/nasty-top-x86_64-linux.tar.gz | \
sudo tar xzf - -C /usr/local/bin/Build from source:
cargo install --path .
# or cross-compile from macOS:
brew install filosottile/musl-cross/musl-cross
rustup target add x86_64-unknown-linux-musl
./deploy.sh root@your-nasnasty-top [OPTIONS]
Options:
-f, --filesystem <NAME|UUID> Filesystem to monitor (default: first found)
-t, --interval <SECONDS> Refresh interval (default: 2)
-h, --help Print help
| Key | Action |
|---|---|
? |
Toggle help popup |
o |
Toggle options panel (hidden by default) |
c |
Toggle counters view |
t |
Toggle blocked stats / time_stats view |
p |
Toggle process IO view |
r |
Toggle reconcile on/off |
g |
Toggle copygc on/off |
f |
Cycle between filesystems |
Tab |
Switch focus between metrics and options panel |
↑/k, ↓/j |
Navigate options / scroll counter, blocked, process views |
Enter |
Edit selected option value (in options panel) |
Esc |
Cancel edit / dismiss status message |
N |
Mute current hint for 2 minutes |
! |
Never show this hint again |
C |
Clear all permanent mutes |
q / Ctrl-C |
Quit |
| Metric | Source | Notes |
|---|---|---|
| IO throughput | dev-N/io_done (JSON) |
Per-type breakdown, diffed per tick |
| IO latency (device) | dev-N/io_latency_stats_{r,w}_json |
EWMA mean, shown only when active |
| IO latency (fs) | time_stats/data_{read,write} |
"recent" column rolling mean |
| Blocked stats | time_stats/blocked_* |
Count delta per tick + recent mean |
| Journal fill | internal/journal_debug |
dirty/total entries + watermark |
| Reconcile | bcachefs reconcile status |
Subprocess, parsed for progress |
| Process IO | /proc/<pid>/io |
read_bytes/write_bytes diffed |
| Options | options/* |
Read/write directly to sysfs |
When known bcachefs pressure signals fire (journal fill, blocked allocator, etc.), a hint appears in the footer with a short reason and an example sysfs command you could run. Nothing is applied automatically — the hint is informational. The current heuristics are unverified; treat them as a starting point for investigation, not a prescription. See TUNING_RULES.md for the full rule set.
GPL-3.0-only


