|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] Plans for the SEDF scheduler
On 05/21/2015 01:39 PM, Dario Faggioli wrote:
> Hi everyone,
>
> I've copied the committers, Lars as community manager, Wei as the
> release manager, George as the scheduler maintainer, RT-Xen and
> DornerWorks people, which have some interest in the field, I believe.
> Please, widen the crowd if you think it's necessary/best.
>
> Straight to the point: the SEDF scheduler code is in a rather bad state:
>
> * it is buggy (tests are failing since... well, at least since when I
> joined the community, 3 years ago!). Basically, it was not designed
> with host and guest SMP support in mind, and has never been updated;
>
> * it is not used. Well, that's hard to tell, of course, but I really
> really expect that to be the case.
>
> * it is useless as:
> - it tries to be a general purpose scheduler, but we have Credit
> (and, soon enough, hopefully, Credit2) for that
> - for real-time we have ARINC653 (super-hard real-time), maintained
> and supported, and RTDS (hard/soft real-time), actively
> developed.
>
> For these reasons, I think we should get rid of it. Actually, I've
> discovered that this was the plan in 2006 already: :-)
>
> git show db51cd09d37ea44b126bb259f9392248afd768e6
> ...
> diff --git a/docs/src/interface.tex b/docs/src/interface.tex
> index c9017c7..9a59840 100644
> --- a/docs/src/interface.tex
> +++ b/docs/src/interface.tex
> @@ -209,8 +209,8 @@ implement timeout values when they block.
>
> Xen offers a uniform API for CPU schedulers. It is possible to choose
> from a number of schedulers at boot and it should be easy to add more.
> -The SEDF, BVT, and Credit schedulers are part of the normal Xen
> -distribution. BVT and SEDF will be going away and their use should be
> +The SEDF and Credit schedulers are part of the normal Xen
> +distribution. SEDF will be going away and its use should be
> avoided once the credit scheduler has stabilized and become the default.
> The Credit scheduler provides proportional fair shares of the
> host's CPUs to the running domains. It does this while transparently
>
> I'm up for sending a series to that effect, but I'd be interested in
> your opinion on what's the best way to do so.
>
> Looking at the commit referred above, it seems like a scheduler can just
> disappear which, as far as Xen and libxc are concerned, does seem ok to
> me. Is that so?
>
> I'm less sure of libxl, because of the API stability claims. It looks
> like this is all about (as there are not scheduler specific API
> functions, which is good) this:
>
> # Consistent with values defined in domctl.h
> # Except unknown which we have made up
> libxl_scheduler = Enumeration("scheduler", [
> (0, "unknown"),
> (4, "sedf"),
> (5, "credit"),
> (6, "credit2"),
> (7, "arinc653"),
> (8, "rtds"),
> ])
>
> The solutions I see are:
> 1. get rid of the field. This does not sound ideal from an API
> stability point of view;
> 2. keep the field 'physically', but return warnings and errors when it
> is used. This is a change in behavior, so also not really stable
> (but, hey, the scheduler is going away, the behavior will change,
> one way or another!)
I think this is probably the best option.
> 3. RTDS has a really similar interface and, to a certain extent, a
> similar behavior too. Would it make sense to, upon suitable
> warnings, of course, convert the requests within libxl, i.e.,
> when someone asks for SEDF, we give him RTDS?
>
> Honestly, I'd prefer 2, and I don't much like 3. However, it really
> seems that 3 gives us a way to keep most of our promises about API
> stability... Thoughts?
>
> About domain_sched_params:
>
> libxl_domain_sched_params = Struct("domain_sched_params",[
> ("sched", libxl_scheduler),
> ("weight", integer, {'init_val':
> 'LIBXL_DOMAIN_SCHED_PARAM_WEIGHT_DEFAULT'}),
> ("cap", integer, {'init_val':
> 'LIBXL_DOMAIN_SCHED_PARAM_CAP_DEFAULT'}),
> ("period", integer, {'init_val':
> 'LIBXL_DOMAIN_SCHED_PARAM_PERIOD_DEFAULT'}),
> ("slice", integer, {'init_val':
> 'LIBXL_DOMAIN_SCHED_PARAM_SLICE_DEFAULT'}),
> ("latency", integer, {'init_val':
> 'LIBXL_DOMAIN_SCHED_PARAM_LATENCY_DEFAULT'}),
> ("extratime", integer, {'init_val':
> 'LIBXL_DOMAIN_SCHED_PARAM_EXTRATIME_DEFAULT'}),
> ("budget", integer, {'init_val':
> 'LIBXL_DOMAIN_SCHED_PARAM_BUDGET_DEFAULT'}),
> ])
>
> SEDF now uses 'weight', 'period', 'slice', 'latency' and 'extratime'. If
> considering option 3, RTDS:
> - does not use 'weight' right now, but we can use it as an alternative
> way to set 'budget', which is not far from the way SEDF uses it;
> - uses 'period';
> - does not use 'slice', but that is just a synonym for 'budget';
> - does not use 'latency' right now; we can use it as an alternative way
> to set 'period', but that would be a bit different from what SEDF
> does with it;
> - does not use 'extratime' for now, but will, at some point, in a very
> similar way to how SEDF uses it.
>
> Oh and, whatever route we decide to go for, is it perhaps necessary that
> we do something like deprecate it for one release (4.6), e.g., by
> printing a warning saying that <<SEDF is still here now, but is
> deprecated and you won't find it in the next release>>, and then do the
> actual removal/conversion in 4.7?
I think given that it's been "going away" for 9 years, we should
probably just remove it and put it back if people complain. (And if
they really really can't use RTDS instead.)
-George
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |