If your average CPU load is going up, one cause could be system interrupts that use a high percentage of your CPU power.
In this article we will explain how to identify the bottleneck of your drivers, possibly causing a high CPU usage. Often corrupt drivers, IRQL errors, etc. can cause problems and a spike in CPU usage. So, if you believe your PC needs to be fixed, this will be a good starting point.
Table Of Contents - Quick Links!
Getting Started: Download Windows Performance Kit + DPC Latency Checker
Before you get started, we are going to download some tools to further analyze the processes. The Windows Performance Kit does a good job at finding processes and drivers that are causing a high cpu usage.
1. Head over to Microsoft.com and download the Microsoft Windows SDK for Windows 7 and .NET
2. Run and install the winsdk_web.exe. If you already installed the Windows Debugging Tools or other included tools it will show that, simply select Change during the installation process.
3. You don’t have to install the C++ compilers or the libraries, but make sure to check the option Win32 Development Tools:
4. When you are done enter Windows Performance Tool Kit into the search bar on your Start menu, select the top result and follow the instructions.
IMPORTANT: If you are on 32-bit and it doesn’t show x32, go to C:\Program Files\Microsoft SDKs\Windows\v7.0\bin and double-click on wpt_x86.msi. wpt_x64.msi is for 64-bit systems. wpt_x64.msi is for Itanium Windows.
5. When you are done, download another tool called DPC Latency Checker from here.
IMPORTANT STEP: Disable Paging Execute
Before we can use xperf to properly analyze your driver problems we have to disable paging executive. If you run the commands below without doing this you will get the error:
xperf: warning: This system is not fully configured for x6
Please modify the registry under:
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\Memory Management
and set the value:
DisablePagingExecutive (REG_DWORD) = 1
Then reboot before retrying tracing.
Note: Tracing has been enabled, this is just a warning.
You can either follow the instructions by opening the registry editor and changing the value to 1
Or simply run this command via cmd:
reg add "HKLM\System\CurrentControlSet\Control\Session Manager\Memory Management" -v DisablePagingExecutive -d -t REG_DWORD -f
Using DPC Latency Checker
Now it’s time to use some of the tools we downloaded. First start the dpclat.exe that we downloaded, no worries it’s a portable app. If you really have some driver problems causing system interrupts you should definitely see some yellow and red bars:
A textbox will give you some first useful instructions:
Some device drivers on this machine behave bad and will probably cause drop-outs in real-time audio and/or video streams. To isolate the misbehaving driver use Device Manager and disable/re-enable various devices, one at a time. Try network and W-LAN adapters, modems, internal sound devices, USB host controllers, etc.
Using XPerf To Find Drivers With High CPU Usage
2. Enter xperf -on latency -stackwalk profile
If you get the error xperf: error: NT Kernel Logger: Cannot create a file when that file already exists (0xb7) then all you have to do is reboot!
3. Wait a minute and work with your computer for a while as you normally would, then enter:
xperf -d CPUInterrupt.etl
The performance tool now capture all events and stored the results in a file DPC_interrupt.etl
As the tool points out:
The trace you have just captured “DPC_Interrupt.etl” may contain personally identifiable information, including but not necessarily limited to paths to files accessed, paths to registry accessed and process names. Exact information depends on the events that were logged. Please be aware of this when sharing out this trace with other people.
4. Go To C:\Windows\System32 using the Windows Explorer (Windows key + E)
5. Double-click on CPUInterrupt.etl to open the Windows Performance Analyzer
6. After a short time, click on Trace, Configure Symbol Paths
7. For the _NT_SYMBOL_PATH enter srv*C:\symbols*http://msdl.microsoft.com/download/symbols
8. Now scroll down to Interrupt CPU Usage, right-click onto the graph and select Load Symbols
9. Next, right-click again and select the bottom entry Summary Table:
10. It is possible you have to repeat step 9 if it closes automatically, but in the end you should get this:
Obviously, you will have different entries. For me the file hal.dll is causing the most system interrupts:
Next, we have to find out what exactly hal.dll is. In your case, the USBPort.SYS or the NDIS.sys or dxgkml.sys might have the highest count. If that is the case you have to research other files.
Next, we recommend that you disable the components that are related to your problem. Let’s say USBPort.SYS is causing the problems for you, then unplug USB devices one by one and check. Also disable USB hubs in your device manager
- Disable network
- Unplug USB devices
- Disable USB hubs in device manager
- Re-install motherboard drivers
- Upgrade BIOS
- Update graphic card drivers, update CCC.exe (Catalyst Control Center!)
- Change keyboard/mouse