Hi Aubrey,

This is very interesting news.  It is even more important on
server systems which generally never have any USB devices
attached (except perhaps a console keyboard/mouse).

Would it be possible to update the Solaris USB drivers to save
this power instead of disabling USB completely?  Windows
USB drivers must have fixed this issue in software to be able
to save this power.

Thank you,
Bill


On 04/27/10 20:07, Li, Aubrey wrote:
Solaris was known to have a gap of power between other OSes, so we recently
did some comparison between Solaris and other OSes on Intel NHM platform. We
found in idle, the gap can be filled by killing USB. We saw up to ~40w power
saving in idle at the worst case, and so, after fix that, we have the same power meter readout in idle as windows.

Thanks USB team to offer an workaround quickly. I shared it below.
Usually, there are EHCI and UHCI host controllers on the platform.

[EHCI]

1. EHCI configurations
  EHCI has *asynchronous schedule* and "periodic schedule" configuration. These
  two lists processing will cause DMA operations and hurt idle power. Usually,
  if there is no pipe opened(aka, usb devices attached), EHCI driver will never
  enable those two processing, like the following:
        #prtconf -D
        ----snip----
        pci8086,34de, instance #0 (driver name: ehci)
        ----snip----

  But there could be an on-board device attached, like this:
        #prtconf -D
        ----snip----
        pci8086,34de, instance #1 (driver name: ehci)
            storage, instance #0 (driver name: scsa2usb)
                disk, instance #1 (driver name: sd)
        ----snip----

2. The way to check the configurations:
        #scanpci -v
        ----snip----
        pci bus 0x0000 cardnum 0x1d function 0x07: vendor 0x8086 device 0x3a3a
        Intel Corporation 82801JI (ICH10 Family) USB2 EHCI Controller #1
        CardVendor 0x15d9 card 0x10a7 (Super Micro Computer Inc, Card unknown)
        STATUS    0x0290  COMMAND 0x0146
        CLASS     0x0c 0x03 0x20  REVISION 0x00
        BIST      0x00  HEADER 0x00  LATENCY 0x00  CACHE 0x00
        BASE0     0xfbf22000 SIZE 1024  MEM
        BASEROM   0x00000000  addr 0x00000000
        MAX_LAT   0x00  MIN_GNT 0x00  INT_PIN 0x01  INT_LINE 0x0a
        ----snip---

# pcitool /p...@0,0 -d bdf=0.1d.07,bar0 -o 0x20 -s 4 -r 0x10031 (EHCI USBCMD - USB command register)

  if bit4, bit5 are set, that means asynchronous schedule and periodic schedule
are enabled to do the DMA operations in idle when there is no actual USB operations, or even if there is no USB device connected at all.

3. Kill EHCI.
  We can either turn asynchronous schedule and periodic schedule off or stop the
  controller. The following command will turn the two bits off.
        # pcitool /p...@0,0 -d bdf=0.1d.07,bar0 -o 0x20 -s 4 -w 0x10001 -r
        0x10001 (EHCI USBCMD - USB command register).

There should be several EHCI controller on the board, after kill all, we saw 
~30W
power saving in idle.


[UHCI]

UHCI is simpler than EHCI, it has no asynchronous schedule and periodic schedule
setting, but it also hurts idle power when enabled. We can't control the UHCI TD
list, but in a similar way as EHCI, we can use pcitool to stop the controller.

1. check UHCI setting.
        #scanpci -v
        ----snip----
        pci bus 0x0000 cardnum 0x1a function 0x00: vendor 0x8086 device 0x3a37
        Intel Corporation 82801JI (ICH10 Family) USB UHCI Controller #4
        CardVendor 0x15d9 card 0x10a7 (Super Micro Computer Inc, Card unknown)
        STATUS    0x0290  COMMAND 0x0005
        CLASS     0x0c 0x03 0x00  REVISION 0x00
        BIST      0x00  HEADER 0x80  LATENCY 0x00  CACHE 0x00
        BASE4     0x0000f0c0 SIZE 32  I/O
        BASEROM   0x00000000  addr 0x00000000
        MAX_LAT   0x00  MIN_GNT 0x00  INT_PIN 0x01  INT_LINE 0x0b
        ----snip----

        #pcitool /p...@0,0 -d bdf=0.1a.0,bar4 -o 0x0 -s 2 -r
        0xc1 (UHCI USBCMD - USB command register)

2. Kill UHCI.
        # pcitool /p...@0,0 -d bdf=0.1a.0,bar4 -o 0x0 -s 2 -w 0xc0 -r
        0xc0 (UHCI USBCMD - USB command register)

After all the UHCI host controllers are stopped, we saw ~10W power saving when 
idle.


If you have a BIOS option to turn off USB at all, that would be great, but make
sure you have a PS/2 port to keep your system controllable.

Thanks,
-Aubrey
_______________________________________________
pm-discuss mailing list
[email protected]
http://mail.opensolaris.org/mailman/listinfo/pm-discuss

_______________________________________________
pm-discuss mailing list
[email protected]
http://mail.opensolaris.org/mailman/listinfo/pm-discuss

Reply via email to