[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH 2/3] credit2: libxl related changes to add support for runqueue per cpupool.
On 12/09/17 02:45, anshulmakkar wrote: > 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); You are modifying an exported libxl function. This requires compatibility hooks (look e.g. how this is handled in libxl.h for functions like libxl_get_memory_target) > 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; Don't you need some input parameter validation here? > + } > + else > + xc_sched_param.u.sched_credit2.runq = > LIBXL_CREDIT2_RUNQUEUE_DEFAULT; So you are passing the LIBXL defines down to the hypervisor expecting they match. I think this is a major layering violation. > > - 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), You need a LIBXL_HAVE_* define in libxl.h to indicate presence of the new struct member. Juergen _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx https://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |