[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v6 for Xen 4.7 3/4] libxl: enable per-VCPU parameter settings for RTDS scheduler
On Tue, Mar 8, 2016 at 1:12 PM, Wei Liu <wei.liu2@xxxxxxxxxx> wrote: > On Sun, Mar 06, 2016 at 11:55:57AM -0600, Chong Li wrote: > [...] >> tools/libxl/libxl.c | 326 >> ++++++++++++++++++++++++++++++++++++++++---- >> tools/libxl/libxl.h | 37 +++++ >> tools/libxl/libxl_types.idl | 14 ++ >> 3 files changed, 354 insertions(+), 23 deletions(-) >> >> diff --git a/tools/libxl/libxl.c b/tools/libxl/libxl.c >> index bd3aac8..4532e86 100644 >> --- a/tools/libxl/libxl.c >> +++ b/tools/libxl/libxl.c >> @@ -5770,6 +5770,207 @@ static int sched_credit2_domain_set(libxl__gc *gc, >> uint32_t domid, >> return 0; >> } >> >> +static int sched_rtds_validate_params(libxl__gc *gc, int period, >> + int budget, uint32_t *sdom_period, >> + uint32_t *sdom_budget) > > > This is a strange pattern. It does more than what it's name suggests. > > It seems this function just returns the vanilla values in period and > budget. It can be simplified by removing sdom_period and sdom_budget all > together. Do you agree? Yes. >> + >> +/* Get the RTDS scheduling parameters of vcpu(s) */ >> +static int sched_rtds_vcpu_get(libxl__gc *gc, uint32_t domid, >> + libxl_vcpu_sched_params *scinfo) >> +{ >> + uint32_t num_vcpus; >> + int i, r, rc; >> + xc_dominfo_t info; >> + struct xen_domctl_schedparam_vcpu *vcpus; >> + >> + r = xc_domain_getinfo(CTX->xch, domid, 1, &info); >> + if (r < 0) { >> + LOGE(ERROR, "getting domain info"); >> + rc = ERROR_FAIL; >> + goto out; >> + } >> + >> + num_vcpus = scinfo->num_vcpus ? scinfo->num_vcpus : >> + info.max_vcpu_id + 1; >> + >> + GCNEW_ARRAY(vcpus, num_vcpus); >> + >> + if (scinfo->num_vcpus > 0) { >> + for (i = 0; i < num_vcpus; i++) { >> + if (scinfo->vcpus[i].vcpuid < 0 || >> + scinfo->vcpus[i].vcpuid > info.max_vcpu_id) { >> + LOG(ERROR, "VCPU index is out of range, " >> + "valid values are within range from 0 to %d", >> + info.max_vcpu_id); >> + rc = ERROR_INVAL; >> + goto out; >> + } >> + vcpus[i].vcpuid = scinfo->vcpus[i].vcpuid; >> + } >> + } else >> + for (i = 0; i < num_vcpus; i++) >> + vcpus[i].vcpuid = i; >> + >> + r = xc_sched_rtds_vcpu_get(CTX->xch, domid, vcpus, num_vcpus); >> + if (r != 0) { >> + LOGE(ERROR, "getting vcpu sched rtds"); >> + rc = ERROR_FAIL; >> + goto out; >> + } >> + scinfo->sched = LIBXL_SCHEDULER_RTDS; >> + if (scinfo->num_vcpus == 0) { >> + scinfo->num_vcpus = num_vcpus; >> + scinfo->vcpus = libxl__calloc(NOGC, num_vcpus, >> + sizeof(libxl_sched_params)); >> + } >> + for(i = 0; i < num_vcpus; i++) { >> + scinfo->vcpus[i].period = vcpus[i].s.rtds.period; >> + scinfo->vcpus[i].budget = vcpus[i].s.rtds.budget; >> + scinfo->vcpus[i].vcpuid = vcpus[i].vcpuid; >> + } >> +return r; > > Just set rc = 0 here? Ok. > >> +out: >> + return rc; >> +} >> + >> +/* Set the RTDS scheduling parameters of vcpu(s) */ >> +static int sched_rtds_vcpus_params_set(libxl__gc *gc, uint32_t domid, >> + const libxl_vcpu_sched_params *scinfo) >> +{ >> + int r, rc; >> + int i; >> + uint16_t max_vcpuid; >> + xc_dominfo_t info; >> + struct xen_domctl_schedparam_vcpu *vcpus; >> + uint32_t num_vcpus; >> + >> + r = xc_domain_getinfo(CTX->xch, domid, 1, &info); >> + if (r < 0) { >> + LOGE(ERROR, "getting domain info"); >> + rc = ERROR_FAIL; >> + goto out; >> + } >> + max_vcpuid = info.max_vcpu_id; >> + >> + if (scinfo->num_vcpus > 0) { >> + num_vcpus = scinfo->num_vcpus; >> + GCNEW_ARRAY(vcpus, num_vcpus); >> + for (i = 0; i < num_vcpus; i++) { >> + if (scinfo->vcpus[i].vcpuid < 0 || >> + scinfo->vcpus[i].vcpuid > max_vcpuid) { >> + LOG(ERROR, "VCPU index is out of range, " >> + "valid values are within range from 0 to %d", >> + max_vcpuid); >> + rc = ERROR_INVAL; >> + goto out; >> + } >> + vcpus[i].vcpuid = scinfo->vcpus[i].vcpuid; >> + > > I would suggest you use a separate loop to validate the input, otherwise > you risk getting input partial success. What do you mean by "partial success"? Do you suggest to validate the entire input first, and then create && set the vcpus array? > >> + rc = sched_rtds_validate_params(gc, >> + scinfo->vcpus[i].period, scinfo->vcpus[i].budget, >> + &vcpus[i].s.rtds.period, &vcpus[i].s.rtds.budget); >> + if (rc) { >> + rc = ERROR_INVAL; >> + goto out; >> + } >> + } >> + } else { >> + rc = ERROR_INVAL; >> + goto out; >> + } > Chong -- Chong Li Department of Computer Science and Engineering Washington University in St.louis _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |