support of setting scheduler parameters on domain creation
PATCH 1/1 support of setting scheduler parameters on domain creation
Support setting scheduling parameters on domain creation.
Depending on the scheduler of the cpupool in which the domain is started, the default parameters are obtained from the hypervisor. Any scheduling parameters specified during domain creation will modify these defaults.
This patch series consists of 3 patches:
1: support of getting scheduler default parameters in the hypervisor 2: support in libxc
3: support in xl/libxl
14 files changed, 214 insertions(+), 28 deletions(-) tools/libxc/xc_csched.c | 21 +++++++++++++ tools/libxc/xc_csched2.c | 21 +++++++++++++ tools/libxc/xc_sedf.c | 21 +++++++++++++ tools/libxc/xenctrl.h | 10 ++++++ tools/libxl/libxl.h | 2 + tools/libxl/libxl_dom.c | 65 +++++++++++++++++++++++++++++++++++++++++-- tools/libxl/libxl_types.idl | 1 tools/libxl/xl_cmdimpl.c | 10 ++++-- xen/common/sched_credit.c | 5 +++ xen/common/sched_credit2.c | 17 +++++++++++ xen/common/sched_sedf.c | 20 +++++++++++++ xen/common/schedule.c | 5 +-- xen/include/public/domctl.h | 38 +++++++++++++------------ xen/include/public/sysctl.h | 6 ++-
PATCH 1/1 Support of getting scheduler defaults
Support a new sysctl schedop sub-command to get the scheduling defaults of a specific scheduler.
Additionally correct parameter checking of the sysctl handling in schedule.c (checked wrong sub-commands: domctl instead of sysctl).
6 files changed, 69 insertions(+), 22 deletions(-) xen/common/sched_credit.c | 5 +++++ xen/common/sched_credit2.c | 17 +++++++++++++++++ xen/common/sched_sedf.c | 20 ++++++++++++++++++++ xen/common/schedule.c | 5 +++-- xen/include/public/domctl.h | 38 ++++++++++++++++++++------------------ xen/include/public/sysctl.h | 6 ++++--
# HG changeset patch
# User Juergen Gross <[email protected]> # Date 1337674472 -7200
# Node ID 56c50b3f6cc3eb1de8b86024d0e41e65345d9a79 # Parent 238900a4ed227d04c164d4cd12dfc66f7a25b946 Support of getting scheduler defaults
Support a new sysctl schedop sub-command to get the scheduling defaults of a specific scheduler.
Additionally correct parameter checking of the sysctl handling in schedule.c (checked wrong sub-commands: domctl instead of sysctl).
xen/common/sched_credit.c +5 -0
@@ -858,6 +858,11 @@ csched_sys_cntl(const struct scheduler * params->ratelimit_us = prv->ratelimit_us; rc =0 ;break ; +case XEN_SYSCTL_SCHEDOP_getdefaults: + sc->u.defaults.credit.weight =CSCHED_DEFAULT_WEIGHT ; + sc->u.defaults.credit.cap =0U ; + rc =0 ; +break ; } out:return rc;
xen/common/sched_credit2.c +17 -0
@@ -1423,6 +1423,22 @@ csched_dom_cntl(return 0 ; } +static int +csched_sys_cntl (const struct scheduler *ops, +struct xen_sysctl_scheduler_op *sc) +{ +int rc = -EINVAL ; + +switch ( sc->cmd ) + { +case XEN_SYSCTL_SCHEDOP_getdefaults: + sc->u.defaults.credit2.weight =CSCHED_DEFAULT_WEIGHT ; + rc =0 ; +break ; + } +return rc; +} +static void *csched_alloc_domdata (const struct scheduler *ops,struct domain *dom) {
@@ -2110,6 +2126,7 @@ const struct scheduler sched_credit2_def .wake = csched_vcpu_wake, .adjust = csched_dom_cntl, + .adjust_global = csched_sys_cntl, .pick_cpu = csched_cpu_pick, .migrate = csched_vcpu_migrate,
xen/common/sched_sedf.c +20 -0
@@ -1502,6 +1502,25 @@ out:return rc; } +static int sedf_adjust_global (const struct scheduler *ops, +struct xen_sysctl_scheduler_op *sc) +{ +int rc = -EINVAL ; + +switch ( sc->cmd ) + { +case XEN_SYSCTL_SCHEDOP_getdefaults: + sc->u.defaults.sedf.period =WEIGHT_PERIOD ; + sc->u.defaults.sedf.slice =0 ; + sc->u.defaults.sedf.latency =0 ; + sc->u.defaults.sedf.extratime =EXTRA_AWARE ; + sc->u.defaults.sedf.weight =0 ; + rc =0 ; +break ; + } +return rc; +} +static struct sedf_priv_info _sedf_priv;const struct scheduler sched_sedf_def = {
@@ -1531,6 +1550,7 @@ const struct scheduler sched_sedf_def = .sleep = sedf_sleep, .wake = sedf_wake, .adjust = sedf_adjust, + .adjust_global = sedf_adjust_global, };/*
xen/common/schedule.c +3 -2
@@ -1029,8 +1029,9 @@ long sched_adjust_global(struct xen_syscstruct cpupool *pool;int rc; -if ( (op->cmd != XEN_DOMCTL_SCHEDOP_putinfo) && - (op->cmd != XEN_DOMCTL_SCHEDOP_getinfo) ) +if ( (op->cmd != XEN_SYSCTL_SCHEDOP_putinfo) && + (op->cmd != XEN_SYSCTL_SCHEDOP_getinfo) && + (op->cmd != XEN_SYSCTL_SCHEDOP_getdefaults))return -EINVAL ; pool =cpupool_get_by_id (op->cpupool_id);
xen/include/public/domctl.h +20 -18
@@ -303,28 +303,30 @@ DEFINE_XEN_GUEST_HANDLE(xen_domctl_max_v#define XEN_SCHEDULER_CREDIT 5#define XEN_SCHEDULER_CREDIT2 6#define XEN_SCHEDULER_ARINC653 7 +/* Scheduling parameters (used in sysctl.h, too) */ +union xen_sched_par { +struct xen_domctl_sched_sedf { +uint64_aligned_t period; +uint64_aligned_t slice; +uint64_aligned_t latency; +uint32_t extratime; +uint32_t weight; + } sedf; +struct xen_domctl_sched_credit { +uint16_t weight; +uint16_t cap; + } credit; +struct xen_domctl_sched_credit2 { +uint16_t weight; + } credit2; +};/* Set or get info? */ -#define XEN_DOMCTL_SCHEDOP_putinfo 0 -#define XEN_DOMCTL_SCHEDOP_getinfo 1 +#define XEN_DOMCTL_SCHEDOP_putinfo 0 +#define XEN_DOMCTL_SCHEDOP_getinfo 1struct xen_domctl_scheduler_op {uint32_t sched_id;/* XEN_SCHEDULER_* */ uint32_t cmd;/* XEN_DOMCTL_SCHEDOP_* */ -union { -struct xen_domctl_sched_sedf { -uint64_aligned_t period; -uint64_aligned_t slice; -uint64_aligned_t latency; -uint32_t extratime; -uint32_t weight; - } sedf; -struct xen_domctl_sched_credit { -uint16_t weight; -uint16_t cap; - } credit; -struct xen_domctl_sched_credit2 { -uint16_t weight; - } credit2; - } u; +union xen_sched_par u; };typedef struct xen_domctl_scheduler_op xen_domctl_scheduler_op_t ;DEFINE_XEN_GUEST_HANDLE (xen_domctl_scheduler_op_t);
xen/include/public/sysctl.h +4 -2
@@ -579,8 +579,9 @@ DEFINE_XEN_GUEST_HANDLE(xen_sysctl_credi/* XEN_SYSCTL_scheduler_op */ /* Set or get info? */ -#define XEN_SYSCTL_SCHEDOP_putinfo 0 -#define XEN_SYSCTL_SCHEDOP_getinfo 1 +#define XEN_SYSCTL_SCHEDOP_putinfo 0 +#define XEN_SYSCTL_SCHEDOP_getinfo 1 +#define XEN_SYSCTL_SCHEDOP_getdefaults 2struct xen_sysctl_scheduler_op {uint32_t cpupool_id;/* Cpupool whose scheduler is to be targetted. */ uint32_t sched_id;/* XEN_SCHEDULER_* (domctl.h) */
@@ -590,6 +591,7 @@ struct xen_sysctl_scheduler_op {XEN_GUEST_HANDLE_64 (xen_sysctl_arinc653_schedule_t) schedule; } sched_arinc653;struct xen_sysctl_credit_schedule sched_credit; +union xen_sched_par defaults; } u; };typedef struct xen_sysctl_scheduler_op xen_sysctl_scheduler_op_t ;
_______________________________________________
Xen-devel mailing list
[email protected]
http://lists.xen.org/xen-devel
Re: [PATCH 1 of 3] Support of getting scheduler defaults
Quoted 2 lines · Juergen Gross
Support a new sysctl schedop sub-command to get the scheduling defaults of a specific scheduler.
Why is XEN_DOMCTL_SCHEDOP_getinfo not sufficient here?
Isn't it actually more useful/meaningful to get the current actual setting rather than a default?
Ian.
Quoted 16 lines
Additionally correct parameter checking of the sysctl handling in
schedule.c(checked wrong sub-commands: domctl instead of sysctl).Signed-off-by Juergen Gross <[email protected]>6 files changed, 69 insertions(+), 22 deletions(-) xen/common/sched_credit.c | 5 +++++ xen/common/sched_credit2.c | 17 +++++++++++++++++ xen/common/sched_sedf.c | 20 ++++++++++++++++++++ xen/common/schedule.c | 5 +++-- xen/include/public/domctl.h | 38 ++++++++++++++++++++------------------ xen/include/public/sysctl.h | 6 ++++--
Re: [PATCH 1 of 3] Support of getting scheduler defaults
Quoted 7 lines · Ian Campbell
Quoted 2 lines · Juergen Gross
Support a new sysctl schedop sub-command to get the scheduling defaults of a specific scheduler.
Why is
XEN_DOMCTL_SCHEDOP_getinfonot sufficient here?Isn't it actually more useful/meaningful to get the current actual setting rather than a default?
When setting the parameters from the config file we have no domain yet which we would have to specify for XEN_DOMCTL_SCHEDOP_getinfo. I didn't want to parse part of the config only after domain creation.
A default should be okay, as this is what we want to modify. :-) The scheduler should initialize a new domain with this default, of course.
Juergen
Signature · 5 lines
Juergen Gross Principal Developer Operating Systems PDG ES&S SWE OS6 Telephone: +49 (0) 89 3222 2967 Fujitsu Technology Solutions e-mail: [email protected] Domagkstr. 28 Internet: ts.fujitsu.com D-80807 Muenchen Company details: ts.fujitsu.com/imprint.html
Re: [PATCH 1 of 3] Support of getting scheduler defaults
Quoted 4 lines · Juergen Gross
Quoted 3 lines · Ian Campbell
Quoted 2 lines · Juergen Gross
Support a new sysctl schedop sub-command to get the scheduling defaults of a specific scheduler.
Quoted 8 lines
Quoted 4 lines
Why is
XEN_DOMCTL_SCHEDOP_getinfonot sufficient here?Isn't it actually more useful/meaningful to get the current actual setting rather than a default?
When setting the parameters from the config file we have no domain yet which we would have to specify for
XEN_DOMCTL_SCHEDOP_getinfo. I didn't want to parse part of the config only after domain creation.
That seems like another problem with doing this up front instead of doing read-modify-write when we come to set the values for the domain.
Quoted 2 lines
A default should be okay, as this is what we want to modify. :-) The scheduler should initialize a new domain with this default, of course.
So I can't use this interface to change the current one of the current settings for running a domain, while leaving the others at their current value?
Which interface can I use for that and why isn't it the same as this one?
Ian.
Re: [PATCH 1 of 3] Support of getting scheduler defaults
Quoted 7 lines · Ian Campbell
Quoted 6 lines · Juergen Gross
Quoted 5 lines · Ian Campbell
Quoted 2 lines · Juergen Gross
Support a new sysctl schedop sub-command to get the scheduling defaults of a specific scheduler.
Why is
XEN_DOMCTL_SCHEDOP_getinfonot sufficient here?
Quoted 7 lines
Quoted 5 lines
Quoted 2 lines
Isn't it actually more useful/meaningful to get the current actual setting rather than a default?
When setting the parameters from the config file we have no domain yet which we would have to specify for
XEN_DOMCTL_SCHEDOP_getinfo. I didn't want to parse part of the config only after domain creation.That seems like another problem with doing this up front instead of doing read-modify-write when we come to set the values for the domain.
Do you think it would be okay to parse the scheduler config data _after_ domain creation? If yes, the read-modify-write approach is simple and always correct. If no, you will have to initialize the parameters to something scheduler specific, and not domain specific.
Quoted 5 lines
Quoted 2 lines
A default should be okay, as this is what we want to modify. :-) The scheduler should initialize a new domain with this default, of course.
So I can't use this interface to change the current one of the current settings for running a domain, while leaving the others at their current value?
I don't understand this sentence :-) ...
Quoted 2 lines
Which interface can I use for that and why isn't it the same as this one?
... making it hard to answer to this one. :-)
Nevertheless trying: you can change the scheduling parameters of a running domain with xl sched-credit/sched-sedf/...
Juergen
Signature · 5 lines
Juergen Gross Principal Developer Operating Systems PDG ES&S SWE OS6 Telephone: +49 (0) 89 3222 2967 Fujitsu Technology Solutions e-mail: [email protected] Domagkstr. 28 Internet: ts.fujitsu.com D-80807 Muenchen Company details: ts.fujitsu.com/imprint.html
Re: [PATCH 1 of 3] Support of getting scheduler defaults
Quoted 19 lines · Juergen Gross
Quoted 7 lines
Quoted 4 lines
When setting the parameters from the config file we have no domain yet which
we would have to specify forXEN_DOMCTL_SCHEDOP_getinfo. I didn't want to parse part of the config only after domain creation.That seems like another problem with doing this up front instead of doing read-modify-write when we come to set the values for the domain.
Do you think it would be okay to parse the scheduler config data _after_ domain creation? If yes, the read-modify-write approach is simple and always correct. If no, you will have to initialize the parameters to something scheduler specific, and not domain specific.
Quoted 4 lines
Quoted 3 lines
A default should be okay, as this is what we want to modify. :-) The scheduler should initialize a new domain with this default, of course.
Quoted 6 lines
Quoted 3 lines
So I can't use this interface to change the current one of the current settings for running a domain, while leaving the others at their current value?
I don't understand this sentence :-) ...
I think he means this: Suppose after the domain is created, you want to set the weight. With the proposed interface, you have to manually read the values and change them yourself. With an interface that allows -1 to be default, libxl can do that for you (making programming easier).
Quoted 9 lines
Quoted 4 lines
Which interface can I use for that and why isn't it the same as this one?
... making it hard to answer to this one. :-)
Nevertheless trying: you can change the scheduling parameters of a running domain with xl sched-credit/sched-sedf/...
I think Ian has convinced me that just using -1 for default values would be the best option:
* It doesn't require a new special 'what are the defaults" hypercall
* The same interface can be used to set only a subset of the options (leaving the other ones alone) *after* the domain is created.
Thanks for doing the work to code it up, though Juergen.
-George
Re: [PATCH 1 of 3] Support of getting scheduler defaults
Quoted 7 lines · George Dunlap
Quoted 5 lines · Juergen Gross
Quoted 5 lines
Quoted 4 lines
When setting the parameters from the config file we have no domain yet which
we would have to specify forXEN_DOMCTL_SCHEDOP_getinfo. I didn't want to parse part of the config only after domain creation.
Quoted 6 lines
Quoted 6 lines
Quoted 2 lines
That seems like another problem with doing this up front instead of doing read-modify-write when we come to set the values for the domain.
Do you think it would be okay to parse the scheduler config data _after_ domain creation?
No, I don't think there's any sensible way to make this work at the libxl interface, you'd need to call back out to xl half way through domain build to ask it to parse the sched params for you.
Quoted 14 lines
If yes, the read-modify-write approach is simple and always
Quoted 13 lines
correct. If no, you will have to initialize the parameters to something scheduler specific, and not domain specific.
Quoted 7 lines
Quoted 3 lines
A default should be okay, as this is what we want to modify. :-) The scheduler should initialize a new domain with this default, of course.
So I can't use this interface to change the current one of the current settings for running a domain, while leaving the others at their current value?
Quoted 7 lines
Quoted 1 line
I don't understand this sentence :-) ...
I think he means this: Suppose after the domain is created, you want to set the weight. With the proposed interface, you have to manually read the values and change them yourself. With an interface that allows -1 to be default, libxl can do that for you (making programming easier).
Right. And furthermore with this patch the interface for setting the initial values is different to the one for updating them, since this patch gets you the defaults which you change.
Quoted 10 lines
Quoted 10 lines
Quoted 5 lines
Which interface can I use for that and why isn't it the same as this one?
... making it hard to answer to this one. :-)
Nevertheless trying: you can change the scheduling parameters of a running domain with xl sched-credit/sched-sedf/...
Right, my question above was -- why I can't I use the same libxl interface as these commands at build time (perhaps internally inside libxl)
Quoted 9 lines
I think Ian has convinced me that just using -1 for default values would be the best option:
* It doesn't require a new special 'what are the defaults" hypercall
* The same interface can be used to set only a subset of the options (leaving the other ones alone) *after* the domain is created.Thanks for doing the work to code it up, though Juergen.
-George
Re: [PATCH 1 of 3] Support of getting scheduler defaults
In reply to George DunlapQuoted 3 lines · George Dunlap
I think Ian has convinced me that just using -1 for default values would be the best option:
Perhaps I should code up what I'm talking about for comparison.
Ian.
Re: [PATCH 1 of 3] Support of getting scheduler defaults
Quoted 6 lines · Ian Campbell
Quoted 3 lines · George Dunlap
I think Ian has convinced me that just using -1 for default values would be the best option:
Perhaps I should code up what I'm talking about for comparison.
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...).
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...
8<---------------------------
# HG changeset patch
# User Ian Campbell <[email protected]>
# 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.
tools/libxl/libxl.c +76 -53
@@ -3168,19 +3168,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;
@@ -3188,7 +3188,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;
@@ -3202,22 +3202,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 ) {
@@ -3290,13 +3301,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,
@@ -3304,36 +3313,37 @@ int libxl_sched_credit2_domain_get(libxlreturn 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,
@@ -3345,7 +3355,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;
@@ -3354,8 +3364,6 @@ int libxl_sched_sedf_domain_get(libxl_ctuint16_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 ) {
@@ -3363,6 +3371,8 @@ int libxl_sched_sedf_domain_get(libxl_ctreturn 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 ;
@@ -3373,24 +3383,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 ) + 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 ; }
tools/libxl/libxl.h +19 -9
@@ -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 0 + +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);
tools/libxl/libxl_dom.c +15 -21
@@ -42,36 +42,30 @@ libxl_domain_type libxl__domain_type(libreturn LIBXL_DOMAIN_TYPE_PV ; } -int libxl__sched_set_params (libxl__gc *gc,uint32_t domid,libxl_sched_params *scparams) +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_get_scheduler (ctx); +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; }
tools/libxl/libxl_internal.h +1 -1
@@ -716,7 +716,7 @@ _hidden int libxl__atfork_init(libxl_ctx/* from xl_dom */ _hidden libxl_domain_type libxl__domain_type(libxl__gc *gc, uint32_t domid); _hidden int libxl__domain_shutdown_reason(libxl__gc *gc, uint32_t domid); -_hidden int libxl__sched_set_params(libxl__gc *gc, uint32_t domid, libxl_sched_params *scparams); +_hidden int libxl__sched_set_params(libxl__gc *gc, uint32_t domid, libxl_sched_domain_params *scparams);#define LIBXL__DOMAIN_IS_TYPE (gc, domid, type) \ libxl__domain_type((gc), (domid)) == LIBXL_DOMAIN_TYPE_##type typedef struct {
tools/libxl/libxl_types.idl +11 -27
@@ -109,7 +109,9 @@ libxl_bios_type = Enumeration("bios_type ]) # Consistent with values defined in domctl.h +# Except unknown which is special. libxl_scheduler = Enumeration("scheduler", [ + (0, "unknown"), (4, "sedf"), (5, "credit"), (6, "credit2"),
@@ -224,15 +226,14 @@ libxl_domain_create_info = Struct("domai MemKB = UInt(64, init_val = "LIBXL_MEMKB_DEFAULT") -libxl_sched_params = Struct("sched_params",[ - ("weight", integer), - ("cap", integer), - ("tslice_ms", integer), - ("ratelimit_us", integer), - ("period", integer), - ("slice", integer), - ("latency", integer), - ("extratime", integer), +libxl_sched_domain_params = Struct("sched_domain_params",[ + ("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
@@ -267,7 +268,7 @@ libxl_domain_build_info = Struct("domain # extra parameters pass directly to qemu for HVM guest, NULL terminated ("extra_hvm", libxl_string_list), # parameters for all type of scheduler - ("sched_params", libxl_sched_params), + ("sched_params", libxl_sched_domain_params), ("u", KeyedUnion(None, libxl_domain_type, "type", [("hvm", Struct(None, [("firmware", string),
@@ -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),
tools/libxl/xl_cmdimpl.c +31 -39
224 lines not on this page · raw message
Re: [PATCH 1 of 3] Support of getting scheduler defaults
Quoted 6 lines · Ian Campbell
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).
Quoted 3 lines
I'm pretty sure that
libxl__sched_set_paramsneeds 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);
+ }
+
Quoted 33 lines
8<---------------------------
# HG changeset patch
# User Ian Campbell <[email protected]>
# Date 1337698727 -3600
# Node ID355030f95eb313605a0e43aa7328e731b28a28b3
# Parent426bbf58cea4559464b6e5d3ff0f65324a5f5926
libxl: make it possible to explicitly specify default sched paramsTo do so we define a descriminating value which is never a valid real value for each parameter.
While there:
- remove
tslice_msandratelimit_usfromlibxl_sched_paramsand 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 oflibxl_sched_params.
- renamelibxl_sched_paramstolibxl_sched_domain_paramsfor 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 ofxc_domain_getinfolistfrom 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 <[email protected]>diff -r
426bbf58cea4-r355030f95eb3tools/libxl/libxl.ctools/libxl/libxl.c +0
-0@@ -3168,19 +3168,19 @@ libxl_scheduler libxl_get_scheduler(libx }
<snip>
Quoted 42 lines
int libxl_sched_sedf_domain_set(libxl_ctx *ctx,
uint32_tdomid,tools/libxl/libxl.c +21
-15- 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 )
tools/libxl/libxl.c int libxl_sched_sedf_domain_get(libxl_ct · line 3419
Quoted 10 lines
tools/libxl/libxl.c +7
-0+ 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
Signature · 4 lines
<<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)
_______________________________________________
Xen-devel mailing list
[email protected]
http://lists.xen.org/xen-devel
Re: [PATCH 1 of 3] Support of getting scheduler defaults
Quoted 7 lines · Dario Faggioli
Quoted 6 lines · Ian Campbell
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...).
Quoted 7 lines
Yep, that's because they're mostly time values.
xen/common/sched_sedf.chosts some ranges for some of them, but I'm not sure we want to propagate those:#define
PERIOD_MAXMILLISECS(10000) /* 10s */
#definePERIOD_MIN(MICROSECS(10)) /* 10us */
#defineSLICE_MIN(MICROSECS(5)) /* 5us */
I think this should remain in the hypervisor only.
Quoted 2 lines
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).
Why not -1 for all values?
Quoted 10 lines
Quoted 3 lines
I'm pretty sure that
libxl__sched_set_paramsneeds 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?
(quoted diff) +3
-0+ poolinfo = libxl_list_cpupool(ctx,&n_pools); + if (!poolinfo) + return ERROR_NOMEM;
Review
Quoted 10 lines
(quoted diff) +10
-0+ + 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); + } +
This was exactly the purpose of the sniplet.
Quoted 94 lines
Quoted 33 lines
8<---------------------------
# HG changeset patch
# User Ian Campbell<[email protected]>
# Date 1337698727 -3600
# Node ID355030f95eb313605a0e43aa7328e731b28a28b3
# Parent426bbf58cea4559464b6e5d3ff0f65324a5f5926
libxl: make it possible to explicitly specify default sched paramsTo do so we define a descriminating value which is never a valid real value for each parameter.
While there:
- remove
tslice_msandratelimit_usfromlibxl_sched_paramsand 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 oflibxl_sched_params.
- renamelibxl_sched_paramstolibxl_sched_domain_paramsfor 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 ofxc_domain_getinfolistfrom 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<[email protected]>diff -r
426bbf58cea4-r355030f95eb3tools/libxl/libxl.ctools/libxl/libxl.c +0
-0@@ -3168,19 +3168,19 @@ libxl_scheduler libxl_get_scheduler(libx }<snip>
Quoted 42 lines
int libxl_sched_sedf_domain_set(libxl_ctx *ctx,
uint32_tdomid,tools/libxl/libxl.c +21
-15- 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 )tools/libxl/libxl.c int libxl_sched_sedf_domain_get(libxl_ct · line 3419
Quoted 10 lines
tools/libxl/libxl.c +7
-0+ 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 argumentAnd 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:
Quoted 5 lines
# 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.
It's easy: Ian repeated an error he (and I) corrected elsewhere:
He's always setting period, regardless of the changed parameter...
Quoted 2 lines
On more thing, are we ok with the
_setcommand failing and he domain being created anyway? Or perhaps the whole process should just abort?
Perhaps a warning might be okay.
Juergen
Signature · 5 lines
Juergen Gross Principal Developer Operating Systems PDG ES&S SWE OS6 Telephone: +49 (0) 89 3222 2967 Fujitsu Technology Solutions e-mail: [email protected] Domagkstr. 28 Internet: ts.fujitsu.com D-80807 Muenchen Company details: ts.fujitsu.com/imprint.html
Re: [PATCH 1 of 3] Support of getting scheduler defaults
Quoted 6 lines · Juergen Gross
Quoted 3 lines
#define
PERIOD_MAXMILLISECS(10000) /* 10s */
#definePERIOD_MIN(MICROSECS(10)) /* 10us */
#defineSLICE_MIN(MICROSECS(5)) /* 5us */I think this should remain in the hypervisor only.
Me too.
Quoted 5 lines
Quoted 2 lines
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).
Why not -1 for all values?
Would work, I guess, unless there's some collision with big weights represented on short unsigned value (not sure it's like that, and I've always been bad at this kind of math! :-P).
Quoted 7 lines
Quoted 7 lines
Quoted 3 lines
I'm pretty sure that
libxl__sched_set_paramsneeds 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?
Quoted 16 lines
Review
Quoted 13 lines
(quoted diff) +13
-0+ 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); + } +This was exactly the purpose of the sniplet.
Good to hear that. :-)
Quoted 8 lines
Quoted 8 lines
# xl create vm1.cfg Parsing config from vm1.cfg libxl: error: libxl.c:3417:libxl_sched_sedf_domain_set: setting domain sched sedf: Invalid argumentAnd 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:
Quoted 9 lines
Quoted 5 lines
# 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.
It's easy: Ian repeated an error he (and I) corrected elsewhere:
He's always setting period, regardless of the changed parameter...
Not sure, I think Ian's patch fixes that:
tools/libxl/xl_cmdimpl.c Tue May 22 15:58:47 2012 +0100 renamed from tools/libxl/xl_cmdimpl.c Tue May 22 14:19:07 2012 +0100 +5 -8
@@ -627,23 +627,20 @@ 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)) b_info->sched_params.cap = l; - if (!xlu_cfg_get_long (config, "tslice_ms", &l, 0)) - b_info->sched_params.tslice_ms = l; - if (!xlu_cfg_get_long (config, "ratelimit_us", &l, 0)) - b_info->sched_params.ratelimit_us = l; 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;
So it has to be something else...
Thanks and Regards,
Dario
Signature · 4 lines
<<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)
_______________________________________________
Xen-devel mailing list
[email protected]
http://lists.xen.org/xen-devel
Re: [PATCH 1 of 3] Support of getting scheduler defaults
Quoted 8 lines · Dario Faggioli
Quoted 6 lines · Juergen Gross
Quoted 3 lines
#define
PERIOD_MAXMILLISECS(10000) /* 10s */
#definePERIOD_MIN(MICROSECS(10)) /* 10us */
#defineSLICE_MIN(MICROSECS(5)) /* 5us */I think this should remain in the hypervisor only.
Me too.
Agreed.
Quoted 8 lines
Quoted 5 lines
Quoted 2 lines
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).
Why not -1 for all values?
Would work, I guess, unless there's some collision with big weights represented on short unsigned value (not sure it's like that, and I've always been bad at this kind of math! :-P).
In general in libxl where we can use 0 for the default we do so. It's not a strong preference though and it's mainly historical from before the IDL supported init_val.
Quoted 23 lines
Quoted 7 lines
Quoted 7 lines
Quoted 3 lines
I'm pretty sure that
libxl__sched_set_paramsneeds 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?
Quoted 16 lines
Review
Quoted 13 lines
(quoted diff) +13
-0+ 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); + } +This was exactly the purpose of the sniplet.
Quoted 1 line
Good to hear that. :-)
Great, I'll make a suitably named function out of it.
Quoted 12 lines
Quoted 12 lines
Quoted 12 lines
# xl create vm1.cfg Parsing config from vm1.cfg libxl: error: libxl.c:3417:libxl_sched_sedf_domain_set: setting domain sched sedf: Invalid argumentAnd 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.
Quoted 6 lines
Quoted 5 lines
Quoted 1 line
I'll try digging a bit more into this ASAP.
It's easy: Ian repeated an error he (and I) corrected elsewhere:
He's always setting period, regardless of the changed parameter...Not sure, I think Ian's patch fixes that:
I thought so to!
Quoted 35 lines
tools/libxl/xl_cmdimpl.c Tue May 22 15:58:47 2012 +0100 renamed from tools/libxl/xl_cmdimpl.c Tue May 22 14:19:07 2012 +0100 +5
-8@@ -627,23 +627,20 @@ 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)) b_info->sched_params.cap = l; - if (!xlu_cfg_get_long (config, "tslice_ms", &l, 0)) - b_info->sched_params.tslice_ms = l; - if (!xlu_cfg_get_long (config, "ratelimit_us", &l, 0)) - b_info->sched_params.ratelimit_us = l; 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;So it has to be something else...
Thanks and Regards,
Dario
Re: [PATCH 1 of 3] Support of getting scheduler defaults
Quoted 12 lines · Ian Campbell
# xl create vm1.cfg Parsing config from vm1.cfg libxl: error: libxl.c:3417:libxl_sched_sedf_domain_set: setting domain sched sedf: Invalid argumentAnd 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.
Quoted 6 lines
I'll try digging a bit more into this ASAP.
Quoted 4 lines
Quoted 3 lines
It's easy: Ian repeated an error he (and I) corrected elsewhere:
He's always setting period, regardless of the changed parameter...Not sure, I think Ian's patch fixes that:
I thought so to!
It fixes the original error.
Quoted 30 lines
Quoted 30 lines
tools/libxl/xl_cmdimpl.c Tue May 22 15:58:47 2012 +0100 renamed from tools/libxl/xl_cmdimpl.c Tue May 22 14:19:07 2012 +0100 +5
-8@@ -627,23 +627,20 @@ 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)) b_info->sched_params.cap = l; - if (!xlu_cfg_get_long (config, "tslice_ms",&l, 0)) - b_info->sched_params.tslice_ms = l; - if (!xlu_cfg_get_long (config, "ratelimit_us",&l, 0)) - b_info->sched_params.ratelimit_us = l; 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;
Quoted 1 line
Quoted 1 line
So it has to be something else...
Oh yes:
+
+ 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;
Regardless which parameter was changed, it is always 'period' which is set to the changed value.
Juergen
Signature · 5 lines
Juergen Gross Principal Developer Operating Systems PDG ES&S SWE OS6 Telephone: +49 (0) 89 3222 2967 Fujitsu Technology Solutions e-mail: [email protected] Domagkstr. 28 Internet: ts.fujitsu.com D-80807 Muenchen Company details: ts.fujitsu.com/imprint.html
Re: [PATCH 1 of 3] Support of getting scheduler defaults
Quoted 14 lines · Juergen Gross
Oh yes:
(quoted diff) +11
-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;
Quoted 2 lines
Regardless which parameter was changed, it is always 'period' which is set to the changed value.
Oh balls! Thanks for noticing, I'll fix this and resend...
Ian.
Re: [PATCH 1 of 3] Support of getting scheduler defaults
In reply to Juergen GrossQuoted 5 lines · Juergen Gross
Quoted 2 lines
Quoted 1 line
Not sure, I think Ian's patch fixes that:
I thought so to!
It fixes the original error.
Yep, that was what I was looking at ...
Quoted 16 lines
Quoted 1 line
Quoted 1 line
So it has to be something else...
Oh yes:
(quoted diff) +11
-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;
Quoted 3 lines
Regardless which parameter was changed, it is always 'period' which is set to the changed value.
... And completely ignored this! :-P
However, I'm still having some issues (even after fixing this)!
I'll keep looking at this, testing the series Ian just sent and let you know.
Thanks and Regards,
Dario
Signature · 4 lines
<<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)
_______________________________________________
Xen-devel mailing list
[email protected]
http://lists.xen.org/xen-devel
Re: [PATCH 1 of 3] Support of getting scheduler defaults
In reply to Dario FaggioliQuoted 8 lines · Dario Faggioli
Quoted 5 lines · Juergen Gross
Quoted 3 lines
#define
PERIOD_MAXMILLISECS(10000) /* 10s */
#definePERIOD_MIN(MICROSECS(10)) /* 10us */
#defineSLICE_MIN(MICROSECS(5)) /* 5us */I think this should remain in the hypervisor only.
Me too.
Quoted 7 lines
Quoted 4 lines
Quoted 2 lines
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).
Why not -1 for all values?
Would work, I guess, unless there's some collision with big weights represented on short unsigned value (not sure it's like that, and I've always been bad at this kind of math! :-P).
The -1 would be set in scparams only, and there it is an integer. It should never be written to the "real" scheduler parameters passed to the hypervisor.
Juergen
Signature · 5 lines
Juergen Gross Principal Developer Operating Systems PDG ES&S SWE OS6 Telephone: +49 (0) 89 3222 2967 Fujitsu Technology Solutions e-mail: [email protected] Domagkstr. 28 Internet: ts.fujitsu.com D-80807 Muenchen Company details: ts.fujitsu.com/imprint.html
PATCH 1/1 Support getting scheduler defaults in libxc
In reply to Juergen GrossAdd scheduler specific interfaces to get scheduling defaults from the hypervisor.
4 files changed, 73 insertions(+) tools/libxc/xc_csched.c | 21 +++++++++++++++++++++ tools/libxc/xc_csched2.c | 21 +++++++++++++++++++++ tools/libxc/xc_sedf.c | 21 +++++++++++++++++++++ tools/libxc/xenctrl.h | 10 ++++++++++
# HG changeset patch
# User Juergen Gross <[email protected]> # Date 1337675490 -7200
# Node ID 19aaa30d7fdce2f1b56cb13399d603d955a61fb8 # Parent 56c50b3f6cc3eb1de8b86024d0e41e65345d9a79 Support getting scheduler defaults in libxc
Add scheduler specific interfaces to get scheduling defaults from the hypervisor.
tools/libxc/xc_csched.c +21 -0
@@ -105,3 +105,24 @@ xc_sched_credit_params_get(return rc; } + +int +xc_sched_credit_defaults_get ( +xc_interface *xch, +uint32_t cpupool_id, +struct xen_domctl_sched_credit *sdom) +{ +int rc; +DECLARE_SYSCTL ; + + sysctl.cmd = XEN_SYSCTL_scheduler_op; + sysctl.u.scheduler_op.cpupool_id = cpupool_id; + sysctl.u.scheduler_op.sched_id =XEN_SCHEDULER_CREDIT ; + sysctl.u.scheduler_op.cmd = XEN_SYSCTL_SCHEDOP_getdefaults; + + rc =do_sysctl (xch, &sysctl); +if ( rc ==0 ) + *sdom = sysctl.u.scheduler_op.u.defaults.credit; + +return rc; +}
tools/libxc/xc_csched2.c +21 -0
@@ -61,3 +61,24 @@ xc_sched_credit2_domain_get(return err; } + +int +xc_sched_credit2_defaults_get ( +xc_interface *xch, +uint32_t cpupool_id, +struct xen_domctl_sched_credit2 *sdom) +{ +int rc; +DECLARE_SYSCTL ; + + sysctl.cmd = XEN_SYSCTL_scheduler_op; + sysctl.u.scheduler_op.cpupool_id = cpupool_id; + sysctl.u.scheduler_op.sched_id =XEN_SCHEDULER_CREDIT2 ; + sysctl.u.scheduler_op.cmd = XEN_SYSCTL_SCHEDOP_getdefaults; + + rc =do_sysctl (xch, &sysctl); +if ( rc ==0 ) + *sdom = sysctl.u.scheduler_op.u.defaults.credit2; + +return rc; +}
tools/libxc/xc_sedf.c +21 -0
@@ -76,3 +76,24 @@ int xc_sedf_domain_get( *weight = p->weight;return ret; } + +int +xc_sched_sedf_defaults_get ( +xc_interface *xch, +uint32_t cpupool_id, +struct xen_domctl_sched_sedf *sdom) +{ +int rc; +DECLARE_SYSCTL ; + + sysctl.cmd = XEN_SYSCTL_scheduler_op; + sysctl.u.scheduler_op.cpupool_id = cpupool_id; + sysctl.u.scheduler_op.sched_id =XEN_SCHEDULER_SEDF ; + sysctl.u.scheduler_op.cmd = XEN_SYSCTL_SCHEDOP_getdefaults; + + rc =do_sysctl (xch, &sysctl); +if ( rc ==0 ) + *sdom = sysctl.u.scheduler_op.u.defaults.sedf; + +return rc; +}
tools/libxc/xenctrl.h +10 -0
@@ -664,6 +664,9 @@ int xc_sedf_domain_get(xc_interface *xch uint64_t* period, uint64_t *slice, uint64_t *latency, uint16_t *extratime, uint16_t *weight); +int xc_sched_sedf_defaults_get (xc_interface *xch, +uint32_t cpupool_id, +struct xen_domctl_sched_sedf *sdom); int xc_sched_credit_domain_set(xc_interface *xch, uint32_t domid,
@@ -678,12 +681,19 @@ int xc_sched_credit_params_get(xc_interfint xc_sched_credit_params_get (xc_interface *xch,uint32_t cpupool_id,struct xen_sysctl_credit_schedule *schedule); +int xc_sched_credit_defaults_get (xc_interface *xch, +uint32_t cpupool_id, +struct xen_domctl_sched_credit *sdom); +int xc_sched_credit2_domain_set (xc_interface *xch,uint32_t domid,struct xen_domctl_sched_credit2 *sdom);int xc_sched_credit2_domain_get (xc_interface *xch,uint32_t domid, +struct xen_domctl_sched_credit2 *sdom); +int xc_sched_credit2_defaults_get (xc_interface *xch, +uint32_t cpupool_id,struct xen_domctl_sched_credit2 *sdom);int
_______________________________________________
Xen-devel mailing list
[email protected]
http://lists.xen.org/xen-devel
PATCH 1/1 full support of setting scheduler parameters on domain creation
In reply to Juergen GrossObtains default scheduler parameters before modifying any settings specified via domain config.
Corrected an error for setting sedf parameters (setting .period multiple times).
4 files changed, 72 insertions(+), 6 deletions(-) tools/libxl/libxl.h | 2 + tools/libxl/libxl_dom.c | 65 +++++++++++++++++++++++++++++++++++++++++-- tools/libxl/libxl_types.idl | 1 tools/libxl/xl_cmdimpl.c | 10 ++++--
# HG changeset patch
# User Juergen Gross <[email protected]>
# Date 1337677423 -7200
# Node ID 953383741ff44d97587c2e75da79b092523d6e83
# Parent 19aaa30d7fdce2f1b56cb13399d603d955a61fb8 full support of setting scheduler parameters on domain creation
Obtains default scheduler parameters before modifying any settings specified via domain config.
Corrected an error for setting sedf parameters (setting .period multiple times).
tools/libxl/libxl.h +2 -0
@@ -605,6 +605,8 @@ int libxl_primary_console_exec(libxl_ctx/* May be called with info_r == NULL to check for domain's existance */ int libxl_domain_info (libxl_ctx *,libxl_dominfo *info_r,uint32_t domid); +int libxl_sched_set_defaults (libxl_ctx *,uint32_t poolid, +libxl_sched_params *scparams);libxl_dominfo *libxl_list_domain (libxl_ctx *,int *nb_domain);void libxl_dominfo_list_free (libxl_dominfo *list,int nr);libxl_cpupoolinfo *libxl_list_cpupool (libxl_ctx *,int *nb_pool);
tools/libxl/libxl_dom.c +62 -3
79 lines not on this page · raw message
tools/libxl/libxl_types.idl +1 -0
@@ -225,6 +225,7 @@ MemKB = UInt(64, init_val = "LIBXL_MEMKB MemKB = UInt(64, init_val = "LIBXL_MEMKB_DEFAULT") libxl_sched_params = Struct("sched_params",[ + ("sched", libxl_scheduler), ("weight", integer), ("cap", integer), ("tslice_ms", integer),
tools/libxl/xl_cmdimpl.c +7 -3
@@ -628,6 +628,10 @@ static void parse_config_data(const charlibxl_domain_build_info_init_type (b_info, c_info->type);/* the following is the actual config parsing with overriding values in the structures */ +if (libxl_sched_set_defaults (ctx, c_info->poolid, &b_info->sched_params)) { +fprintf (stderr,"Failed to set default scheduling parameters\n" ); +exit (1 ); + }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 ))
@@ -639,11 +643,11 @@ static void parse_config_data(const charif (!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;
_______________________________________________
Xen-devel mailing list
[email protected]
http://lists.xen.org/xen-devel
Re: [PATCH 3 of 3] full support of setting scheduler parameters on domain creation
Quoted 21 lines
# HG changeset patch
# User Juergen Gross <[email protected]>
# Date 1337677423 -7200
# Node ID953383741ff44d97587c2e75da79b092523d6e83
# Parent19aaa30d7fdce2f1b56cb13399d603d955a61fb8full support of setting scheduler parameters on domain creationObtains default scheduler parameters before modifying any settings specified
via domain config.Corrected an error for setting sedf parameters (setting .period multiple
times).Signed-off-by Juergen Gross <[email protected]>diff -r
19aaa30d7fdc-r953383741ff4tools/libxl/libxl.h
tools/libxl/libxl.h Tue May 22 11:03:43 2012 +0200 int libxl_primary_console_exec(libxl_ctx · line 610
Quoted 6 lines
tools/libxl/libxl.h Tue May 22 11:03:43 2012 +0200 renamed from tools/libxl/libxl.h Tue May 22 10:31:30 2012 +0200 +2
-0@@ -605,6 +605,8 @@ int libxl_primary_console_exec(libxl_ctx /* May be called with info_r == NULL to check for domain's existance */ int libxl_domain_info(libxl_ctx*, libxl_dominfo *info_r, uint32_t domid); +int libxl_sched_set_defaults(libxl_ctx*, uint32_t poolid, + libxl_sched_params *scparams);
This interface really makes libxl_sched_params differ from all the other libxl structs (which have a public _init function and an internal setdefaults function). I'm not really sure its justified either, I was under the impression that you'd found that there were useful discriminating values?
If this function was called libxl_sched_init (replacing the autogenerated one) then it might be ok. Although I'm still not really sure what the issue is with having a discriminating value meaning default is, doing that keeps the _init function cheap too.
tools/libxl/libxl.h Tue May 22 11:03:43 2012 +0200
Quoted 13 lines
tools/libxl/libxl.h Tue May 22 11:03:43 2012 +0200 renamed from tools/libxl/libxl.h Tue May 22 10:31:30 2012 +0200 +0
-0int libxl__sched_set_params(libxl__gc *gc, uint32_t domid, libxl_sched_params *scparams){ libxl_ctx *ctx = libxl__gc_owner(gc);tools/libxl/libxl.h Tue May 22 11:03:43 2012 +0200 renamed from tools/libxl/libxl.h Tue May 22 10:31:30 2012 +0200 +1
-3- libxl_scheduler sched; libxl_sched_sedf_domain sedf_info; libxl_sched_credit_domain credit_info; libxl_sched_credit2_domain credit2_info; int ret; - sched = libxl_get_scheduler (ctx); - switch (sched) { + switch (scparams->sched) {
What happens if scparams->sched is not the scheduler used for this domain? Should it either be checked or set somewhere?
Quoted 3 lines
Ian.
Re: [PATCH 3 of 3] full support of setting scheduler parameters on domain creation
Quoted 17 lines · Ian Campbell
Quoted 17 lines
# HG changeset patch
# User Juergen Gross<[email protected]>
# Date 1337677423 -7200
# Node ID953383741ff44d97587c2e75da79b092523d6e83
# Parent19aaa30d7fdce2f1b56cb13399d603d955a61fb8full support of setting scheduler parameters on domain creationObtains default scheduler parameters before modifying any settings specified
via domain config.Corrected an error for setting sedf parameters (setting .period multiple
times).Signed-off-by Juergen Gross<[email protected]>
Quoted 15 lines
tools/libxl/libxl.h Tue May 22 11:03:43 2012 +0200 int libxl_primary_console_exec(libxl_ctx · line 610
Quoted 10 lines
diff -r
19aaa30d7fdc-r953383741ff4tools/libxl/libxl.htools/libxl/libxl.h Tue May 22 11:03:43 2012 +0200 renamed from tools/libxl/libxl.h Tue May 22 10:31:30 2012 +0200 +2
-0@@ -605,6 +605,8 @@ int libxl_primary_console_exec(libxl_ctx /* May be called with info_r == NULL to check for domain's existance */ int libxl_domain_info(libxl_ctx*, libxl_dominfo *info_r, uint32_t domid); +int libxl_sched_set_defaults(libxl_ctx*, uint32_t poolid, + libxl_sched_params *scparams);This interface really makes
libxl_sched_paramsdiffer from all the other libxl structs (which have a public_initfunction and an internal setdefaults function). I'm not really sure its justified either, I was under the impression that you'd found that there were useful discriminating values?
Dario opted for this solution, so I proposed a patch implementing it. I prefer this solution, too, as it isn't exporting scheduler internals to the tools.
Quoted 4 lines
If this function was called
libxl_sched_init(replacing the autogenerated one) then it might be ok. Although I'm still not really sure what the issue is with having a discriminating value meaning default is, doing that keeps the_initfunction cheap too.
Okay, I can rename it.
Quoted 11 lines
Quoted 11 lines
tools/libxl/libxl.h Tue May 22 11:03:43 2012 +0200 renamed from tools/libxl/libxl.h Tue May 22 10:31:30 2012 +0200 +0
-0int libxl__sched_set_params(libxl__gc *gc, uint32_t domid, libxl_sched_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; int ret;
Quoted 5 lines
tools/libxl/libxl.h Tue May 22 11:03:43 2012 +0200
Quoted 3 lines
tools/libxl/libxl.h Tue May 22 11:03:43 2012 +0200 renamed from tools/libxl/libxl.h Tue May 22 10:31:30 2012 +0200 +1
-2- sched = libxl_get_scheduler (ctx); - switch (sched) { + switch (scparams->sched) {What happens if
scparams->schedis not the scheduler used for this domain? Should it either be checked or set somewhere?
The check would be the same as the original setting of scparams->sched. Setting of the scheduler parameters will be rejected by the hypervisor if the scheduler does not match.
Juergen
Signature · 5 lines
Juergen Gross Principal Developer Operating Systems PDG ES&S SWE OS6 Telephone: +49 (0) 89 3222 2967 Fujitsu Technology Solutions e-mail: [email protected] Domagkstr. 28 Internet: ts.fujitsu.com D-80807 Muenchen Company details: ts.fujitsu.com/imprint.html
Re: [PATCH 3 of 3] full support of setting scheduler parameters on domain creation
Quoted 34 lines · Juergen Gross
Quoted 17 lines · Ian Campbell
Quoted 17 lines
# HG changeset patch
# User Juergen Gross<[email protected]>
# Date 1337677423 -7200
# Node ID953383741ff44d97587c2e75da79b092523d6e83
# Parent19aaa30d7fdce2f1b56cb13399d603d955a61fb8full support of setting scheduler parameters on domain creationObtains default scheduler parameters before modifying any settings specified
via domain config.Corrected an error for setting sedf parameters (setting .period multiple
times).Signed-off-by Juergen Gross<[email protected]>Quoted 15 lines
tools/libxl/libxl.h Tue May 22 11:03:43 2012 +0200 int libxl_primary_console_exec(libxl_ctx · line 610
Quoted 10 lines
diff -r
19aaa30d7fdc-r953383741ff4tools/libxl/libxl.htools/libxl/libxl.h Tue May 22 11:03:43 2012 +0200 renamed from tools/libxl/libxl.h Tue May 22 10:31:30 2012 +0200 +2
-0@@ -605,6 +605,8 @@ int libxl_primary_console_exec(libxl_ctx /* May be called with info_r == NULL to check for domain's existance */ int libxl_domain_info(libxl_ctx*, libxl_dominfo *info_r, uint32_t domid); +int libxl_sched_set_defaults(libxl_ctx*, uint32_t poolid, + libxl_sched_params *scparams);This interface really makes
libxl_sched_paramsdiffer from all the other libxl structs (which have a public_initfunction and an internal setdefaults function). I'm not really sure its justified either, I was under the impression that you'd found that there were useful discriminating values?
Quoted 3 lines
Dario opted for this solution, so I proposed a patch implementing it. I prefer this solution, too, as it isn't exporting scheduler internals to the tools.
I don't think "-1 is not a valid weight" is really "exporting scheduler internals".
Anyway, I am far more concerned that the libxl API is useful to users than I am about the API between libxl/libxc and the hypervisor (which is not set in stone and can be fixed etc). The libxl API is the one we want to expose and keep stable going forward etc.
Quoted 32 lines
Quoted 5 lines
If this function was called
libxl_sched_init(replacing the autogenerated one) then it might be ok. Although I'm still not really sure what the issue is with having a discriminating value meaning default is, doing that keeps the_initfunction cheap too.Okay, I can rename it.
Quoted 11 lines
Quoted 11 lines
tools/libxl/libxl.h Tue May 22 11:03:43 2012 +0200 renamed from tools/libxl/libxl.h Tue May 22 10:31:30 2012 +0200 +0
-0int libxl__sched_set_params(libxl__gc *gc, uint32_t domid, libxl_sched_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; int ret;Quoted 5 lines
tools/libxl/libxl.h Tue May 22 11:03:43 2012 +0200
Quoted 3 lines
tools/libxl/libxl.h Tue May 22 11:03:43 2012 +0200 renamed from tools/libxl/libxl.h Tue May 22 10:31:30 2012 +0200 +1
-2- sched = libxl_get_scheduler (ctx); - switch (sched) { + switch (scparams->sched) {What happens if
scparams->schedis not the scheduler used for this domain? Should it either be checked or set somewhere?The check would be the same as the original setting of
scparams->sched. Setting of the scheduler parameters will be rejected by the hypervisor if the scheduler does not match.Juergen
Re: [PATCH 3 of 3] full support of setting scheduler parameters on domain creation
In reply to Juergen GrossQuoted 10 lines · Juergen Gross
Quoted 5 lines
This interface really makes
libxl_sched_paramsdiffer from all the other libxl structs (which have a public_initfunction and an internal setdefaults function). I'm not really sure its justified either, I was under the impression that you'd found that there were useful discriminating values?Dario opted for this solution, so I proposed a patch implementing it. I prefer this solution, too, as it isn't exporting scheduler internals to the tools.
Yep. I agree with Ian that having two different procedures for the first as compared to the subsequent operations on the scheduling parameters is bad, but still, as a matter of my personal taste, I'd prefer no to have things belonging to the hypervisor/scheduler replicated in the toolstack, although they're just simple default values. It's still something you need to always remember to check for consistency, or bad things will happen! :-/
However, Ian's approach seems clean and nice as well, and I'm not really sure which one I like most, so don't count me when deciding, I'm fine with both.
Quoted 13 lines
Quoted 13 lines
Quoted 13 lines
int libxl__sched_set_params(libxl__gc *gc,
uint32_tdomid,libxl_sched_params*scparams){ libxl_ctx *ctx = libxl__gc_owner(gc);tools/libxl/libxl_dom.c +1
-3-libxl_scheduler sched;libxl_sched_sedf_domain sedf_info;libxl_sched_credit_domain credit_info;libxl_sched_credit2_domain credit2_info;int ret; - sched =libxl_get_scheduler (ctx); -switch (sched) { +switch (scparams->sched) {
Quoted 7 lines
Quoted 2 lines
What happens if
scparams->schedis not the scheduler used for this domain? Should it either be checked or set somewhere?The check would be the same as the original setting of
scparams->sched. Setting of the scheduler parameters will be rejected by the hypervisor if the scheduler does not match.
I was thinking this should go through finding out what domid's cpupool is and then checking that scheduler, as it is being done somewhere else... Isn't this the case?
Regards,
Dario
Signature · 4 lines
<<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)
_______________________________________________
Xen-devel mailing list
[email protected]
http://lists.xen.org/xen-devel