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

Re: [Xen-devel] [PATCH] libxl: fix validation of scheduling parameters for sedf



On Fri, 2012-06-22 at 17:16 +0100, Dario Faggioli wrote:
> 2205914617cb does its job in correcting the "wrong domain being
> considered" issue introduced by 9d1fd58ff602. Unfortunately, when
> dealing (again!) with the sedf scheduler, it is required for the
> vCPUs of a domain to have been allocated and setup already (in
> the hypervisor), when the first call to libxl_domain_sched_params_get()
> happens, and that is not true.
> 
> This fixes that by avoiding calling that function at all, as we
> only need to know which scheduler the domain is running under,
> and that is provided by libxl__domain_scheduler() which is safe
> to be called there.
> 
> While at it, also improve a bit the comments about the whole
> sedf parameter validation and mangling process.
> 
> Signed-off-by: Dario Faggioli <dario.faggioli@xxxxxxxxxx>

Acked-by: Ian Campbell <ian.campbell@xxxxxxxxxx>
Committed-by: Ian Campbell <ian.campbell@xxxxxxxxxx>

> diff --git a/tools/libxl/libxl_create.c b/tools/libxl/libxl_create.c
> --- a/tools/libxl/libxl_create.c
> +++ b/tools/libxl/libxl_create.c
> @@ -80,36 +80,48 @@ static int sched_params_valid(libxl__gc 
>      int has_slice = scp->slice != LIBXL_DOMAIN_SCHED_PARAM_SLICE_DEFAULT;
>      int has_extratime =
>                  scp->extratime != LIBXL_DOMAIN_SCHED_PARAM_EXTRATIME_DEFAULT;
> -    libxl_domain_sched_params sci;
> -
> -    libxl_domain_sched_params_get(CTX, domid, &sci);
>  
>      /* The sedf scheduler needs some more consistency checking */
> -    if (sci.sched == LIBXL_SCHEDULER_SEDF) {
> +    if (libxl__domain_scheduler(gc, domid) == LIBXL_SCHEDULER_SEDF) {
>          if (has_weight && (has_period || has_slice))
>              return 0;
> +        /* If you want a real-time domain, with its own period and
> +         * slice, please, do provide both! */
>          if (has_period != has_slice)
>              return 0;
>  
>          /*
>           * Idea is, if we specify a weight, then both period and
> -         * slice has to be zero. OTOH, if we do not specify a weight,
> -         * that means we want a pure best effort domain or an actual
> -         * real-time one. In the former case, it is period that needs
> -         * to be zero, in the latter, weight should be.
> +         * slice has to be zero. OTOH, if we do specify a period and
> +         * slice, it is weight that should be zeroed. See
> +         * docs/misc/sedf_scheduler_mini-HOWTO.txt for more details
> +         * on the meaningful combinations and their meanings.
>           */
>          if (has_weight) {
>              scp->slice = 0;
>              scp->period = 0;
>          }
>          else if (!has_period) {
> +            /* No weight nor slice/period means best effort. Parameters needs
> +             * some mangling in order to properly ask for that, though. */
> +
> +            /*
> +             * Providing no weight does not make any sense if we do not allow
> +             * the domain to run in extra time. On the other hand, if we have
> +             * extra time, weight will be ignored (and zeroed) by Xen, but it
> +             * can't be zero here, or the call for setting the scheduling
> +             * parameters will fail. So, avoid the latter by setting a random
> +             * weight (namely, 1), as it will be ignored anyway.
> +             */
> +
>              /* We can setup a proper best effort domain (extra time only)
>               * iff we either already have or are asking for some extra time. 
> */
> -            scp->weight = has_extratime ? scp->extratime : sci.extratime;
> +            scp->weight = has_extratime ? scp->extratime : 1;
>              scp->period = 0;
> +        } else {
> +            /* Real-time domain: will get slice CPU time over every period */
> +            scp->weight = 0;
>          }
> -        if (has_period && has_slice)
> -            scp->weight = 0;
>      }
>  
>      return 1;



_______________________________________________
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®.