Event based scheduling and USB.
Alexander Motin
mav at FreeBSD.org
Wed Oct 27 08:14:27 UTC 2010
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: psm0 3 0
>>> irq19: ehci1 37 0
>>> irq20: hpet0 uhci0 35970 230
>>> irq22: ehci0 2 0
>>> irq256: em0 4 0
>>> irq257: ahci0 1692 10
>>> Total 38514 246
>>> ===
>> 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
More information about the freebsd-current
mailing list