Averages hide the tail
One healthy average can coexist with a handful of slow events that users actually feel.
eBPF-powered Linux performance diagnostics
rand-fast measures scheduler latency for a specific process, turning a vague slowdown into a signal you can investigate.
$ sudo fast sched --pid 1234 --duration 10s
Example output
Scheduler latency
The problem
CPU graphs can tell you that a service is busy. They rarely tell you why one request waited longer than the next. Scheduler latency makes that hidden wait measurable.
One healthy average can coexist with a handful of slow events that users actually feel.
Start with the process that regressed, then follow its threads and the CPUs they wait for.
Wakeups and context switches show the gap between work becoming runnable and actually running.
How it works
Three kernel events. One answer to the question: how long did this process wait?
sched_wakeuprand-fast records when a target thread is woken and ready to compete for CPU time.
runnableThe elapsed time between wakeup and execution becomes a scheduler latency event.
sched_switchEvents are aggregated by percentile, threshold, process, and CPU for a useful signal.
v0.1 / Scheduler
Start with the process you care about. Keep the output small enough to act on.
Focus on one PID and its threads instead of drowning in host-wide averages.
p50, p95, p99, and max expose the waits that an average keeps hidden.
Break scheduler latency down by CPU to reveal where runnable work is waiting.
Trace wakeups and switches with eBPF, without adding application instrumentation.
Quick start
Point fast at a PID, give it a measurement window, and inspect the scheduler latency tail.
$ sudo fast sched --pid 1234 --duration 10sThe roadmap
Scheduler latency is the first instrument. The roadmap expands rand-fast from a focused probe into a complete Linux performance flight recorder.
Measure per-process scheduler latency and CPU contention.
Connect CPU saturation, hot stacks, and scheduler pressure.
Find slow devices and process-level I/O bottlenecks.
Follow connection latency from the process to the remote endpoint.
Show where threads wait when they are not running.
Connect memory pressure to real application slowdowns.
Rank multiple signals and explain the most likely cause.
Keep low-cost observability running until an incident needs detail.
The first measurement is the fastest way in.