Interrupt Rate Calculator
Calculate interrupts per second from /proc/interrupts deltas and estimate CPU overhead.
Inputs
Interrupts per Second
5,000.0
CPU Overhead (% of total capacity)
0.6250%
CPU Overhead (% of one core)
2.5000%
Interrupt Count Delta
50,000
Assessment
Normal interrupt rate for typical server workloads.
Step by step
Values used
Interrupt Count at t0 (from /proc/interrupts) = 1,000,000; Interrupt Count at t1 (from /proc/interrupts) = 1,050,000; Sampling Interval (seconds) = 10; Average Handler Execution Time (µs) = 5; CPU Cores = 4
Interrupt rate and overhead
interrupts_per_sec = (count_t1 − count_t0) / interval; overhead = interrupts_per_sec × handler_time
Interrupts per Second
= 5,000.0
CPU Overhead (% of total capacity)
= 0.6250
CPU Overhead (% of one core)
= 2.5000
Interrupt Count Delta
= 50,000
Assessment
= Normal interrupt rate for typical server workloads.
How it works
/proc/interrupts exposes cumulative interrupt counts per IRQ line per CPU since boot; sampling it twice and dividing the delta by the elapsed time gives interrupts per second, the standard way tools like `vmstat` (in) and `mpstat` (%irq/%soft) derive their interrupt-rate metrics. Multiplying that rate by average handler execution time estimates the CPU time consumed purely by interrupt handling — usually negligible, but on high-throughput network or storage systems with poor IRQ distribution across cores, this overhead can become a measurable and unevenly-distributed tax on available CPU capacity.
Formula
Interrupt rate and overhead
interrupts_per_sec = (count_t1 − count_t0) / interval; overhead = interrupts_per_sec × handler_time
- C_0
- count at t0
- C_1
- count at t1
- "\\Delta t"
- interval seconds
- h
- handler execution time
Frequently Asked Questions
Why does my interrupt rate need two samples instead of one?
/proc/interrupts reports a cumulative counter since boot, not a rate — a single reading just tells you the total historical count. Rate requires sampling the counter at two points in time and dividing the difference by the elapsed interval, the same approach `vmstat 1` uses internally for its 'in' (interrupts/sec) column.
What's the difference between hardware interrupts and softirqs?
Hardware interrupts (IRQs) are raised directly by devices and handled with minimal, fast top-half handlers; much of the actual processing work is deferred to softirqs (bottom halves) or threaded IRQ handlers, which run later at a lower priority. `mpstat`'s %irq and %soft columns report these separately, and high %soft often indicates network packet processing (NET_RX/NET_TX softirqs) load.
How can I spread interrupt load across multiple cores?
Check /proc/interrupts per-CPU columns to see if one core is handling disproportionately many interrupts for a given IRQ, then use `irqbalance` (usually running by default) or manually set /proc/irq/<N>/smp_affinity to distribute a busy device's interrupts (e.g. a multi-queue NIC) across more cores.