... until the collector arrives ...

This "blog" is really just a scratchpad of mine. There is not much of general interest here. Most of the content is scribbled down "live" as I discover things I want to remember. I rarely go back to correct mistakes in older entries. You have been warned :)

2008-08-09

Excessive Hardware Interrupts

Windows recently told me it had found a bad block on my disk drive. I ran a disk check and told it to fix bad blocks. Presumably, the bad block had been spared out. However, my computer's performance was awful. I tried the usual dance -- clean up, defrag, ensure the page file was contiguous in a good spot -- but performance was still awful.

CPU usage was running at a background level of 10-20%. Process Explorer attributed this CPU to "Hardware Interrupts". A bit of Googling led me to this blog entry:

Little-Known Tweak to Boost Hard Drive Performance!

In short, after Windows has noted six I/O errors on a controller, it pins that controller to programmed I/O mode (PIO).  You can check this by looking at the properties of the disk controller in the Device Manager.  The only way to re-enable DMA mode is to perform some registry hacks under the key:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\{4D36E96A-E325-11CE-BFC1-08002BE10318}

Find the sub-key associated with the controller in question (e.g. the primary IDE channel). Then:

  • delete MasterIdDataCheckSum (if present)
  • delete SlavedIdDataCheckSum (if present)
  • add ResetErrorCountersOnSuccess (DWORD) = 1 (if desired)
  • set any or all of the following capability masks to 0xFFFFFFFF (if present):
    • MasterDeviceTimingMode
    • MasterDeviceTimingModeAllowed
    • SlaveDeviceTimingMode
    • SlaveDeviceTimingModeAllowed
    • UserMasterDeviceTimingModeAllowed
    • UserSlaveDeviceTimingModeAllowed
  • reboot

After rebooting, check to see whether the relevant controller has reverted to DMA mode. If so, your problem is probably solved (unless the hardware is truly gacked).

Blog Archive