Bill Holler wrote: 
>
>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).

Yeah, keyboard/mouse usually work as the UHCI devices, also impact
idle power.

>
>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.

USB team is working on this issue, they probably have a solution soon.

Thanks,
-Aubrey

>
>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