[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH 09/12] tools/xl: add support for setting generic per-cpupool parameters
Add a new xl command "cpupool-set-parameters" and cpupool config file support for setting per-cpupool generic parameters. Signed-off-by: Juergen Gross <jgross@xxxxxxxx> --- docs/man/xl.pod.1.in | 6 ++++++ docs/man/xlcpupool.cfg.pod.5 | 12 ++++++++++++ tools/libxl/libxl.h | 8 ++++++++ tools/libxl/libxl_cpupool.c | 16 ++++++++++++++++ tools/xl/xl.h | 1 + tools/xl/xl_cmdtable.c | 5 +++++ tools/xl/xl_cpupool.c | 39 +++++++++++++++++++++++++++++++++++++++ 7 files changed, 87 insertions(+) diff --git a/docs/man/xl.pod.1.in b/docs/man/xl.pod.1.in index b74764dcd3..a2ddc4b2e0 100644 --- a/docs/man/xl.pod.1.in +++ b/docs/man/xl.pod.1.in @@ -1319,6 +1319,12 @@ Domain-0 can't be moved to another cpu-pool. Splits up the machine into one cpu-pool per numa node. +=item B<cpupool-set-parameters> I<cpu-pool> I<params> + +Sets generic parameters I<params> for I<cpu-pool>. + +See the L<xlcpupool.cfg(5)> manpage for supported parameters. + =back =head1 VIRTUAL DEVICE COMMANDS diff --git a/docs/man/xlcpupool.cfg.pod.5 b/docs/man/xlcpupool.cfg.pod.5 index 792cf4f425..4f92a68209 100644 --- a/docs/man/xlcpupool.cfg.pod.5 +++ b/docs/man/xlcpupool.cfg.pod.5 @@ -113,6 +113,18 @@ of cpus 10,11,12,13 will be memeber of the cpupool. If neither B<nodes> nor B<cpus> are specified only the first free cpu found will be allocated in the new cpupool. +=item B<parameters="PARAMS"> + +Specifies generic parameters for the cpupool. C<PARAMS> is a list of +parameter settings in the form of "name[=value]" separated by blanks. +The following parameter settings are supported: + +=over 4 + +NONE + +=back + =back =head1 FILES diff --git a/tools/libxl/libxl.h b/tools/libxl/libxl.h index 2cfc1b08ad..bd26d9fd4a 100644 --- a/tools/libxl/libxl.h +++ b/tools/libxl/libxl.h @@ -1164,6 +1164,13 @@ void libxl_mac_copy(libxl_ctx *ctx, libxl_mac *dst, const libxl_mac *src); */ #define LIBXL_HAVE_PVCALLS 1 +/* + * LIBXL_HAVE_CPUPOOL_SET_PARAMETERS + * + * If this is defined setting per-cpupool parameters is supported. + */ +#define LIBXL_HAVE_CPUPOOL_SET_PARAMETERS 1 + typedef char **libxl_string_list; void libxl_string_list_dispose(libxl_string_list *sl); int libxl_string_list_length(const libxl_string_list *sl); @@ -2352,6 +2359,7 @@ int libxl_cpupool_cpuremove_cpumap(libxl_ctx *ctx, uint32_t poolid, const libxl_bitmap *cpumap); int libxl_cpupool_movedomain(libxl_ctx *ctx, uint32_t poolid, uint32_t domid); int libxl_cpupool_info(libxl_ctx *ctx, libxl_cpupoolinfo *info, uint32_t poolid); +int libxl_cpupool_set_parameters(libxl_ctx *ctx, uint32_t poolid, char *params); int libxl_domid_valid_guest(uint32_t domid); diff --git a/tools/libxl/libxl_cpupool.c b/tools/libxl/libxl_cpupool.c index 85b06882db..e2db3fd5cb 100644 --- a/tools/libxl/libxl_cpupool.c +++ b/tools/libxl/libxl_cpupool.c @@ -443,6 +443,22 @@ int libxl_cpupool_movedomain(libxl_ctx *ctx, uint32_t poolid, uint32_t domid) return 0; } +int libxl_cpupool_set_parameters(libxl_ctx *ctx, uint32_t poolid, char *params) +{ + GC_INIT(ctx); + int rc; + + rc = xc_set_cpupool_parameters(ctx->xch, poolid, params); + if (rc) { + LOGEV(ERROR, rc, "Error setting cpupool parameters"); + GC_FREE; + return ERROR_FAIL; + } + + GC_FREE; + return 0; +} + /* * Local variables: * mode: C diff --git a/tools/xl/xl.h b/tools/xl/xl.h index cf4202bc89..a51acc4256 100644 --- a/tools/xl/xl.h +++ b/tools/xl/xl.h @@ -201,6 +201,7 @@ int main_cpupoolcpuadd(int argc, char **argv); int main_cpupoolcpuremove(int argc, char **argv); int main_cpupoolmigrate(int argc, char **argv); int main_cpupoolnumasplit(int argc, char **argv); +int main_cpupoolsetparameters(int argc, char **argv); int main_getenforce(int argc, char **argv); int main_setenforce(int argc, char **argv); int main_loadpolicy(int argc, char **argv); diff --git a/tools/xl/xl_cmdtable.c b/tools/xl/xl_cmdtable.c index 89716badcb..3a469dacc3 100644 --- a/tools/xl/xl_cmdtable.c +++ b/tools/xl/xl_cmdtable.c @@ -530,6 +530,11 @@ struct cmd_spec cmd_table[] = { "Splits up the machine into one CPU pool per NUMA node", "", }, + { "cpupool-set-parameters", + &main_cpupoolsetparameters, 0, 1, + "Sets generic parameters for a CPU pool", + "<CPU Pool> <Params>", + }, { "getenforce", &main_getenforce, 0, 0, "Returns the current enforcing mode of the Flask Xen security module", diff --git a/tools/xl/xl_cpupool.c b/tools/xl/xl_cpupool.c index 273811b663..9e0fce1961 100644 --- a/tools/xl/xl_cpupool.c +++ b/tools/xl/xl_cpupool.c @@ -41,6 +41,7 @@ int main_cpupoolcreate(int argc, char **argv) XLU_Config *config; const char *buf; char *name = NULL; + char *params = NULL; uint32_t poolid; libxl_scheduler sched = 0; XLU_ConfigList *cpus; @@ -146,6 +147,9 @@ int main_cpupoolcreate(int argc, char **argv) sched = rc; } + if (!xlu_cfg_get_string (config, "parameters", &buf, 0)) + params = strdup(buf); + if (libxl_get_freecpus(ctx, &freemap)) { fprintf(stderr, "libxl_get_freecpus failed\n"); goto out_cfg; @@ -213,6 +217,8 @@ int main_cpupoolcreate(int argc, char **argv) printf("cpupool name: %s\n", name); printf("scheduler: %s\n", libxl_scheduler_to_string(sched)); printf("number of cpus: %d\n", n_cpus); + if (params) + printf("parameters: %s\n", params); if (!dryrun_only) { poolid = LIBXL_CPUPOOL_POOLID_ANY; @@ -220,6 +226,10 @@ int main_cpupoolcreate(int argc, char **argv) fprintf(stderr, "error on creating cpupool\n"); goto out_cfg; } + if (params) { + if (libxl_cpupool_set_parameters(ctx, poolid, params)) + fprintf(stderr, "error setting parameters, ignored\n"); + } } /* We made it! */ rc = EXIT_SUCCESS; @@ -615,6 +625,35 @@ out: return rc; } +int main_cpupoolsetparameters(int argc, char **argv) +{ + int opt; + const char *pool; + char *params; + uint32_t poolid; + + SWITCH_FOREACH_OPT(opt, "", NULL, "cpupool-set-parameters", 2) { + /* No options */ + } + + pool = argv[optind++]; + if (libxl_cpupool_qualifier_to_cpupoolid(ctx, pool, &poolid, NULL) || + !libxl_cpupoolid_is_valid(ctx, poolid)) { + fprintf(stderr, "unknown cpupool '%s'\n", pool); + return EXIT_FAILURE; + } + + params = argv[optind]; + + if (libxl_cpupool_set_parameters(ctx, poolid, params)) { + fprintf(stderr, "cannot set parameters: %s\n", params); + fprintf(stderr, "Use \"xl dmesg\" to look for possible reason.\n"); + return EXIT_FAILURE; + } + + return EXIT_SUCCESS; +} + /* * Local variables: * mode: C -- 2.16.4 _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxxx https://lists.xenproject.org/mailman/listinfo/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |