daemon:
- storm detection: after 8 captures in 5min, logs STORM STARTED/ENDED to
events.log with duration and capture count; uses longer cooldown (90s)
during storms to reduce log spam while still capturing periodically
- new capture_device_io_digest(): human-readable table of hot devices with
volume label, %util, r_await, w_await, nr_requests — makes USB vs SATA
and dm-crypt queue depth problems immediately visible
- new ## Block device map section (lsblk) in every snapshot
- new classifiers: dm-crypt request pool exhausted (crypt_alloc_buffer +
blk_mq_get_tag pattern), block MQ tag starvation, container/Waydroid
CPU spike (lxc cgroup PSI); USB stall now names the hot volumes
- events.log lines now include the first classifier diagnosis in brackets
- CAPTURE_DEVICE_IO config option (default 1)
gui:
- PSI io full % metric tile and live graph (more severe than io.some)
- storm indicator in status bar showing duration and capture count
- storm events parsed from events.log and shown inline in Snapshots list
(orange, ⚡ prefix), interleaved by timestamp with snapshot entries
- clicking a storm item shows its details in the detail pane
- orange vertical markers on graphs for storm-start events
- Summary tab opens with storm history section (count, avg/max duration,
captures per storm, last 5 storms)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>