[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH 2/3] credit2: libxl related changes to add support for runqueue per cpupool.
Introduces scheduler specific parameter at libxl level which are passed on to libxc. eg runqueue for credit2 Signed-off-by: Anshul Makkar <anshulmakkar@xxxxxxxxx> --- tools/libxl/libxl.h | 2 +- tools/libxl/libxl_cpupool.c | 15 +++++++++++++-- tools/libxl/libxl_types.idl | 46 ++++++++++++++++++++++++++++++++++----------- tools/xl/xl_cpupool.c | 16 ++++++++++++++-- 4 files changed, 63 insertions(+), 16 deletions(-) diff --git a/tools/libxl/libxl.h b/tools/libxl/libxl.h index 91408b4..6617c64 100644 --- a/tools/libxl/libxl.h +++ b/tools/libxl/libxl.h @@ -2150,7 +2150,7 @@ int libxl_get_freecpus(libxl_ctx *ctx, libxl_bitmap *cpumap); int libxl_cpupool_create(libxl_ctx *ctx, const char *name, libxl_scheduler sched, libxl_bitmap cpumap, libxl_uuid *uuid, - uint32_t *poolid); + uint32_t *poolid, const libxl_scheduler_params *sched_param); int libxl_cpupool_destroy(libxl_ctx *ctx, uint32_t poolid); int libxl_cpupool_rename(libxl_ctx *ctx, const char *name, uint32_t poolid); int libxl_cpupool_cpuadd(libxl_ctx *ctx, uint32_t poolid, int cpu); diff --git a/tools/libxl/libxl_cpupool.c b/tools/libxl/libxl_cpupool.c index 85b0688..e3ce7b3 100644 --- a/tools/libxl/libxl_cpupool.c +++ b/tools/libxl/libxl_cpupool.c @@ -130,7 +130,7 @@ int libxl_get_freecpus(libxl_ctx *ctx, libxl_bitmap *cpumap) int libxl_cpupool_create(libxl_ctx *ctx, const char *name, libxl_scheduler sched, libxl_bitmap cpumap, libxl_uuid *uuid, - uint32_t *poolid) + uint32_t *poolid, const libxl_scheduler_params *sched_params) { GC_INIT(ctx); int rc; @@ -138,6 +138,7 @@ int libxl_cpupool_create(libxl_ctx *ctx, const char *name, xs_transaction_t t; char *uuid_string; uint32_t xcpoolid; + xc_schedparam_t xc_sched_param; /* Accept '0' as 'any poolid' for backwards compatibility */ if ( *poolid == LIBXL_CPUPOOL_POOLID_ANY @@ -151,8 +152,18 @@ int libxl_cpupool_create(libxl_ctx *ctx, const char *name, GC_FREE; return ERROR_NOMEM; } + if (sched_params) + { + xc_sched_param.u.sched_credit2.ratelimit_us = + sched_params->u.credit2.ratelimit_us; + xc_sched_param.u.sched_credit2.runq = sched_params->u.credit2.runqueue; + xc_sched_param.u.sched_credit.tslice_ms = sched_params->u.credit.tslice_ms; + xc_sched_param.u.sched_credit.ratelimit_us = sched_params->u.credit.ratelimit_us; + } + else + xc_sched_param.u.sched_credit2.runq = LIBXL_CREDIT2_RUNQUEUE_DEFAULT; - rc = xc_cpupool_create(ctx->xch, &xcpoolid, sched); + rc = xc_cpupool_create(ctx->xch, &xcpoolid, sched, &xc_sched_param); if (rc) { LOGEV(ERROR, rc, "Could not create cpupool"); GC_FREE; diff --git a/tools/libxl/libxl_types.idl b/tools/libxl/libxl_types.idl index 173d70a..f25429d 100644 --- a/tools/libxl/libxl_types.idl +++ b/tools/libxl/libxl_types.idl @@ -194,6 +194,16 @@ libxl_scheduler = Enumeration("scheduler", [ (9, "null"), ]) +# consistent with sched_credit2.c +libxl_credit2_runqueue = Enumeration("credit2_runqueue", [ + (0, "CPU"), + (1, "CORE"), + (2, "SOCKET"), + (3, "NODE"), + (4, "ALL"), + (5, "DEFAULT"), + ]) + # Consistent with SHUTDOWN_* in sched.h (apart from UNKNOWN) libxl_shutdown_reason = Enumeration("shutdown_reason", [ (-1, "unknown"), @@ -326,15 +336,38 @@ libxl_dominfo = Struct("dominfo",[ ("domain_type", libxl_domain_type), ], dir=DIR_OUT) +libxl_sched_credit_params = Struct("sched_credit_params", [ + ("tslice_ms", integer), + ("ratelimit_us", integer), + ], dispose_fn=None) + +libxl_sched_credit2_params = Struct("sched_credit2_params", [ + ("ratelimit_us", integer), + ("runqueue", libxl_credit2_runqueue), + ], dispose_fn=None) + +libxl_scheduler_params = Struct("scheduler_params", [ + ("u", KeyedUnion(None,libxl_scheduler_tpye "scheduler_type", + [("credit2", libxl_sched_credit2_params), + ("credit", libxl_sched_credit_params), + ("null", None), + ("arinc653", None), + ("rtds", None), + ("unknown", None), + ("sedf", None), + ])), + ]) + libxl_cpupoolinfo = Struct("cpupoolinfo", [ ("poolid", uint32), ("pool_name", string), ("sched", libxl_scheduler), ("n_dom", uint32), - ("cpumap", libxl_bitmap) + ("cpumap", libxl_bitmap), + ("sched_param", libxl_scheduler_params), ], dir=DIR_OUT) -libxl_channelinfo = Struct("channelinfo", [ +ibxl_channelinfo = Struct("channelinfo", [ ("backend", string), ("backend_id", uint32), ("frontend", string), @@ -910,15 +943,6 @@ libxl_pcitopology = Struct("pcitopology", [ ("node", uint32), ], dir=DIR_OUT) -libxl_sched_credit_params = Struct("sched_credit_params", [ - ("tslice_ms", integer), - ("ratelimit_us", integer), - ], dispose_fn=None) - -libxl_sched_credit2_params = Struct("sched_credit2_params", [ - ("ratelimit_us", integer), - ], dispose_fn=None) - libxl_domain_remus_info = Struct("domain_remus_info",[ ("interval", integer), ("allow_unsafe", libxl_defbool), diff --git a/tools/xl/xl_cpupool.c b/tools/xl/xl_cpupool.c index 273811b..dc419eb 100644 --- a/tools/xl/xl_cpupool.c +++ b/tools/xl/xl_cpupool.c @@ -43,6 +43,7 @@ int main_cpupoolcreate(int argc, char **argv) char *name = NULL; uint32_t poolid; libxl_scheduler sched = 0; + libxl_scheduler_params sched_params; XLU_ConfigList *cpus; XLU_ConfigList *nodes; int n_cpus, n_nodes, i, n; @@ -207,16 +208,27 @@ int main_cpupoolcreate(int argc, char **argv) } else n_cpus = 0; + sched_params.u.credit2.runqueue = LIBXL_CREDIT2_RUNQUEUE_CORE; + if (!xlu_cfg_get_string (config, "runqueue", &buf, 0) && + sched == LIBXL_SCHEDULER_CREDIT2) { + if ((libxl_credit2_runqueue_from_string(buf, &sched_params.u.credit2.runqueue)) < 0 ) { + fprintf(stderr, "Unknown runqueue option\n"); + sched_params.u.credit2.runqueue = LIBXL_CREDIT2_RUNQUEUE_CORE; /*default CORE */ + } + } + libxl_uuid_generate(&uuid); printf("Using config file \"%s\"\n", config_src); printf("cpupool name: %s\n", name); printf("scheduler: %s\n", libxl_scheduler_to_string(sched)); + if (sched == LIBXL_SCHEDULER_CREDIT2) + printf(" runq: %s\n", libxl_credit2_runqueue_to_string(sched_params.u.credit2.runqueue)); printf("number of cpus: %d\n", n_cpus); if (!dryrun_only) { poolid = LIBXL_CPUPOOL_POOLID_ANY; - if (libxl_cpupool_create(ctx, name, sched, cpumap, &uuid, &poolid)) { + if (libxl_cpupool_create(ctx, name, sched, cpumap, &uuid, &poolid, &sched_params)) { fprintf(stderr, "error on creating cpupool\n"); goto out_cfg; } @@ -587,7 +599,7 @@ int main_cpupoolnumasplit(int argc, char **argv) xasprintf(&name, "Pool-node%d", node); libxl_uuid_generate(&uuid); poolid = 0; - if (libxl_cpupool_create(ctx, name, sched, cpumap, &uuid, &poolid)) { + if (libxl_cpupool_create(ctx, name, sched, cpumap, &uuid, &poolid, NULL)) { fprintf(stderr, "error on creating cpupool\n"); goto out; } -- 2.7.4 _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx https://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |