Re: Event based scheduling and USB.

2010-10-29 Thread Alexander Motin
Alexander Motin wrote:
 Takanori Watanabe wrote:
 I updated my FreeBSD tree on laptop, to the current
 as of 18 Oct.2010, it works fine with CPU C3 state enabled,

 I think this is your achievement of event time scheduler,
 thanks!

 But when USB driver is enabled, the load average is considerablly 
 high (0.6 to 1.0) if sysctl oid kern.eventtimer.periodic is set to 0.
  Then kern.eventtimer.periodic is set to 1, the load average goes
 to 0 quickly as before, but almost never transit to C3.

 Is this behavior expected, or something wrong?
 I noticed one of usb host controller device shares HPET irq.
 When I implement interrupt filter in uhci driver, the load average
 goes to 0 as before.

 
 % vmstat -i
 interrupt  total   rate
 irq1: atkbd0 398  2
 irq9: acpi0  408  2
 irq12: psm03  0
 irq19: ehci1  37  0
 irq20: hpet0 uhci0 35970230
 irq22: ehci0   2  0
 irq256: em04  0
 irq257: ahci0   1692 10
 Total  38514246
 ===
 
 I haven't noticed that issue and it is surely not expected for me. I
 will try to reproduce it.

I've easily reproduced the problem. Scheduler tracing shows that problem
is the result of aliasing between swi4: clock thread on one CPU
(measuring load average) and irq21: hpet0 uhci1 thread on another.
Those two events are aliased by definition due to shared interrupt
source. Not sure what to do with it. Either we should change algorithm
of load average calculation or exclude timer's interrupt threads from
load average accounting. Adding interrupt filter for USB also reasonably
helps, but it is only a partial solution for this specific sharing case.

-- 
Alexander Motin
___
freebsd-current@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-current
To unsubscribe, send any mail to freebsd-current-unsubscr...@freebsd.org


Re: Event based scheduling and USB.

2010-10-27 Thread Hans Petter Selasky
By default USB devices are not suspended. You can use usbconfig power_save 
to enable automatic power save for all devices.

--HPS
___
freebsd-current@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-current
To unsubscribe, send any mail to freebsd-current-unsubscr...@freebsd.org


Re: Event based scheduling and USB.

2010-10-27 Thread Alexander Motin
Nate Lawson wrote:
 On 10/26/2010 12:57 PM, Alexander Motin wrote:
 Takanori Watanabe wrote:
 I updated my FreeBSD tree on laptop, to the current
 as of 18 Oct.2010, it works fine with CPU C3 state enabled,

 I think this is your achievement of event time scheduler,
 thanks!
 
 Ah, so mav@ implemented a tickless-scheduler? That is nice.

Not exactly. I've only made system to delay empty ticks when idle and
execute them later on wakeup in a batch. Scheduler work is still wanted.

 But when USB driver is enabled, the load average is considerablly 
 high (0.6 to 1.0) if sysctl oid kern.eventtimer.periodic is set to 0.
  Then kern.eventtimer.periodic is set to 1, the load average goes
 to 0 quickly as before, but almost never transit to C3.

 Is this behavior expected, or something wrong?
 
 The USB controller often keeps the bus mastering bit set. This keeps the
 system out of C3. The way to fix this is to implement global suspend.
 Put a device in suspend mode and then turn off power to the USB port it
 is on. Then the USB controller will stop polling the bus.

As I understand, if respective USB port is not used, USB stack should
put it into power_save mode not poll so often to deny entering C3 state.

 I noticed one of usb host controller device shares HPET irq.
 When I implement interrupt filter in uhci driver, the load average
 goes to 0 as before.


 
 % vmstat -i
 interrupt  total   rate
 irq1: atkbd0 398  2
 irq9: acpi0  408  2
 irq12: psm03  0
 irq19: ehci1  37  0
 irq20: hpet0 uhci0 35970230
 irq22: ehci0   2  0
 irq256: em04  0
 irq257: ahci0   1692 10
 Total  38514246
 ===
 I haven't noticed that issue and it is surely not expected for me. I
 will try to reproduce it.

 Most likely you should be able to avoid interrupt sharing using some
 additional HPET options, described at hpet(4).
 
 This seems silly. The whole point of APIC is to avoid clustering on a
 single interrupt but the BIOS put the timer on the USB controller irq?

HPET timer is not a regular ISA or PCI device. It allows several
different interrupt configurations. In most cases I remember, BIOS
setups interrupts 0 and 8, like for legacy_route mode. But this mode is
not really suitable as default in our case ATM due to conflict with
atrtc and attimer drivers.

-- 
Alexander Motin
___
freebsd-current@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-current
To unsubscribe, send any mail to freebsd-current-unsubscr...@freebsd.org


Re: Event based scheduling and USB.

2010-10-27 Thread Alexander Leidinger
Quoting Alexander Motin m...@freebsd.org (from Tue, 26 Oct 2010  
22:57:59 +0300):



Takanori Watanabe wrote:



It's time to implement powertop for freebsd, isn't it?


Surely it is. I was even thinking about possibility to port one from
OpenSolaris, but other work distracted me. You may take it, it you wish.


For the benefit of the people which didn't see my message with the URL  
(I don't know if I was sending the URL to mav@ personally or if it  
appeared also in the lists):


http://hub.opensolaris.org/bin/view/Project+tesla/Powertop
is a DTrace-ified version of PowerTop (at the end of the page is a  
description how to get the source).


And for those which like plots of the values:
http://hub.opensolaris.org/bin/view/Project+tesla/ptop-gtk

Bye,
Alexander.

--
A RACF protected dataset is inaccessible.

http://www.Leidinger.netAlexander @ Leidinger.net: PGP ID = B0063FE7
http://www.FreeBSD.org   netchild @ FreeBSD.org  : PGP ID = 72077137
___
freebsd-current@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-current
To unsubscribe, send any mail to freebsd-current-unsubscr...@freebsd.org


Re: Event based scheduling and USB.

2010-10-27 Thread Hans Petter Selasky
On Wednesday 27 October 2010 10:14:18 Alexander Motin wrote:
 As I understand, if respective USB port is not used, USB stack should
 put it into power_save mode not poll so often to deny entering C3 state.

USB will stop the hardware from polling RAM, but still a 4 second root HUB 
software timer/watchdog will be running.

--HPS
___
freebsd-current@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-current
To unsubscribe, send any mail to freebsd-current-unsubscr...@freebsd.org


Event based scheduling and USB.

2010-10-26 Thread Takanori Watanabe
I updated my FreeBSD tree on laptop, to the current
as of 18 Oct.2010, it works fine with CPU C3 state enabled,

I think this is your achievement of event time scheduler,
thanks!

But when USB driver is enabled, the load average is considerablly 
high (0.6 to 1.0) if sysctl oid kern.eventtimer.periodic is set to 0.
 Then kern.eventtimer.periodic is set to 1, the load average goes
to 0 quickly as before, but almost never transit to C3.

Is this behavior expected, or something wrong?
I noticed one of usb host controller device shares HPET irq.
When I implement interrupt filter in uhci driver, the load average
goes to 0 as before.



% vmstat -i
interrupt  total   rate
irq1: atkbd0 398  2
irq9: acpi0  408  2
irq12: psm03  0
irq19: ehci1  37  0
irq20: hpet0 uhci0 35970230
irq22: ehci0   2  0
irq256: em04  0
irq257: ahci0   1692 10
Total  38514246
===


BTW, when USB port is enabled C3 transition rate gets lower.
I think it is likely to occur. But how can I supress power 
consumption? 

It's time to implement powertop for freebsd, isn't it?
___
freebsd-current@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-current
To unsubscribe, send any mail to freebsd-current-unsubscr...@freebsd.org


Re: Event based scheduling and USB.

2010-10-26 Thread Alexander Motin
Takanori Watanabe wrote:
 I updated my FreeBSD tree on laptop, to the current
 as of 18 Oct.2010, it works fine with CPU C3 state enabled,
 
 I think this is your achievement of event time scheduler,
 thanks!
 
 But when USB driver is enabled, the load average is considerablly 
 high (0.6 to 1.0) if sysctl oid kern.eventtimer.periodic is set to 0.
  Then kern.eventtimer.periodic is set to 1, the load average goes
 to 0 quickly as before, but almost never transit to C3.
 
 Is this behavior expected, or something wrong?
 I noticed one of usb host controller device shares HPET irq.
 When I implement interrupt filter in uhci driver, the load average
 goes to 0 as before.
 
 
 
 % vmstat -i
 interrupt  total   rate
 irq1: atkbd0 398  2
 irq9: acpi0  408  2
 irq12: psm03  0
 irq19: ehci1  37  0
 irq20: hpet0 uhci0 35970230
 irq22: ehci0   2  0
 irq256: em04  0
 irq257: ahci0   1692 10
 Total  38514246
 ===

I haven't noticed that issue and it is surely not expected for me. I
will try to reproduce it.

Most likely you should be able to avoid interrupt sharing using some
additional HPET options, described at hpet(4).

 BTW, when USB port is enabled C3 transition rate gets lower.
 I think it is likely to occur. But how can I supress power 
 consumption? 

I can't say about USB, but you may try this patch to optimize some other
subsystems: http://people.freebsd.org/~mav/tm6292_idle.patch

 It's time to implement powertop for freebsd, isn't it?

Surely it is. I was even thinking about possibility to port one from
OpenSolaris, but other work distracted me. You may take it, it you wish.

-- 
Alexander Motin
___
freebsd-current@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-current
To unsubscribe, send any mail to freebsd-current-unsubscr...@freebsd.org


Re: Event based scheduling and USB.

2010-10-26 Thread Nate Lawson
On 10/26/2010 12:57 PM, Alexander Motin wrote:
 Takanori Watanabe wrote:
 I updated my FreeBSD tree on laptop, to the current
 as of 18 Oct.2010, it works fine with CPU C3 state enabled,

 I think this is your achievement of event time scheduler,
 thanks!

Ah, so mav@ implemented a tickless-scheduler? That is nice.

 But when USB driver is enabled, the load average is considerablly 
 high (0.6 to 1.0) if sysctl oid kern.eventtimer.periodic is set to 0.
  Then kern.eventtimer.periodic is set to 1, the load average goes
 to 0 quickly as before, but almost never transit to C3.

 Is this behavior expected, or something wrong?

The USB controller often keeps the bus mastering bit set. This keeps the
system out of C3. The way to fix this is to implement global suspend.
Put a device in suspend mode and then turn off power to the USB port it
is on. Then the USB controller will stop polling the bus.

 I noticed one of usb host controller device shares HPET irq.
 When I implement interrupt filter in uhci driver, the load average
 goes to 0 as before.


 
 % vmstat -i
 interrupt  total   rate
 irq1: atkbd0 398  2
 irq9: acpi0  408  2
 irq12: psm03  0
 irq19: ehci1  37  0
 irq20: hpet0 uhci0 35970230
 irq22: ehci0   2  0
 irq256: em04  0
 irq257: ahci0   1692 10
 Total  38514246
 ===
 
 I haven't noticed that issue and it is surely not expected for me. I
 will try to reproduce it.
 
 Most likely you should be able to avoid interrupt sharing using some
 additional HPET options, described at hpet(4).

This seems silly. The whole point of APIC is to avoid clustering on a
single interrupt but the BIOS put the timer on the USB controller irq?

 It's time to implement powertop for freebsd, isn't it?
 
 Surely it is. I was even thinking about possibility to port one from
 OpenSolaris, but other work distracted me. You may take it, it you wish.

It seems worth doing the internals new, but maybe outputting information
in a compatible format for reporting tools.

-- 
Nate

___
freebsd-current@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-current
To unsubscribe, send any mail to freebsd-current-unsubscr...@freebsd.org