[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH 1 of 3] Support of getting scheduler defaults
On Tue, 2012-05-22 at 15:59 +0100, Ian Campbell wrote: > Like the below. Lightly tested with the credit scheduler. > > I think CAP is the only one for which 0 is a real valid value, but I'm > not sure (especially with the SEDF ones which didn't have existing > limits checks in the set function I could crib from...). > Yep, that's because they're mostly time values. xen/common/sched_sedf.c hosts some ranges for some of them, but I'm not sure we want to propagate those: #define PERIOD_MAX MILLISECS(10000) /* 10s */ #define PERIOD_MIN (MICROSECS(10)) /* 10us */ #define SLICE_MIN (MICROSECS(5)) /* 5us */ Also, extratime is a flag, so I think 0 and 1 are both meaningful values, maybe we can go for -1 as for cap (I'll try and let you know). > I'm pretty sure that libxl__sched_set_params needs to get the correct > scheduler for the particular domain, but I've no idea how to get that... > Again, I was thinking something like what Juergen did here could help (go getting the scheduler of the cpupool the domain belongs to)... O am I misunderstanding the issue? + poolinfo = libxl_list_cpupool(ctx, &n_pools); + if (!poolinfo) + return ERROR_NOMEM; + + ret = ERROR_INVAL; + for (p = 0; p < n_pools; p++) { + if (poolinfo[p].poolid == poolid) { + scparams->sched = poolinfo[p].sched; + ret = 0; + } + libxl_cpupoolinfo_dispose(poolinfo + p); + } + > 8<--------------------------- > > # HG changeset patch > # User Ian Campbell <ian.campbell@xxxxxxxxxx> > # Date 1337698727 -3600 > # Node ID 355030f95eb313605a0e43aa7328e731b28a28b3 > # Parent 426bbf58cea4559464b6e5d3ff0f65324a5f5926 > 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: > > - remove tslice_ms and ratelimit_us from libxl_sched_params and from the xl > domain config parser. These are global scheduler properties, not per-domain > ones (and were never read in any case). > - removed libxl_sched_*_domain in favour of libxl_sched_params. > - rename libxl_sched_params to libxl_sched_domain_params for clarity. > - 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> > > diff -r 426bbf58cea4 -r 355030f95eb3 tools/libxl/libxl.c > --- a/tools/libxl/libxl.c Tue May 22 14:19:07 2012 +0100 > +++ b/tools/libxl/libxl.c Tue May 22 15:58:47 2012 +0100 > @@ -3168,19 +3168,19 @@ libxl_scheduler libxl_get_scheduler(libx > } > <snip> > > 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) > + period = scinfo->slice * 1000000; > + if (scinfo->latency != LIBXL_SCHED_DOMAIN_PARAM_LATENCY_DEFAULT) > + period = scinfo->latency * 1000000; > + if (scinfo->extratime != LIBXL_SCHED_DOMAIN_PARAM_EXTRATIME_DEFAULT) > + period = scinfo->extratime; > + if (scinfo->weight != LIBXL_SCHED_DOMAIN_PARAM_WEIGHT_DEFAULT) > + period = 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; > } > # xl create vm1.cfg Parsing config from vm1.cfg libxl: error: libxl.c:3417:libxl_sched_sedf_domain_set: setting domain sched sedf: Invalid argument And I'm getting the above independently on what I put in the config file (valid params, no params at all, etc.). I also can't change the scheduling parameters of a domain on-line anymore: # xl sched-sedf -d 3 -p 100 -s 50 libxl: error: libxl.c:3417:libxl_sched_sedf_domain_set: setting domain sched sedf: Invalid argument libxl_sched_sedf_domain_set failed. I'll try digging a bit more into this ASAP. On more thing, are we ok with the _set command failing and he domain being created anyway? Or perhaps the whole process should just abort? Regards, Dario -- <<This happens because I choose it to happen!>> (Raistlin Majere) ----------------------------------------------------------------- Dario Faggioli, Ph.D, http://retis.sssup.it/people/faggioli Senior Software Engineer, Citrix Systems R&D Ltd., Cambridge (UK) Attachment:
signature.asc _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |