Skip to content
System & Hardware9 min readPublished: September 9, 2026

Why Is System Interrupts High CPU Usage? Kernel-Level ISR and DPC Diagnostics

High System Interrupts CPU usage indicates low-level driver or ACPI hardware latency preempting the Windows kernel scheduler via prolonged Interrupt Service Routines (ISRs) and Deferred Procedure Calls (DPCs). Learn to trace the exact offending .sys driver or firmware conflict using Event Tracing for Windows (ETW) and Windows Performance Analyzer without third-party driver bloatware.

Written by WasyTech Engineering Β· Core Engineering Team
Share:𝕏RedditLinkedIn

Seeing System Interrupts high CPU usage in Windows Task Manager is one of the most misunderstood performance bottlenecks in modern systems. Most generic guides suggest trivial fixes like running a virus scan or using dangerous third-party "driver updater" tools.

To resolve high CPU utilization caused by System Interrupts, we must examine the Windows NT kernel (ntoskrnl.exe). System Interrupts is not a user-mode processβ€”it is a visual placeholder representing the execution time of Interrupt Service Routines (ISRs) and Deferred Procedure Calls (DPCs) executing at elevated Interrupt Request Levels (IRQL).

---

Quick Diagnostic: Triage System Interrupts

If your system is unresponsive or dropping frames due to an interrupt storm, use this rapid triage baseline:

Metric / ParameterNormal BaselineFault State
**Idle CPU Usage**0.1% – 2.0%Constant > 5.0%
**Single ISR Routine Duration**< 25 microseconds ($\mu s$)> 100 microseconds ($\mu s$)
**Single DPC Routine Duration**< 100 microseconds ($\mu s$)> 500 microseconds ($\mu s$)
powershell
# Run PowerShell as Administrator to capture a 10-second DPC/ISR kernel trace via native Windows tools
wpr -start CPU -start DPC -filemode
Start-Sleep -Seconds 10
wpr -stop C:\KernelInterruptTrace.etl

*Note: The generated .etl file can be ingested directly into the Windows Performance Analyzer (WPA) to pinpoint the exact offending .sys binary.*

---

Deconstructing System Interrupts: What Task Manager Isn't Showing

In the Windows architecture, CPU execution time is split between user-mode threads and kernel-mode operations. When a physical device (such as an NVMe controller, GPU, or Wi-Fi card) requires immediate CPU attention, it raises an electrical signal known as a hardware interrupt.

bash
Hardware Assertion ──> DIRQL (ISR Execution) ──> DISPATCH_LEVEL (DPC Queue) ──> PASSIVE_LEVEL (User Threads)
[Hal.dll / Bus]         [Short, atomic work]     [Extended driver work]         [App / Game Threads]

The System Interrupts Pseudo-Process **System Interrupts is not a real executable.** It has no PID, no executable path on disk, and consumes no physical RAM. It is a synthetic counter provided by the Task Manager to aggregate the CPU time spent servicing hardware interrupts that preempt normal thread scheduling.

Because it is an abstraction of the kernel's lowest execution rings: - You cannot right-click and "End Task" on System Interrupts. - You cannot assign it an affinity mask or lower its priority class. - Terminating the underlying operations would require crashing the OS via a bugcheck (DPC_WATCHDOG_VIOLATION or KMODE_EXCEPTION_NOT_HANDLED).

Interrupt Request Levels (IRQL) and CPU Preemption The Windows kernel prioritizes work using **Interrupt Request Levels (IRQL)**. Thread scheduling (where user applications, background services, and even parts of the kernel run) happens at `PASSIVE_LEVEL` (IRQL 0) or `APC_LEVEL` (IRQL 1).

bash
   HIGH_LEVEL (IRQL 31 / 15)  β–²  Machine Checks / Profiling
                              β”‚
   DIRQL (IRQL 3–26)          β”‚  Device Interrupts (ISRs execute here)
                              β”‚
   DISPATCH_LEVEL (IRQL 2)    β”‚  DPC Processing & Kernel Scheduler
                              β”‚
   PASSIVE_LEVEL (IRQL 0)     β”‚  Standard User/Kernel Threads (Games, Apps)

When an interrupt occurs: 1. The CPU raises its execution state to DIRQL (Device IRQL). 2. All execution at lower IRQLsβ€”including the thread scheduler itselfβ€”is instantly suspended on that CPU core. 3. If a driver takes too long at DIRQL or DISPATCH_LEVEL, standard operating system threads starve, resulting in visual stuttering, audio crackling, and high CPU metrics in monitoring tools.

---

The Anatomy of an Interrupt: ISRs vs. DPCs

According to Microsoft Hardware Dev Center guidelines, well-behaved drivers must split interrupt handling into a two-stage pipeline: Interrupt Service Routines (ISRs) and Deferred Procedure Calls (DPCs).

1. Interrupt Service Routine (ISR) The ISR executes at **DIRQL**. Its sole purpose is to acknowledge the hardware signal, clear the interrupt on the physical device register, save critical volatile state, and queue a DPC. - **Target Execution Limit:** Less than **25 microseconds**. - **Constraint:** Code running at DIRQL cannot allocate paged memory, wait on synchronization primitives, or access disk files.

2. Deferred Procedure Call (DPC) The DPC executes at **DISPATCH_LEVEL** (IRQL 2). This routine does the heavy lifting: unpacking network packets, processing raw storage blocks, or transforming sensor data. - **Target Execution Limit:** Less than **100 microseconds** per single routine execution. - **Constraint:** DPCs cannot yield or block; they run to completion sequentially from the processor's DPC queue before any standard user thread is allowed to run on that logical core.

Why System Interrupts Spikes: When a hardware driver misbehaves, it violates these execution limits. If an audio or network driver stays in its DPC loop for 5 milliseconds instead of 50 microseconds, the CPU is trapped at DISPATCH_LEVEL, and Task Manager reports a massive spike under System Interrupts.

---

Root Causes: Why System Interrupts Spike

bash
                  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
                  β”‚ System Interrupts CPU Usage > 5%       β”‚
                  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                                     β”‚
         β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
         β–Ό                           β–Ό                           β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”       β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”       β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ Poorly Coded      β”‚       β”‚ ACPI / C-State    β”‚       β”‚ Physical Bus /    β”‚
β”‚ Driver Routines   β”‚       β”‚ Interrupt Storms  β”‚       β”‚ Hardware Faults   β”‚
β”‚ (.sys execution)  β”‚       β”‚ (Firmware/Power)  β”‚       β”‚ (PCIe, SATA, USB) β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜       β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜       β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

1. Unoptimized or Broken `.sys` Drivers The most common cause is a third-party driver with unoptimized routines. Common culprits include: - `nvlddmkm.sys` (NVIDIA GPU Kernel Mode Driver) - `amdkmdag.sys` (AMD GPU Driver) - `ndis.sys` / `rtwlanu.sys` (Network / Realtek Wi-Fi stacks) - `storahci.sys` / `iaStorA.sys` (Storage AHCI/RAID controllers)

2. ACPI Power Management & Interrupt Storms The **Advanced Configuration and Power Interface (ACPI)** specification defines how the OS manages device power states (C-states for processors, D-states for devices).

As outlined in official Intel and AMD ACPI implementation whitepapers, improper power-state transitions handled by ACPI.sys can trigger interrupt storms. An interrupt storm happens when a device continuously asserts a hardware interrupt line because the BIOS/UEFI firmware failed to balance power states (e.g., C-State Deep Package transitions vs. PCIe Link State Power Management).

3. Physical Hardware and Bus Contention - **PCIe Active State Power Management (ASPM):** Misconfigurations can force a PCIe bus to cycle between `L0` (active) and `L1` (low power) states repeatedly, generating a constant barrage of interrupts. - **SATA/NVMe Interface CRC Errors:** If a storage cable or bus lane is degraded, repeated packet transmission retries trigger continuous DPC executions. - **Failing USB Peripherals:** A dying sensor on a mouse or a miswired USB hub can flood the Host Controller with malformed packets, forcing `USBPORT.SYS` to consume entire CPU cores.

---

Step-by-Step Kernel Isolation: Finding the Offending `.sys` Driver

To fix the problem, you must identify the specific kernel-mode binary executing the long-running DPCs and ISRs.

Method 1: Rapid Triage Using LatencyMon LatencyMon checks system latency by monitoring DPCs and ISRs in real time.

  1. Download and run LatencyMon (free for diagnostic use).
  2. Click the green Start/Play button.
  3. Let it run until System Interrupts begins consuming excessive CPU.
  4. Navigate to the Drivers tab and sort by DPC count and Highest execution (ms).
bash
Driver Name          Highest Execution (ms)    Total Execution (ms)    Description
ndis.sys             4.238120                  142.3021                Network Driver Interface
nvlddmkm.sys         0.892010                  45.1209                 NVIDIA Windows Kernel Mode Driver
ACPI.sys             0.021004                  1.4201                  ACPI Driver for NT

*In this example, ndis.sys spent 4.2ms in a single routineβ€”over 40 times the Microsoft threshold. The network stack is the primary culprit.*

---

Method 2: Advanced Kernel Profiling via Windows Performance Toolkit (WPT) For intermittent issues, use native Event Tracing for Windows (ETW) via Microsoft's official Windows Performance Analyzer (WPA).

#### 1. Capture the Trace Open an administrative command prompt and run:

cmd
xperf -on latency -stackwalk profile -buffersize 1024 -MaxBuffers 1024 -FileMode Circular -MaxFile 1024

*Reproduce the high CPU condition for 15–30 seconds, then stop the trace:*

cmd
xperf -d C:\DpcIsrTrace.etl

#### 2. Analyze the Kernel Trace in WPA 1. Open C:\DpcIsrTrace.etl in Windows Performance Analyzer (available in the Windows Assessment and Deployment Kit via Microsoft Learn). 2. Expand the Computation graph group in the left panel. 3. Drag the DPC and ISR Usage graph into the Analysis pane. 4. Configure the columns to display: - Module (The specific .sys driver) - Function (The specific kernel function executed) - DPC Time (ms) / ISR Time (ms) - Count

bash
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ Module                               β”‚ Function       β”‚ DPC Time (s) β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ storport.sys                         β”‚ StorPortDpc    β”‚ 12.842       β”‚
β”‚ └── iaStorAfs.sys                    β”‚ RaidDpcRoutine β”‚ 11.201       β”‚
β”‚ ntoskrnl.exe                         β”‚ KiExecuteDpc   β”‚ 0.450        β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

This pinpoint view reveals the exact driver layer and sub-routine generating excessive overhead.

---

Remediation: Fixing the Bottleneck Without Bloatware

Once you have identified the culprit driver or subsystem, apply the targeted fix:

bash
Offending Module Identified
 β”œβ”€β”€ Network (ndis.sys / rtwlanu.sys) ──> Disable LSO/Energy Efficient Ethernet; Update via OEM
 β”œβ”€β”€ Storage (iaStorA.sys / storahci) ──> Disable HIPM/DIPM; Replace SATA cables; Check SMART
 β”œβ”€β”€ Power (ACPI.sys) ──────────────────> Update Motherboard BIOS/UEFI; Reset ASPM states
 └── Graphics (nvlddmkm / amdkmdag) ────> Clean install driver via vendor utility (No third-party updaters)

2. Clear ACPI Firmware Loops If `ACPI.sys` is generating the interrupt load: - **Flash the Motherboard BIOS/UEFI:** Microcode updates often patch broken ACPI table entries (`DSDT`/`SSDT`) that cause power state synchronization loops between the OS and chipsets. - **Disable C-State Aggression:** In BIOS, change the global C-State configuration from auto-aggressive to standardized **C1E/C6**, or disable PCIe Native Power Management if the system bus is generating spurious Wake-On-LAN or PCIe bus interrupts.

3. A Critical Warning on "Driver Updaters" Never download third-party "Driver Updater," "Driver Booster," or generic cleaning utilities to resolve System Interrupts.

These programs often inject incorrect .inf packages, bundle aggressive telemetry, and frequently install mismatched generic drivers that worsen DPC latency.

Safe driver hygiene: 1. Download directly from the original component manufacturer (Intel, AMD, NVIDIA, Realtek, or your motherboard vendor). 2. Use raw .inf installations via Windows Device Manager, or official standalone driver packages. 3. Rely on clean Windows Update catalogs rather than third-party modification utilities.

Frequently Asked Technical Questions

Baseline CPU usage for System Interrupts sits strictly between 0.1% and 2% under normal operating conditions. Sustained usage exceeding 5% indicates an anomaly, typically caused by an unoptimized device driver violating Microsoft Hardware Dev Center execution time limits (such as DPCs running longer than 100 microseconds) or a hardware-level interrupt storm stemming from misconfigured ACPI power states.

WasyTech Engineering

Core Engineering Team

The collective engineering minds behind WasyTech's zero-bloat utility architecture.

Focus:Systems ProgrammingPerformance DiagnosticsWindows InternalsNetwork Protocols

Related Systems Guides

View all guides β†’