Tracking too many interrupts with my tablet PC
I have been very happy with my tablet once I scanned my fingerprint to "calm down" the fingerprint reader software. I happened to notice the fan on the tablet was still running more often than what I expected after making that change. I figured I had something still causing the CPU to be used too much (thereby generating the heat which was causing the fan to run) and started troubleshooting again.
My first stop was Process Explorer. It gave me a big clue: something was using about 7% of the CPU time making "DPCs." A quick check on MSDN told me DPCs were Deferred Procedure Calls (aka "interrupts") and, essentially, they could cause a CPU to be used excessively. This seemed to jibe with what I was thinking, so I fired up Windbg to attach to the System process to see what was slamming the CPU with DPCs. It failed, of course, since the System process is protected and I can't attach to it.
Looking around, I found this article about using xperf to track DPCs. Talk about timing - it had only been written a few days before I needed that information. I read through the article and since I already had Windows symbols installed, I was set to go. I don't have a lot to add to that article since I was able to follow it pretty much step by step. I was able to drill down pretty quickly to see 2 possible drivers eating the CPU.
The top line here shows ndis.sys consuming 7.3% of the CPU over the time span I chose (a few seconds). The article stated that I could expand the view to show the calls being made, but for some reason, symbols were not resolving for me, and I just got blank lines for each call. Still, this gave me a good starting point, and I would also keep an eye on the USBPORT.SYS driver.
NDIS is used by networking, so I went to the control panel \ system \ device manager to see what was installed as far as network drivers go. I hazily remember something about a default NDIS driver in Windows 95 from my tech support days which was used if not 32 bit drivers were available, and I hoped to be able to use the device manager to get a version number of what my tablet was using.
Now, if I had one complaint about the tablet, it is the sheer number of drivers installed. I'm not joking when I say there are over 100 drivers total, and there were 4 network drivers. 2 were for 802.11 a/b/g (wireless and LAN), one was for Bluetooth, and there was an Nvidia nForce driver. Since I had to guess which was the culprit, I went for the Nvidia first, for no particular reason. I disabled the driver and waited a few seconds. The CPU fell to 0%, and the number of DPCs dropped to near zero. After a few seconds, the fan went quiet. I think I found the culprit.
I tried googling up Nvidia Nforce problems to see if there were other people reporting similar performance hits. I neglected to think about my wireless network not working since I had disabled this driver, but lo and behold, it still worked. I rebooted, verified the driver was not loaded, and still had network connectivity. I looked around and found a few scattered reports of problems with NVidia network drivers, but nothing definitive.
I'm tempted to leave it alone at this point, and keep my eye on Nvidia to see if they update their drivers. But I haven't fixed the problem - I've only eliminated a symptom, and I haven’t had time to find what functionality I may have lost. For instance, I did not have time to verify Bluetooth still working, so it may be completely broken at this point. I also have a wireless printer connected to which I need to print. And I still do not know why the USB driver is using more than 1% of the CPU, or why the storport.sys calls are taking so much time relative to all other calls.
Questions, comments, concerns and criticisms always welcome,
John
Comments
Anonymous
April 21, 2008
PingBack from http://microsoftnews.askpcdoc.com/?p=3469Anonymous
April 21, 2008
The comment has been removedAnonymous
May 02, 2008
Excellent. I have a motion tablet and using the process explorer by sysinternal (now MS), I too noticed DPC eating up as much as 70% of my cpu! Ouch. I searched on how to track down what was causing this but I had no luck -- until your article! Thanks so much!