[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v2 1/4] xen: add real time scheduler rt
On Tue, Sep 9, 2014 at 10:42 AM, Dario Faggioli <dario.faggioli@xxxxxxxxxx> wrote: > On Mon, 2014-09-08 at 19:44 +0100, George Dunlap wrote: >> On 09/07/2014 08:40 PM, Meng Xu wrote: > >> > +/* >> > + * update deadline and budget when deadline is in the past, >> > + * it need to be updated to the deadline of the current period >> > + */ >> > +static void >> > +rt_update_helper(s_time_t now, struct rt_vcpu *svc) >> > +{ >> > + s_time_t diff = now - svc->cur_deadline; >> > + >> > + if ( diff >= 0 ) >> > + { >> > + /* now can be later for several periods */ >> > + long count = ( diff/svc->period ) + 1; >> > + svc->cur_deadline += count * svc->period; >> > + svc->cur_budget = svc->budget; >> >> In the common case, don't we expect diff/svc->period to be a small >> number, like 0 or 1? >> > In general, yes. The only exception is when cur_deadline is set for the > first time. In that case, now can be arbitrary large and cur_deadline > will always be 0, so quite a few iterations may be required, possibly > taking longer than the div and the mult. Right, well we should be able to special-case zero. Is there any reason, if cur_deadline == 0, not to just set cur_deadline=now + svc->period? I can see a reason why after skipping several periods you'd want the future periods "lined up with" previous periods. But is there a need to have all the periods lined up from the beginning of time? >> And similarly for the other 64-bit division Dario was asking about below? >> > Hehe, this is, I think, the third or fourth time I say I'd like this to > be turned into a while! :-D Well, if you've asked for it several times, we should probably make it a precondition of going in then. > If it were me doing this, I'd go for something like this: > > static void > rt_update_helper(s_time_t now, struct rt_vcpu *svc) > { > if ( svc->cur_deadline > now ) > return; > > do > svc->cur_deadline += svc->period; > while ( svc->cur_deadline <= now ); > svc->cur_budget = svc->budget; > > [tracing] > } Yes, that looks even cleaner. :-) >> > +{ >> > + struct rt_private *prv = RT_PRIV(ops); >> > + struct list_head *runq = RUNQ(ops); >> > Oh, BTW, George, what do you think about these? The case, I mean. Since > now they're static inlines, I've been telling Meng to turn the function > names lower case. > > This is, of course, a minor thing, but since we're saying the are not > major issues... :-) Yes, static inlines need to be lower case. -George _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |