Skip to content
Calcrivo

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

  1. 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

  2. Interrupt rate and overhead

    interrupts_per_sec = (count_t1 − count_t0) / interval; overhead = interrupts_per_sec × handler_time

  3. Interrupts per Second

    = 5,000.0

  4. CPU Overhead (% of total capacity)

    = 0.6250

  5. CPU Overhead (% of one core)

    = 2.5000

  6. Interrupt Count Delta

    = 50,000

  7. 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.

You might also need