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

Re: [Xen-devel] [PATCH 3 of 3] libxl: make it possible to explicitly specify default sched params



On Wed, May 23, 2012 at 10:26 AM, Ian Campbell <ian.campbell@xxxxxxxxxx> wrote:
> # HG changeset patch
> # User Ian Campbell <ian.campbell@xxxxxxxxxx>
> # Date 1337764865 -3600
> # Node ID b6221bcdf9a9045b49a2ddd7877602788f657bad
> # Parent  7d8428388b775a0b26cf88f89ec8f99f5fc8ce25
> libxl: make it possible to explicitly specify default sched params
>
> To do so we define a descriminating value which is never a valid real value 
> for
> each parameter.
>
> While there:
>
>  - removed libxl_sched_*_domain in favour of libxl_sched_params.
>  - use this new functionality for the various xl commands which set sched
>   parameters, which saves an explicit read-modify-write in xl.
>  - removed call of xc_domain_getinfolist from a few functions which weren't
>   actually using the result (looks like a cut and paste error)
>  - fix xl which was setting period for a variety of different config keys.
>
> Signed-off-by: Ian Campbell <ian.campbell@xxxxxxxxxx>

Overall the idea of the patch looks good.  There's just the thing
about shoving all the various schedulers' parameters into one struct.
One fall-out from it is that if you specify weight in your config file
(or during domain creation), it will set the weight for credit or
credit2, but use the defaults for sedf.  This might be nice; but we're
implicitly baking in an assumption that parameters with the same name
have to have roughly similar meanings across all schedulers.
Furthermore, if someone sets a "cap" in the config file, for example,
but starts the VM in a pool running credit2, should we really just
silently ignore it, or should we alert the user in some way?

In any case, this patch only takes things half-way.  If we're really
going to have One Struct to Rule Them All, we don't need different
domain_set/domain_get functions for the different schedulers -- we
just need a libxl_sched_domain_get(), which will both figure out what
scheduler the domain is running, and fill in the appropriate
parameters, and a libxl_sched_domain_set(), which will check to see
that you've asked for the right scheduler (or marked "unknown" if you
aren't afraid), and set what it can set.  We could also have a unified
"xl sched" command that would set various parameters without the user
having to know what scheduler was currently running (perhaps throwing
a warning if you're trying to set a parameter that doesn't exist for
that scheduler).

I'm not really sure which way I think is best.  I can see the
advantage of not having to know which scheduler is actually running,
but I'm a bit wary of baking in assumptions about the equivalence of
parameters; it seems like it could lead to some nasty surprises.

But I think whichever way we choose, we should take it to its logical
conclusion.  Which in the "One Struct" way, would mean having a single
domain_get/domain_set function, and in the "separate struct" way would
probably mean specifying the scheduler -- i.e., "credit_weight",
"credit2_weight" or something like that.  (Obviously we need xm
compatibility, but we can throw a warning to encourage people to
change their config files.)

 -George

>
> diff -r 7d8428388b77 -r b6221bcdf9a9 tools/libxl/libxl.c
> --- a/tools/libxl/libxl.c       Wed May 23 10:11:59 2012 +0100
> +++ b/tools/libxl/libxl.c       Wed May 23 10:21:05 2012 +0100
> @@ -3199,19 +3199,19 @@ libxl_scheduler libxl_get_scheduler(libx
>  }
>
>  int libxl_sched_credit_domain_get(libxl_ctx *ctx, uint32_t domid,
> -                                  libxl_sched_credit_domain *scinfo)
> +                                  libxl_sched_domain_params *scinfo)
>  {
>     struct xen_domctl_sched_credit sdom;
>     int rc;
>
> -    libxl_sched_credit_domain_init(scinfo);
> -
>     rc = xc_sched_credit_domain_get(ctx->xch, domid, &sdom);
>     if (rc != 0) {
>         LIBXL__LOG_ERRNO(ctx, LIBXL__LOG_ERROR, "getting domain sched 
> credit");
>         return ERROR_FAIL;
>     }
>
> +    libxl_sched_domain_params_init(scinfo);
> +    scinfo->sched = LIBXL_SCHEDULER_CREDIT;
>     scinfo->weight = sdom.weight;
>     scinfo->cap = sdom.cap;
>
> @@ -3219,7 +3219,7 @@ int libxl_sched_credit_domain_get(libxl_
>  }
>
>  int libxl_sched_credit_domain_set(libxl_ctx *ctx, uint32_t domid,
> -                                  libxl_sched_credit_domain *scinfo)
> +                                  libxl_sched_domain_params *scinfo)
>  {
>     struct xen_domctl_sched_credit sdom;
>     xc_domaininfo_t domaininfo;
> @@ -3233,22 +3233,33 @@ int libxl_sched_credit_domain_set(libxl_
>     if (rc != 1 || domaininfo.domain != domid)
>         return ERROR_INVAL;
>
> -
> -    if (scinfo->weight < 1 || scinfo->weight > 65535) {
> -        LIBXL__LOG(ctx, LIBXL__LOG_ERROR,
> -            "Cpu weight out of range, valid values are within range from 1 
> to 65535");
> -        return ERROR_INVAL;
> +    rc = xc_sched_credit_domain_get(ctx->xch, domid, &sdom);
> +    if (rc != 0) {
> +        LIBXL__LOG_ERRNO(ctx, LIBXL__LOG_ERROR, "getting domain sched 
> credit");
> +        return ERROR_FAIL;
>     }
>
> -    if (scinfo->cap < 0 || scinfo->cap > (domaininfo.max_vcpu_id + 1) * 100) 
> {
> -        LIBXL__LOG(ctx, LIBXL__LOG_ERROR,
> -            "Cpu cap out of range, valid range is from 0 to %d for specified 
> number of vcpus",
> -            ((domaininfo.max_vcpu_id + 1) * 100));
> -        return ERROR_INVAL;
> +    if (scinfo->weight != LIBXL_SCHED_DOMAIN_PARAM_WEIGHT_DEFAULT) {
> +        if (scinfo->weight < 1 || scinfo->weight > 65535) {
> +            LIBXL__LOG(ctx, LIBXL__LOG_ERROR,
> +                       "Cpu weight out of range, "
> +                       "valid values are within range from 1 to 65535");
> +            return ERROR_INVAL;
> +        }
> +        sdom.weight = scinfo->weight;
>     }
>
> -    sdom.weight = scinfo->weight;
> -    sdom.cap = scinfo->cap;
> +    if (scinfo->cap != LIBXL_SCHED_DOMAIN_PARAM_CAP_DEFAULT) {
> +        if (scinfo->cap < 0
> +            || scinfo->cap > (domaininfo.max_vcpu_id + 1) * 100) {
> +            LIBXL__LOG(ctx, LIBXL__LOG_ERROR,
> +                "Cpu cap out of range, "
> +                "valid range is from 0 to %d for specified number of vcpus",
> +                       ((domaininfo.max_vcpu_id + 1) * 100));
> +            return ERROR_INVAL;
> +        }
> +        sdom.cap = scinfo->cap;
> +    }
>
>     rc = xc_sched_credit_domain_set(ctx->xch, domid, &sdom);
>     if ( rc < 0 ) {
> @@ -3321,13 +3332,11 @@ int libxl_sched_credit_params_set(libxl_
>  }
>
>  int libxl_sched_credit2_domain_get(libxl_ctx *ctx, uint32_t domid,
> -                                   libxl_sched_credit2_domain *scinfo)
> +                                   libxl_sched_domain_params *scinfo)
>  {
>     struct xen_domctl_sched_credit2 sdom;
>     int rc;
>
> -    libxl_sched_credit2_domain_init(scinfo);
> -
>     rc = xc_sched_credit2_domain_get(ctx->xch, domid, &sdom);
>     if (rc != 0) {
>         LIBXL__LOG_ERRNO(ctx, LIBXL__LOG_ERROR,
> @@ -3335,36 +3344,37 @@ int libxl_sched_credit2_domain_get(libxl
>         return ERROR_FAIL;
>     }
>
> +    libxl_sched_domain_params_init(scinfo);
> +    scinfo->sched = LIBXL_SCHEDULER_CREDIT2;
>     scinfo->weight = sdom.weight;
>
>     return 0;
>  }
>
>  int libxl_sched_credit2_domain_set(libxl_ctx *ctx, uint32_t domid,
> -                                   libxl_sched_credit2_domain *scinfo)
> +                                   libxl_sched_domain_params *scinfo)
>  {
>     struct xen_domctl_sched_credit2 sdom;
> -    xc_domaininfo_t domaininfo;
>     int rc;
>
> -    rc = xc_domain_getinfolist(ctx->xch, domid, 1, &domaininfo);
> -    if (rc < 0) {
> -        LIBXL__LOG_ERRNO(ctx, LIBXL__LOG_ERROR, "getting domain info list");
> +    rc = xc_sched_credit2_domain_get(ctx->xch, domid, &sdom);
> +    if (rc != 0) {
> +        LIBXL__LOG_ERRNO(ctx, LIBXL__LOG_ERROR,
> +                         "getting domain sched credit2");
>         return ERROR_FAIL;
>     }
> -    if (rc != 1 || domaininfo.domain != domid)
> -        return ERROR_INVAL;
> -
> -
> -    if (scinfo->weight < 1 || scinfo->weight > 65535) {
> -        LIBXL__LOG_ERRNOVAL(ctx, LIBXL__LOG_ERROR, rc,
> -            "Cpu weight out of range, valid values are within range from "
> -            "1 to 65535");
> -        return ERROR_INVAL;
> +
> +    if (scinfo->weight != LIBXL_SCHED_DOMAIN_PARAM_WEIGHT_DEFAULT) {
> +        if (scinfo->weight < 1 || scinfo->weight > 65535) {
> +            LIBXL__LOG(ctx, LIBXL__LOG_ERROR,
> +                       "Cpu weight out of range, "
> +                       "valid values are within range from "
> +                       "1 to 65535");
> +            return ERROR_INVAL;
> +        }
> +        sdom.weight = scinfo->weight;
>     }
>
> -    sdom.weight = scinfo->weight;
> -
>     rc = xc_sched_credit2_domain_set(ctx->xch, domid, &sdom);
>     if ( rc < 0 ) {
>         LIBXL__LOG_ERRNO(ctx, LIBXL__LOG_ERROR,
> @@ -3376,7 +3386,7 @@ int libxl_sched_credit2_domain_set(libxl
>  }
>
>  int libxl_sched_sedf_domain_get(libxl_ctx *ctx, uint32_t domid,
> -                                libxl_sched_sedf_domain *scinfo)
> +                                libxl_sched_domain_params *scinfo)
>  {
>     uint64_t period;
>     uint64_t slice;
> @@ -3385,8 +3395,6 @@ int libxl_sched_sedf_domain_get(libxl_ct
>     uint16_t weight;
>     int rc;
>
> -    libxl_sched_sedf_domain_init(scinfo);
> -
>     rc = xc_sedf_domain_get(ctx->xch, domid, &period, &slice, &latency,
>                             &extratime, &weight);
>     if (rc != 0) {
> @@ -3394,6 +3402,8 @@ int libxl_sched_sedf_domain_get(libxl_ct
>         return ERROR_FAIL;
>     }
>
> +    libxl_sched_domain_params_init(scinfo);
> +    scinfo->sched = LIBXL_SCHEDULER_SEDF;
>     scinfo->period = period / 1000000;
>     scinfo->slice = slice / 1000000;
>     scinfo->latency = latency / 1000000;
> @@ -3404,24 +3414,37 @@ int libxl_sched_sedf_domain_get(libxl_ct
>  }
>
>  int libxl_sched_sedf_domain_set(libxl_ctx *ctx, uint32_t domid,
> -                                libxl_sched_sedf_domain *scinfo)
> +                                libxl_sched_domain_params *scinfo)
>  {
> -    xc_domaininfo_t domaininfo;
> -    int rc;
> -
> -    rc = xc_domain_getinfolist(ctx->xch, domid, 1, &domaininfo);
> -    if (rc < 0) {
> -        LIBXL__LOG_ERRNO(ctx, LIBXL__LOG_ERROR, "getting domain info list");
> +    uint64_t period;
> +    uint64_t slice;
> +    uint64_t latency;
> +    uint16_t extratime;
> +    uint16_t weight;
> +
> +    int ret;
> +
> +    ret = xc_sedf_domain_get(ctx->xch, domid, &period, &slice, &latency,
> +                            &extratime, &weight);
> +    if (ret != 0) {
> +        LIBXL__LOG_ERRNO(ctx, LIBXL__LOG_ERROR, "getting domain sched sedf");
>         return ERROR_FAIL;
>     }
> -    if (rc != 1 || domaininfo.domain != domid)
> -        return ERROR_INVAL;
> -
> -
> -    rc = xc_sedf_domain_set(ctx->xch, domid, scinfo->period * 1000000,
> -                            scinfo->slice * 1000000, scinfo->latency * 
> 1000000,
> -                            scinfo->extratime, scinfo->weight);
> -    if ( rc < 0 ) {
> +
> +    if (scinfo->period != LIBXL_SCHED_DOMAIN_PARAM_PERIOD_DEFAULT)
> +        period = scinfo->period * 1000000;
> +    if (scinfo->slice != LIBXL_SCHED_DOMAIN_PARAM_SLICE_DEFAULT)
> +        slice = scinfo->slice * 1000000;
> +    if (scinfo->latency != LIBXL_SCHED_DOMAIN_PARAM_LATENCY_DEFAULT)
> +        latency = scinfo->latency * 1000000;
> +    if (scinfo->extratime != LIBXL_SCHED_DOMAIN_PARAM_EXTRATIME_DEFAULT)
> +        extratime = scinfo->extratime;
> +    if (scinfo->weight != LIBXL_SCHED_DOMAIN_PARAM_WEIGHT_DEFAULT)
> +        weight = scinfo->weight;
> +
> +    ret = xc_sedf_domain_set(ctx->xch, domid, period, slice, latency,
> +                            extratime, weight);
> +    if ( ret < 0 ) {
>         LIBXL__LOG_ERRNO(ctx, LIBXL__LOG_ERROR, "setting domain sched sedf");
>         return ERROR_FAIL;
>     }
> diff -r 7d8428388b77 -r b6221bcdf9a9 tools/libxl/libxl.h
> --- a/tools/libxl/libxl.h       Wed May 23 10:11:59 2012 +0100
> +++ b/tools/libxl/libxl.h       Wed May 23 10:21:05 2012 +0100
> @@ -805,23 +805,33 @@ int libxl_set_vcpuonline(libxl_ctx *ctx,
>
>  libxl_scheduler libxl_get_scheduler(libxl_ctx *ctx);
>
> -
> -int libxl_sched_credit_domain_get(libxl_ctx *ctx, uint32_t domid,
> -                                  libxl_sched_credit_domain *scinfo);
> -int libxl_sched_credit_domain_set(libxl_ctx *ctx, uint32_t domid,
> -                                  libxl_sched_credit_domain *scinfo);
> +/* Per-scheduler parameters */
>  int libxl_sched_credit_params_get(libxl_ctx *ctx, uint32_t poolid,
>                                   libxl_sched_credit_params *scinfo);
>  int libxl_sched_credit_params_set(libxl_ctx *ctx, uint32_t poolid,
>                                   libxl_sched_credit_params *scinfo);
> +
> +/* Scheduler Per-domain parameters */
> +
> +#define LIBXL_SCHED_DOMAIN_PARAM_WEIGHT_DEFAULT    0
> +#define LIBXL_SCHED_DOMAIN_PARAM_CAP_DEFAULT       -1
> +#define LIBXL_SCHED_DOMAIN_PARAM_PERIOD_DEFAULT    0
> +#define LIBXL_SCHED_DOMAIN_PARAM_SLICE_DEFAULT     0
> +#define LIBXL_SCHED_DOMAIN_PARAM_LATENCY_DEFAULT   0
> +#define LIBXL_SCHED_DOMAIN_PARAM_EXTRATIME_DEFAULT -1
> +
> +int libxl_sched_credit_domain_get(libxl_ctx *ctx, uint32_t domid,
> +                                  libxl_sched_domain_params *scinfo);
> +int libxl_sched_credit_domain_set(libxl_ctx *ctx, uint32_t domid,
> +                                  libxl_sched_domain_params *scinfo);
>  int libxl_sched_credit2_domain_get(libxl_ctx *ctx, uint32_t domid,
> -                                   libxl_sched_credit2_domain *scinfo);
> +                                   libxl_sched_domain_params *scinfo);
>  int libxl_sched_credit2_domain_set(libxl_ctx *ctx, uint32_t domid,
> -                                   libxl_sched_credit2_domain *scinfo);
> +                                   libxl_sched_domain_params *scinfo);
>  int libxl_sched_sedf_domain_get(libxl_ctx *ctx, uint32_t domid,
> -                                libxl_sched_sedf_domain *scinfo);
> +                                libxl_sched_domain_params *scinfo);
>  int libxl_sched_sedf_domain_set(libxl_ctx *ctx, uint32_t domid,
> -                                libxl_sched_sedf_domain *scinfo);
> +                                libxl_sched_domain_params *scinfo);
>  int libxl_send_trigger(libxl_ctx *ctx, uint32_t domid,
>                        libxl_trigger trigger, uint32_t vcpuid);
>  int libxl_send_sysrq(libxl_ctx *ctx, uint32_t domid, char sysrq);
> diff -r 7d8428388b77 -r b6221bcdf9a9 tools/libxl/libxl_dom.c
> --- a/tools/libxl/libxl_dom.c   Wed May 23 10:11:59 2012 +0100
> +++ b/tools/libxl/libxl_dom.c   Wed May 23 10:21:05 2012 +0100
> @@ -45,34 +45,26 @@ libxl_domain_type libxl__domain_type(lib
>  int libxl__sched_set_params(libxl__gc *gc, uint32_t domid,
>                             libxl_sched_domain_params *scparams)
>  {
> -    libxl_ctx *ctx = libxl__gc_owner(gc);
> -    libxl_scheduler sched;
> -    libxl_sched_sedf_domain sedf_info;
> -    libxl_sched_credit_domain credit_info;
> -    libxl_sched_credit2_domain credit2_info;
> +    libxl_scheduler sched = scparams->sched;
>     int ret;
>
> -    sched = libxl_get_scheduler (ctx);
> +    if (sched == LIBXL_SCHEDULER_UNKNOWN)
> +        sched = libxl__domain_scheduler(gc, domid);
> +
>     switch (sched) {
>     case LIBXL_SCHEDULER_SEDF:
> -      sedf_info.period = scparams->period;
> -      sedf_info.slice = scparams->slice;
> -      sedf_info.latency = scparams->latency;
> -      sedf_info.extratime = scparams->extratime;
> -      sedf_info.weight = scparams->weight;
> -      ret=libxl_sched_sedf_domain_set(ctx, domid, &sedf_info);
> -      break;
> +        ret=libxl_sched_sedf_domain_set(CTX, domid, scparams);
> +        break;
>     case LIBXL_SCHEDULER_CREDIT:
> -      credit_info.weight = scparams->weight;
> -      credit_info.cap = scparams->cap;
> -      ret=libxl_sched_credit_domain_set(ctx, domid, &credit_info);
> -      break;
> +        ret=libxl_sched_credit_domain_set(CTX, domid, scparams);
> +        break;
>     case LIBXL_SCHEDULER_CREDIT2:
> -      credit2_info.weight = scparams->weight;
> -      ret=libxl_sched_credit2_domain_set(ctx, domid, &credit2_info);
> -      break;
> +        ret=libxl_sched_credit2_domain_set(CTX, domid, scparams);
> +        break;
>     default:
> -      ret=-1;
> +        LOG(ERROR, "Unknown scheduler");
> +        ret=ERROR_INVAL;
> +        break;
>     }
>     return ret;
>  }
> diff -r 7d8428388b77 -r b6221bcdf9a9 tools/libxl/libxl_types.idl
> --- a/tools/libxl/libxl_types.idl       Wed May 23 10:11:59 2012 +0100
> +++ b/tools/libxl/libxl_types.idl       Wed May 23 10:21:05 2012 +0100
> @@ -227,12 +227,13 @@ libxl_domain_create_info = Struct("domai
>  MemKB = UInt(64, init_val = "LIBXL_MEMKB_DEFAULT")
>
>  libxl_sched_domain_params = Struct("sched_domain_params",[
> -    ("weight",       integer),
> -    ("cap",          integer),
> -    ("period",       integer),
> -    ("slice",        integer),
> -    ("latency",      integer),
> -    ("extratime",    integer),
> +    ("sched",        libxl_scheduler),
> +    ("weight",       integer, {'init_val': 
> 'LIBXL_SCHED_DOMAIN_PARAM_WEIGHT_DEFAULT'}),
> +    ("cap",          integer, {'init_val': 
> 'LIBXL_SCHED_DOMAIN_PARAM_CAP_DEFAULT'}),
> +    ("period",       integer, {'init_val': 
> 'LIBXL_SCHED_DOMAIN_PARAM_PERIOD_DEFAULT'}),
> +    ("slice",        integer, {'init_val': 
> 'LIBXL_SCHED_DOMAIN_PARAM_SLICE_DEFAULT'}),
> +    ("latency",      integer, {'init_val': 
> 'LIBXL_SCHED_DOMAIN_PARAM_LATENCY_DEFAULT'}),
> +    ("extratime",    integer, {'init_val': 
> 'LIBXL_SCHED_DOMAIN_PARAM_EXTRATIME_DEFAULT'}),
>     ], dir=DIR_IN)
>
>  # Instances of libxl_file_reference contained in this struct which
> @@ -432,28 +433,11 @@ libxl_cputopology = Struct("cputopology"
>     ("node", uint32),
>     ], dir=DIR_OUT)
>
> -libxl_sched_credit_domain = Struct("sched_credit_domain", [
> -    ("weight", integer),
> -    ("cap", integer),
> -    ])
> -
>  libxl_sched_credit_params = Struct("sched_credit_params", [
>     ("tslice_ms", integer),
>     ("ratelimit_us", integer),
>     ], dispose_fn=None)
>
> -libxl_sched_credit2_domain = Struct("sched_credit2_domain", [
> -    ("weight", integer),
> -    ])
> -
> -libxl_sched_sedf_domain = Struct("sched_sedf_domain", [
> -    ("period", integer),
> -    ("slice", integer),
> -    ("latency", integer),
> -    ("extratime", integer),
> -    ("weight", integer),
> -    ])
> -
>  libxl_domain_remus_info = Struct("domain_remus_info",[
>     ("interval",     integer),
>     ("blackhole",    bool),
> diff -r 7d8428388b77 -r b6221bcdf9a9 tools/libxl/xl_cmdimpl.c
> --- a/tools/libxl/xl_cmdimpl.c  Wed May 23 10:11:59 2012 +0100
> +++ b/tools/libxl/xl_cmdimpl.c  Wed May 23 10:21:05 2012 +0100
> @@ -627,7 +627,8 @@ static void parse_config_data(const char
>
>     libxl_domain_build_info_init_type(b_info, c_info->type);
>
> -    /* the following is the actual config parsing with overriding values in 
> the structures */
> +    /* the following is the actual config parsing with overriding
> +     * values in the structures */
>     if (!xlu_cfg_get_long (config, "cpu_weight", &l, 0))
>         b_info->sched_params.weight = l;
>     if (!xlu_cfg_get_long (config, "cap", &l, 0))
> @@ -635,11 +636,11 @@ static void parse_config_data(const char
>     if (!xlu_cfg_get_long (config, "period", &l, 0))
>         b_info->sched_params.period = l;
>     if (!xlu_cfg_get_long (config, "slice", &l, 0))
> -        b_info->sched_params.period = l;
> +        b_info->sched_params.slice = l;
>     if (!xlu_cfg_get_long (config, "latency", &l, 0))
> -        b_info->sched_params.period = l;
> +        b_info->sched_params.latency = l;
>     if (!xlu_cfg_get_long (config, "extratime", &l, 0))
> -        b_info->sched_params.period = l;
> +        b_info->sched_params.extratime = l;
>
>     if (!xlu_cfg_get_long (config, "vcpus", &l, 0)) {
>         b_info->max_vcpus = l;
> @@ -4351,7 +4352,7 @@ int main_sharing(int argc, char **argv)
>     return 0;
>  }
>
> -static int sched_credit_domain_get(int domid, libxl_sched_credit_domain 
> *scinfo)
> +static int sched_credit_domain_get(int domid, libxl_sched_domain_params 
> *scinfo)
>  {
>     int rc;
>
> @@ -4362,7 +4363,7 @@ static int sched_credit_domain_get(int d
>     return rc;
>  }
>
> -static int sched_credit_domain_set(int domid, libxl_sched_credit_domain 
> *scinfo)
> +static int sched_credit_domain_set(int domid, libxl_sched_domain_params 
> *scinfo)
>  {
>     int rc;
>
> @@ -4398,7 +4399,7 @@ static int sched_credit_params_get(int p
>  static int sched_credit_domain_output(int domid)
>  {
>     char *domname;
> -    libxl_sched_credit_domain scinfo;
> +    libxl_sched_domain_params scinfo;
>     int rc;
>
>     if (domid < 0) {
> @@ -4415,7 +4416,7 @@ static int sched_credit_domain_output(in
>         scinfo.weight,
>         scinfo.cap);
>     free(domname);
> -    libxl_sched_credit_domain_dispose(&scinfo);
> +    libxl_sched_domain_params_dispose(&scinfo);
>     return 0;
>  }
>
> @@ -4441,7 +4442,7 @@ static int sched_credit_pool_output(uint
>  }
>
>  static int sched_credit2_domain_get(
> -    int domid, libxl_sched_credit2_domain *scinfo)
> +    int domid, libxl_sched_domain_params *scinfo)
>  {
>     int rc;
>
> @@ -4453,7 +4454,7 @@ static int sched_credit2_domain_get(
>  }
>
>  static int sched_credit2_domain_set(
> -    int domid, libxl_sched_credit2_domain *scinfo)
> +    int domid, libxl_sched_domain_params *scinfo)
>  {
>     int rc;
>
> @@ -4468,7 +4469,7 @@ static int sched_credit2_domain_output(
>     int domid)
>  {
>     char *domname;
> -    libxl_sched_credit2_domain scinfo;
> +    libxl_sched_domain_params scinfo;
>     int rc;
>
>     if (domid < 0) {
> @@ -4484,12 +4485,12 @@ static int sched_credit2_domain_output(
>         domid,
>         scinfo.weight);
>     free(domname);
> -    libxl_sched_credit2_domain_dispose(&scinfo);
> +    libxl_sched_domain_params_dispose(&scinfo);
>     return 0;
>  }
>
>  static int sched_sedf_domain_get(
> -    int domid, libxl_sched_sedf_domain *scinfo)
> +    int domid, libxl_sched_domain_params *scinfo)
>  {
>     int rc;
>
> @@ -4501,7 +4502,7 @@ static int sched_sedf_domain_get(
>  }
>
>  static int sched_sedf_domain_set(
> -    int domid, libxl_sched_sedf_domain *scinfo)
> +    int domid, libxl_sched_domain_params *scinfo)
>  {
>     int rc;
>
> @@ -4515,7 +4516,7 @@ static int sched_sedf_domain_output(
>     int domid)
>  {
>     char *domname;
> -    libxl_sched_sedf_domain scinfo;
> +    libxl_sched_domain_params scinfo;
>     int rc;
>
>     if (domid < 0) {
> @@ -4536,7 +4537,7 @@ static int sched_sedf_domain_output(
>         scinfo.extratime,
>         scinfo.weight);
>     free(domname);
> -    libxl_sched_sedf_domain_dispose(&scinfo);
> +    libxl_sched_domain_params_dispose(&scinfo);
>     return 0;
>  }
>
> @@ -4617,7 +4618,6 @@ static int sched_domain_output(libxl_sch
>  */
>  int main_sched_credit(int argc, char **argv)
>  {
> -    libxl_sched_credit_domain scinfo;
>     const char *dom = NULL;
>     const char *cpupool = NULL;
>     int weight = 256, cap = 0, opt_w = 0, opt_c = 0;
> @@ -4692,7 +4692,7 @@ int main_sched_credit(int argc, char **a
>     }
>
>     if (opt_s) {
> -        libxl_sched_credit_params  scparam;
> +        libxl_sched_credit_params scparam;
>         uint32_t poolid = 0;
>
>         if (cpupool) {
> @@ -4728,20 +4728,19 @@ int main_sched_credit(int argc, char **a
>     } else {
>         find_domain(dom);
>
> -        rc = sched_credit_domain_get(domid, &scinfo);
> -        if (rc)
> -            return -rc;
> -
>         if (!opt_w && !opt_c) { /* output credit scheduler info */
>             sched_credit_domain_output(-1);
>             return -sched_credit_domain_output(domid);
>         } else { /* set credit scheduler paramaters */
> +            libxl_sched_domain_params scinfo;
> +            libxl_sched_domain_params_init(&scinfo);
> +            scinfo.sched = LIBXL_SCHEDULER_CREDIT;
>             if (opt_w)
>                 scinfo.weight = weight;
>             if (opt_c)
>                 scinfo.cap = cap;
>             rc = sched_credit_domain_set(domid, &scinfo);
> -            libxl_sched_credit_domain_dispose(&scinfo);
> +            libxl_sched_domain_params_dispose(&scinfo);
>             if (rc)
>                 return -rc;
>         }
> @@ -4752,7 +4751,6 @@ int main_sched_credit(int argc, char **a
>
>  int main_sched_credit2(int argc, char **argv)
>  {
> -    libxl_sched_credit2_domain scinfo;
>     const char *dom = NULL;
>     const char *cpupool = NULL;
>     int weight = 256, opt_w = 0;
> @@ -4807,18 +4805,17 @@ int main_sched_credit2(int argc, char **
>     } else {
>         find_domain(dom);
>
> -        rc = sched_credit2_domain_get(domid, &scinfo);
> -        if (rc)
> -            return -rc;
> -
>         if (!opt_w) { /* output credit2 scheduler info */
>             sched_credit2_domain_output(-1);
>             return -sched_credit2_domain_output(domid);
>         } else { /* set credit2 scheduler paramaters */
> +            libxl_sched_domain_params scinfo;
> +            libxl_sched_domain_params_init(&scinfo);
> +            scinfo.sched = LIBXL_SCHEDULER_CREDIT2;
>             if (opt_w)
>                 scinfo.weight = weight;
>             rc = sched_credit2_domain_set(domid, &scinfo);
> -            libxl_sched_credit2_domain_dispose(&scinfo);
> +            libxl_sched_domain_params_dispose(&scinfo);
>             if (rc)
>                 return -rc;
>         }
> @@ -4829,7 +4826,6 @@ int main_sched_credit2(int argc, char **
>
>  int main_sched_sedf(int argc, char **argv)
>  {
> -    libxl_sched_sedf_domain scinfo;
>     const char *dom = NULL;
>     const char *cpupool = NULL;
>     int period = 0, opt_p = 0;
> @@ -4912,15 +4908,15 @@ int main_sched_sedf(int argc, char **arg
>     } else {
>         find_domain(dom);
>
> -        rc = sched_sedf_domain_get(domid, &scinfo);
> -        if (rc)
> -            return -rc;
> -
>         if (!opt_p && !opt_s && !opt_l && !opt_e && !opt_w) {
>             /* output sedf scheduler info */
>             sched_sedf_domain_output(-1);
>             return -sched_sedf_domain_output(domid);
>         } else { /* set sedf scheduler paramaters */
> +            libxl_sched_domain_params scinfo;
> +            libxl_sched_domain_params_init(&scinfo);
> +            scinfo.sched = LIBXL_SCHEDULER_SEDF;
> +
>             if (opt_p) {
>                 scinfo.period = period;
>                 scinfo.weight = 0;
> @@ -4939,7 +4935,7 @@ int main_sched_sedf(int argc, char **arg
>                 scinfo.slice = 0;
>             }
>             rc = sched_sedf_domain_set(domid, &scinfo);
> -            libxl_sched_sedf_domain_dispose(&scinfo);
> +            libxl_sched_domain_params_dispose(&scinfo);
>             if (rc)
>                 return -rc;
>         }
>
> _______________________________________________
> Xen-devel mailing list
> Xen-devel@xxxxxxxxxxxxx
> http://lists.xen.org/xen-devel

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