Add subcommand 'xl mem-max', can be used to set static max memory
Signed-off-by: Yu Zhiguo <yuzg@xxxxxxxxxxxxxx>
diff -r d77a88f938c6 -r ee4820366b13 tools/libxl/libxl.c
--- a/tools/libxl/libxl.c Tue May 11 14:05:28 2010 +0100
+++ b/tools/libxl/libxl.c Wed May 12 22:11:43 2010 +0800
@@ -2346,6 +2346,39 @@
return 0;
}
+int libxl_domain_setmaxmem(struct libxl_ctx *ctx, uint32_t domid, uint32_t
max_memkb)
+{
+ char *mem, *endptr;
+ uint32_t memorykb;
+ char *dompath = libxl_xs_get_dompath(ctx, domid);
+ int rc;
+
+ mem = libxl_xs_read(ctx, XBT_NULL, libxl_sprintf(ctx, "%s/memory/target",
dompath));
+ if (!mem) {
+ XL_LOG_ERRNO(ctx, XL_LOG_ERROR, "cannot get memory info from
%s/memory/target\n", dompath);
+ return 1;
+ }
+ memorykb = strtoul(mem, &endptr, 10);
+ if (*endptr != '\0') {
+ XL_LOG_ERRNO(ctx, XL_LOG_ERROR, "invalid memory %s from
%s/memory/target\n", mem, dompath);
+ return 1;
+ }
+
+ if (max_memkb < memorykb) {
+ XL_LOG_ERRNO(ctx, XL_LOG_ERROR, "memory_static_max must be greater
than or or equal to memory_dynamic_max\n");
+ return 1;
+ }
+
+ rc = xc_domain_setmaxmem(ctx->xch, domid, max_memkb);
+ if (rc != 0)
+ return rc;
+
+ if (domid != 0)
+ libxl_xs_write(ctx, XBT_NULL, libxl_sprintf(ctx,
"%s/memory/static-max", dompath), "%lu", max_memkb);
+
+ return rc;
+}
+
int libxl_set_memory_target(struct libxl_ctx *ctx, uint32_t domid, uint32_t
target_memkb)
{
int rc = 0;
diff -r d77a88f938c6 -r ee4820366b13 tools/libxl/libxl.h
--- a/tools/libxl/libxl.h Tue May 11 14:05:28 2010 +0100
+++ b/tools/libxl/libxl.h Wed May 12 22:11:43 2010 +0800
@@ -339,6 +339,7 @@
int libxl_domain_pause(struct libxl_ctx *ctx, uint32_t domid);
int libxl_domain_unpause(struct libxl_ctx *ctx, uint32_t domid);
+int libxl_domain_setmaxmem(struct libxl_ctx *ctx, uint32_t domid, uint32_t
target_memkb);
int libxl_set_memory_target(struct libxl_ctx *ctx, uint32_t domid, uint32_t
target_memkb);
int libxl_console_attach(struct libxl_ctx *ctx, uint32_t domid, int cons_num);
diff -r d77a88f938c6 -r ee4820366b13 tools/libxl/xl_cmdimpl.c
--- a/tools/libxl/xl_cmdimpl.c Tue May 11 14:05:28 2010 +0100
+++ b/tools/libxl/xl_cmdimpl.c Wed May 12 22:11:43 2010 +0800
@@ -1187,6 +1187,59 @@
}
}
+int set_memory_max(char *p, char *mem)
+{
+ char *endptr;
+ uint32_t memorykb;
+ int rc;
+
+ find_domain(p);
+
+ memorykb = strtoul(mem, &endptr, 10);
+ if (*endptr != '\0') {
+ fprintf(stderr, "invalid memory size: %s\n", mem);
+ exit(3);
+ }
+
+ rc = libxl_domain_setmaxmem(&ctx, domid, memorykb);
+
+ return rc;
+}
+
+int main_memmax(int argc, char **argv)
+{
+ int opt = 0;
+ char *p = NULL, *mem;
+ int rc;
+
+ while ((opt = getopt(argc, argv, "h")) != -1) {
+ switch (opt) {
+ case 'h':
+ help("mem-max");
+ exit(0);
+ default:
+ fprintf(stderr, "option not supported\n");
+ break;
+ }
+ }
+ if (optind >= argc - 1) {
+ help("mem-max");
+ exit(2);
+ }
+
+ p = argv[optind];
+ mem = argv[optind + 1];
+
+ rc = set_memory_max(p, mem);
+ if (rc) {
+ fprintf(stderr, "cannot set domid %d static max memory to : %s\n",
domid, mem);
+ exit(1);
+ }
+
+ printf("setting domid %d static max memory to : %s\n", domid, mem);
+ exit(0);
+}
+
void set_memory_target(char *p, char *mem)
{
char *endptr;
diff -r d77a88f938c6 -r ee4820366b13 tools/libxl/xl_cmdimpl.h
--- a/tools/libxl/xl_cmdimpl.h Tue May 11 14:05:28 2010 +0100
+++ b/tools/libxl/xl_cmdimpl.h Wed May 12 22:11:43 2010 +0800
@@ -33,6 +33,7 @@
int main_button_press(int argc, char **argv);
int main_vcpupin(int argc, char **argv);
int main_vcpuset(int argc, char **argv);
+int main_memmax(int argc, char **argv);
int main_memset(int argc, char **argv);
int main_sched_credit(int argc, char **argv);
int main_domid(int argc, char **argv);
diff -r d77a88f938c6 -r ee4820366b13 tools/libxl/xl_cmdtable.c
--- a/tools/libxl/xl_cmdtable.c Tue May 11 14:05:28 2010 +0100
+++ b/tools/libxl/xl_cmdtable.c Wed May 12 22:11:43 2010 +0800
@@ -108,6 +108,11 @@
"Eject a cdrom from a guest's cd drive",
"<Domain> <VirtualDevice>",
},
+ { "mem-max",
+ &main_memmax,
+ "Set the maximum amount reservation for a domain",
+ "<Domain> <MemKB>",
+ },
{ "mem-set",
&main_memset,
"Set the current memory usage for a domain",
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel
|