[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Xen-devel] [PATCH v3 for Xen 4.6 1/4] xen: enable per-VCPU parameter settings for RTDS scheduler



2015-07-08 1:33 GMT-07:00 Dario Faggioli <dario.faggioli@xxxxxxxxxx>:
> On Tue, 2015-07-07 at 23:06 -0700, Meng Xu wrote:
>> 2015-07-07 7:39 GMT-07:00 Dario Faggioli <dario.faggioli@xxxxxxxxxx>:
>> > On Tue, 2015-07-07 at 09:59 +0100, Jan Beulich wrote:
>> >> >>> On 29.06.15 at 04:44, <lichong659@xxxxxxxxx> wrote:
>> >> > --- a/xen/common/Makefile
>> >> > +++ b/xen/common/Makefile
>> >> > @@ -31,7 +31,6 @@ obj-y += rbtree.o
>> >> >  obj-y += rcupdate.o
>> >> >  obj-y += sched_credit.o
>> >> >  obj-y += sched_credit2.o
>> >> > -obj-y += sched_sedf.o
>> >> >  obj-y += sched_arinc653.o
>> >> >  obj-y += sched_rt.o
>> >> >  obj-y += schedule.o
>> >>
>> >> Stray change. Or perhaps the file doesn't build anymore, in which case
>> >> you should instead have stated that the patch is dependent upon the
>> >> series removing SEDF.
>> >>
>> > This indeed does not belong in here. And of course, things should
>> > build... So, Chong, either deal with SEDF as well, if basing your
>> > patches on a tree where it is still there, or base on top of my patches,
>> > ignore it, but state the dependency, as Jan is asking.
>> >
>> >> > @@ -1157,8 +1158,75 @@ rt_dom_cntl(
>> >
>> >> > +    case XEN_DOMCTL_SCHEDOP_putvcpuinfo:
>> >> > +        spin_lock_irqsave(&prv->lock, flags);
>> >> > +        for( index = 0; index < op->u.v.nr_vcpus; index++ )
>> >> > +        {
>> >> > +            if ( copy_from_guest_offset(&local_sched,
>> >> > +                    op->u.v.vcpus, index, 1) )
>> >> > +            {
>> >> > +                rc = -EFAULT;
>> >> > +                break;
>> >> > +            }
>> >> > +            if ( local_sched.vcpuid >= d->max_vcpus
>> >> > +                    || d->vcpu[local_sched.vcpuid] == NULL )
>> >> > +            {
>> >> > +                rc = -EINVAL;
>> >> > +                break;
>> >> > +            }
>> >> > +            svc = rt_vcpu(d->vcpu[local_sched.vcpuid]);
>> >> > +            svc->period = MICROSECS(local_sched.s.rtds.period);
>> >> > +            svc->budget = MICROSECS(local_sched.s.rtds.budget);
>> >>
>> >> Are all input values valid here?
>> >>
>> > That's a good point, actually. Right now, SEDF does some range
>> > enforcement, by means of these values:
>> >
>> > #define PERIOD_MAX MILLISECS(10000) /* 10s  */
>> > #define PERIOD_MIN (MICROSECS(10))  /* 10us */
>> > #define SLICE_MIN (MICROSECS(5))    /*  5us */
>> >
>> > Chong, it probably makes sense to (in a separate patch), introduce
>> > something like this in RTDS too (with SLICE_MIN-->BUDGET_MIN), and then
>> > use them, in this patch, for sanity checking the input.
>> >
>> > It also makes sense to check and enforce budget<=period, IMO.
>> >
>> > About the specific values, I'm open to proposals. I think something like
>> > the SEDF's one is fine. Meng?
>>
>> We are trying to make some range enforcement for RTDS scheduler. Is my
>> understanding correct? (It should be, but just in case. :-) )
>>
> We are wondering whether that could be necessary/useful, and IMO, it
> would.
>
>> As to the range of period, I think the max value can be as large as
>> the type of period (ie. s_time_t) can represent. When we want a
>> dedicated CPU for a guest, we will set budget=period and  can set the
>> period to a very very large value to avoid the unnecessarily
>> invocation of the scheduler.
>>
> Makes sense. We do have STIME_MAX and, given that period is something
> that is added to current time during scheduling, STIME_DELTA_MAX.
>
> Maybe, put something together basing on those?
>
>> As to the min value of period, I think it should be >=100us. The
>> scheduler overhead of running a large box could be 1us if the runq is
>> long and competetion of the runq lock is heavy. If the scheduler is
>> potentially invoked every 10us, the scheduler overhead will be 10% of
>> total computation time, which seems a lot to me.
>>
> Ok.
>
>> As to the range of budget, the min value can be 5us, the same with
>> SEDF;
>>
> Well, wouldn't the above reasoning about overhead apply here too?
> Budgets of 5us mean the scheduler can be invoked every 5us for budget
> enforcement. If 10us was unreasonable, 5 is even more so.
>
> Therefore, 100us here too? Or maybe let's allow for lower values (like
> 50us or 10us), but print a warning?

Right. we can use 100us as a threadhold for budget too. Maybe printing
warning is a better idea?
If users know what they are doing and expecting, it is ok. But too
small value (<1us) will potentially cause system freeze.


>
>> the max value is the value of period of the same VCPU.
>>
> Yep.
>
> And, whatever the values, it would be useful to have comments somewhere
> (either when the values are defined or enforced), stating what you said
> above.

right.

Thanks,

Meng
-- 


-----------
Meng Xu
PhD Student in Computer and Information Science
University of Pennsylvania
http://www.cis.upenn.edu/~mengxu/

_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.