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