Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 27 Oct 2010 11:14:18 +0300
From:      Alexander Motin <mav@FreeBSD.org>
To:        Nate Lawson <nate@root.org>
Cc:        acpi@freebsd.org, current@freebsd.org
Subject:   Re: Event based scheduling and USB.
Message-ID:  <4CC7DF5A.6070904@FreeBSD.org>
In-Reply-To: <4CC759D5.2020207@root.org>
References:  <201010261904.o9QJ4iwq089834@sana.init-main.com> <4CC732C7.50409@FreeBSD.org> <4CC759D5.2020207@root.org>

next in thread | previous in thread | raw e-mail | index | archive | help
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



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?4CC7DF5A.6070904>