Re: regarding r242905 ('us' argument to some callout functions) was Re: [RFC/RFT] calloutng

From: Davide Italiano <davide_at_freebsd.org>
Date: Mon, 17 Dec 2012 12:17:54 -0800
On Mon, Dec 17, 2012 at 11:27 AM, Luigi Rizzo <rizzo_at_iet.unipi.it> wrote:
> [addressing the various items separately]
>
> On Fri, Dec 14, 2012 at 01:57:36PM +0100, Davide Italiano wrote:
>> On Fri, Dec 14, 2012 at 7:41 AM, Luigi Rizzo <rizzo_at_iet.unipi.it> wrote:
> ...
>> > - for several functions the only change is the name of an argument
>> >   from "busy" to "us". Can you elaborate the reason for the change,
>> >   and whether "us" means microseconds or the pronoun ?)
>> >
>>
>> Please see r242905 by mav_at_.
>
> i see the goal of this patch is to pass along the amount of
> time till the next timer.
>
> I wonder why the choice is to use (actually, call) the value
> "microseconds" rather use a bintime or something scaled and with a
> well defined resolution.
>
> In fact looking at the relevant diff
>
> http://svnweb.freebsd.org/base/projects/calloutng/sys/kern/kern_clocksource.c?r1=242905&r2=242904&pathrev=242905
>
> cpu_idleclock() actually returns a value that is not even microseconds
> but 1/(2^20) seconds. The value seems to be ignored right now
> so it would be a good time to discuss the resolution.
>
> I am concerned that at some point (5 years from now perhaps ?)
> microseconds might start to become too coarse and we would like
> something with a more fine-grained resolution. On the
> other hand, for the purposes of this change, we can probably
> live with an upper limit of some seconds (waking up the machine
> once per second is not going to kill performance).
>

I would talk more about power consumption problem rather than performances.
Yes, you're right because now, even with calloutng changes, the CPU is
woken up at least twice per second.
The wheel scan, in case it doesn't find a new callout to schedule in
the next half-second, schedules an interrupt half a second from "now"
(where now is the time obtained using getbinuptime()/binuptime()).
This is a threshold we set up empirically, and it resulted is "good"
for now. But in the future someone may raise the threshold to 1
second, 10 seconds, or something like. So, I don't agree with your
statement.

> So i would suggest to make the argument to these functions
> uint_32 or uint_64 (preferably the same for 32- and 64-bit machines),
> rename it to something different from 'us'
> and have at least 28-30 fractional bits to represent a bintime.
>
> Right now you are using a bintime with 20 fractional and 11 or 43
> bits for the integer part.
>
>
> cheers
> luigi

Thanks

Davide
Received on Mon Dec 17 2012 - 19:17:56 UTC

This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:40:33 UTC