xen-devel.lists.xenproject.org archive mirror
 help / color / mirror / Atom feed
From: Chong Li <lichong659@gmail.com>
To: Wei Liu <wei.liu2@citrix.com>
Cc: Chong Li <chong.li@wustl.edu>, Sisu Xi <xisisu@gmail.com>,
	George Dunlap <george.dunlap@eu.citrix.com>,
	"dario.faggioli" <dario.faggioli@citrix.com>,
	Ian Jackson <ian.jackson@eu.citrix.com>,
	xen-devel <xen-devel@lists.xen.org>,
	Ian Campbell <ian.campbell@eu.citrix.com>,
	Meng Xu <mengxu@cis.upenn.edu>,
	Dagaen Golomb <dgolomb@seas.upenn.edu>
Subject: Re: [PATCH v6 for Xen 4.7 3/4] libxl: enable per-VCPU parameter settings for RTDS scheduler
Date: Tue, 8 Mar 2016 18:38:54 -0600	[thread overview]
Message-ID: <CAGHO-ioUhU-LGOe+MRicWnpzbrpVtZ+e0OKFqsJ-dmXoJMxT9w@mail.gmail.com> (raw)
In-Reply-To: <20160308191253.GV31271@citrix.com>

On Tue, Mar 8, 2016 at 1:12 PM, Wei Liu <wei.liu2@citrix.com> 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@lists.xen.org
http://lists.xen.org/xen-devel

  reply	other threads:[~2016-03-09  0:38 UTC|newest]

Thread overview: 51+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-03-06 17:55 [PATCH v6 for Xen 4.7 0/4] Enable per-VCPU parameter settings for RTDS scheduler Chong Li
2016-03-06 17:55 ` [PATCH v6 for Xen 4.7 1/4] xen: enable " Chong Li
2016-03-07 12:59   ` Jan Beulich
2016-03-07 16:28     ` Chong Li
2016-03-07 16:40       ` Jan Beulich
2016-03-07 17:53         ` Dario Faggioli
2016-03-07 22:16           ` Chong Li
2016-03-08  9:10           ` Jan Beulich
2016-03-08 10:34             ` Dario Faggioli
2016-03-08 11:47               ` Jan Beulich
2016-03-08 19:09   ` Wei Liu
2016-03-09 16:10     ` Dario Faggioli
2016-03-09 16:38       ` Jan Beulich
2016-03-13 17:05         ` Chong Li
2016-03-14  8:37           ` Jan Beulich
2016-03-14  9:10             ` Dario Faggioli
2016-03-14  9:15               ` Jan Beulich
2016-03-14 10:05                 ` Dario Faggioli
2016-03-15 16:22                   ` Chong Li
2016-03-15 16:41                     ` Dario Faggioli
2016-03-15 17:22                       ` Chong Li
2016-03-16  3:14                         ` Meng Xu
2016-03-16  3:32                           ` Chong Li
2016-03-16  3:43                             ` Meng Xu
2016-03-16  8:23                               ` Dario Faggioli
2016-03-16 14:37                                 ` Meng Xu
2016-03-16 14:46                                   ` Chong Li
2016-03-16 14:53                                   ` Dario Faggioli
2016-03-16 14:46                                 ` Chong Li
2016-03-16 14:54                                   ` Dario Faggioli
2016-03-16 10:48                               ` Jan Beulich
2016-03-10 22:35     ` Chong Li
2016-03-10 22:50       ` Wei Liu
2016-03-14  9:07         ` Dario Faggioli
2016-03-06 17:55 ` [PATCH v6 for Xen 4.7 2/4] libxc: " Chong Li
2016-03-08 19:09   ` Wei Liu
2016-03-08 19:32     ` Chong Li
2016-03-08 19:36       ` Wei Liu
2016-03-06 17:55 ` [PATCH v6 for Xen 4.7 3/4] libxl: " Chong Li
2016-03-08 19:12   ` Wei Liu
2016-03-09  0:38     ` Chong Li [this message]
2016-03-09 14:01       ` Wei Liu
2016-03-09 17:28     ` Dario Faggioli
2016-03-09 21:57       ` Chong Li
2016-03-09 17:09   ` Dario Faggioli
2016-03-09 17:28     ` Dario Faggioli
2016-03-06 17:55 ` [PATCH v6 for Xen 4.7 4/4] xl: " Chong Li
2016-03-08 19:12   ` Wei Liu
2016-03-08 21:24     ` Chong Li
2016-03-09 14:01       ` Wei Liu
2016-03-09 14:09   ` Wei Liu

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=CAGHO-ioUhU-LGOe+MRicWnpzbrpVtZ+e0OKFqsJ-dmXoJMxT9w@mail.gmail.com \
    --to=lichong659@gmail.com \
    --cc=chong.li@wustl.edu \
    --cc=dario.faggioli@citrix.com \
    --cc=dgolomb@seas.upenn.edu \
    --cc=george.dunlap@eu.citrix.com \
    --cc=ian.campbell@eu.citrix.com \
    --cc=ian.jackson@eu.citrix.com \
    --cc=mengxu@cis.upenn.edu \
    --cc=wei.liu2@citrix.com \
    --cc=xen-devel@lists.xen.org \
    --cc=xisisu@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).