Starting at the Beginning

It wasn't too long ago that power consumption was hardly discussed, but these days, you can't have a technical discussion about microprocessors without mentioning it as a design consideration.  Mobile CPUs in particular have had to be power-conscious for a pretty long time, thanks to a desire for longer battery life and smaller form factors.  But with power consumption, noise and heat dissipation all becoming major issues on the desktop, we are seeing many mobile technologies make their way into desktop CPUs. 

The primary goal of a mobile CPU is no different than a desktop CPU, and that is to get its work done as quickly as possible.  However, a very important secondary goal of the mobile CPU is to strive to be at the lowest power state possible while getting that work done.  The Dothan core used in the 90nm Pentium M processor had a choice of five operating states:
C0 - full power
C1 - auto halt
C2 - stop clock
C3 - sleep
C4 - deep sleep
As you can guess, the higher the C number, the lower the power consumption.  Switching between these states is completely seamless to the end user because the switching occurs in a number of CPU clocks (nanoseconds).  With each processor generation, the CPU designers attempt, as best as possible, to get the CPU to stay in the lowest C-state more than it could previously.  That means making the processor faster so that it can complete its tasks quicker, and thus get to those lower C states faster than before. 

With Core Duo, Intel introduced a sixth operating state: deep C4, or a deeper sleep state.  Intel made some serious improvements to the core to allow it to not only get to lower C-states more often, but to reduce power even more at these lower C-states.  We talked about this briefly in our series of articles on the Core Duo processor, documenting how Intel not only brought forth a dual core mobile processor, but also optimized the performance and power consumption of each individual core. 

If you ran any mobile CPU in its full power (C0) state constantly, never allowing it to transition to lower states, you would wreak havoc on your notebook's battery life.  While not quite this extreme, the USB 2.0 battery life issue involves a similar concept. 

Microsoft describes the USB 2.0 issue as follows:
"Windows XP SP2 installs a USB 2.0 driver that initializes any connected USB device. However, the USB 2.0 driver leaves the asynchronous scheduler component continuously running. This problem causes continuous instances of memory access that prevent the computer from entering the deeper Advanced Configuration and Power Interface (ACPI) processor idle sleep states. These processor idle sleep states are also known as C states. For example, these include the C3 and C4 states. These sleep states are designed, in part, to save battery power. If an otherwise idle portable computer cannot enter or maintain the processor idle sleep states, the computer uses its battery power more quickly than you expect."
Basically, if you have a USB 2.0 device plugged in to a computer running Windows XP SP2, your processor will not be able to enter lower power states (e.g. C3, C4 or Deep C4 in the case of Core Duo).  The problem is that if a very power-efficient CPU is prevented from going into its C3 or C4 states, then it's consuming a lot more power than it needs to be.  It's particularly bad because the problem could exist just by having any USB 2.0 device plugged in, even if you're not using the device.

Keep in mind that Microsoft's description of the issue does not place the blame on Intel's Core Duo processor, and instead, implies that it would exist on all platforms regardless of CPU.  Later on in this article, we'll attempt to find out whether this is indeed a universal problem or something that only really impacts Core Duo. 

It is also important to note that the problem appears limited to USB 2.0 devices under Windows XP SP2 and not USB 1.x devices or USB 2.0 devices under other operating systems.  There are some USB 2.0 devices that can avoid the problem; in order for a device to be immune to this problem, it must support a power management mode called Selective Suspend, which allows the OS to put the device to sleep until it's needed.  The vast majority of devices don't seem to support Selective Suspend, and although some USB hubs apparently do, we weren't able to get our hands on any in time for this article. 

Index The Fix
Comments Locked

61 Comments

View All Comments

  • Eris23007 - Monday, February 13, 2006 - link

    P.S. That's why you read more than just the intro and conclusion pages before asking questions.

    "RTFM"
  • DigitalFreak - Monday, February 13, 2006 - link

    Ha!
  • Eris23007 - Monday, February 13, 2006 - link

    The USB hard drive they tested with had its own power supply. The "USB Drive" was a flash device (USB bus powered), while the "External HDD" was:

    quote:

    Vantec NexStar 2 External 3.5" Hard Drive Enclosure (USB 2.0)

    Note that this device is entirely externally powered



  • UNCjigga - Monday, February 13, 2006 - link

    I will have to do some testing on my notebook with the 'workaround' fix installed. I could have sworn that around the time I installed SP2 on my lappy the battery life suffered, but this was about 6-12 months after I got it so I just figured the battery was getting old.
  • Ionizer86 - Monday, February 13, 2006 - link

    Wow, this is getting interesting. I'm surprised that this bug affects 915 based systems too. I wonder if this could be a broader issue that may affect intel 855 systems or AMD-based computers with chipsets from other vendors. I suppose I could do some playing around
  • Ionizer86 - Monday, February 13, 2006 - link

    No edit button... (accidental post before completion).
    I could test this out on my 855 based laptop if only I had Perfmon and the special plugin :)
  • Ionizer86 - Tuesday, February 14, 2006 - link

    Specs: Thinkpad R50e, Pentium M 1.5 on i855GME.

    I booted into Windows normal mode as cleanly as possible and ran Perfmon. The CPU was usually in C2 ~60% of the time and C3 ~35% of the time, for a total of ~95% in C2 or C3. Upon plugging in any of my USB stuff (an external hard disk, a Sandisk Cruzer mini, or even my IBM mouse), I'd get 95% in C2 and 0% in C3. Maybe my mouse is a USB 2.0 mouse; not sure.

    Battery draw goes from about 11.7W to 12.5W when I plug in my mouse.

    By adding the registry key, I no longer have the issue with the Cruzer or my external hard disk, but the problem with the mouse remains.

    Looks like MSFT has quite a problem at hand.
  • Accord99 - Tuesday, February 14, 2006 - link

    0.8W, maybe its the power draw of the mouse itself?
  • johnsonx - Monday, February 13, 2006 - link

    Adding to what Jason said, you only need the 'secret' plugin for Core Duo processors. The C3 state counter that Perfmon already has works fine on older platforms.
  • IntelUser2000 - Tuesday, February 14, 2006 - link

    quote:

    Adding to what Jason said, you only need the 'secret' plugin for Core Duo processors. The C3 state counter that Perfmon already has works fine on older platforms.


    Not just Core Duo, but: "As you can probably guess, Perfmon is inaccurate in this case. While Perfmon does a fine job of monitoring C3 states for older processors, it fails to handle properly the CPUs we're most interested in: the Pentium M and Core Duo."

Log in

Don't have an account? Sign up now