[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Xen-devel] [PATCH] libxl: document memory parameters and behaviour



commit a6b0f1e47447b7da2e838f9f68caf2019b177c36
Author: Ian Jackson <ian.jackson@xxxxxxxxxxxxx>
Date:   Wed Sep 14 10:34:54 2011 +0100

    libxl: document memory parameters and behaviour
    
    Introduce a new comment in libxl.h, describing the various guest
    memory usage parameters.
    
    Signed-off-by: Ian Jackson <ian.jackson@xxxxxxxxxxxxx>

diff --git a/tools/libxl/libxl.h b/tools/libxl/libxl.h
index d146575..6999d54 100644
--- a/tools/libxl/libxl.h
+++ b/tools/libxl/libxl.h
@@ -349,8 +349,62 @@ int libxl_domain_unpause(libxl_ctx *ctx, uint32_t domid);
 
 int libxl_domain_core_dump(libxl_ctx *ctx, uint32_t domid, const char 
*filename);
 
+/*
+ * Domains have three memory parameters:
+ *
+ *   * Target ("target").  This is the request from the toolstack to
+ *     the guest's balloon system.  With a cooperative guest, the
+ *     guest will adjust its memory usage towards this target (by
+ *     requesting more memory from Xen, or returning memory to Xen, as
+ *     applicable).
+ *
+ *   * Limit ("maxmem" while the domain is running; set to the same as
+ *     "target_memkb" on creation).  Xen will not allow the guest to
+ *     increase its allocation (by requesting more memory from Xen) if
+ *     the guest would then be using more memory than this.  However,
+ *     getting memory back from the guest requires the cooperation of
+ *     the guest, so if the limit has previously been reduced below
+ *     the guest's current usage, the guest's actual usage may remain
+ *     above the limit.
+ *
+ *   * Boot-time memory maximum (the "max_memkb" domain creation
+ *     parameter).  This is the absolute maximum amount of memory the
+ *     domain will ever be able to allocate.  (In theory a balloon
+ *     driver capable of memory hotplug might be able to surpass this
+ *     limit but currently the toolstack does not support this.)
+ *
+ * Domains actually use a bit more memory than they see directly; all
+ * of these parameters in the libxl API are specified in terms of
+ * guest-visible memory.  The actual guest memory usage will be
+ * somewhat higher because some is needed for infrastructure purposes
+ * related to the domain (Xen heap entries, video memory offered to
+ * hvm guests, memory for a device model stub domain, etc.).  The
+ * amount of memory which would actually be necessary for a particular
+ * guest can be discovered with the libxl_domain_need_memory call.
+ *
+ * Note that when a guest's target is changed, while in principle the
+ * guest's actual memory usage is supposed to eventually reach the new
+ * target, this may not ever happen.  The guest may not have a
+ * suitable balloon driver, or it may not be sufficiently cooperative
+ * (eg, the guest admin may have arranged for it not to honour
+ * requests to use less memory), or it may be under severe memory
+ * pressure and not able to comply.  Even requests to increase memory
+ * usage may not be honoured, for example because the increase would
+ * take the guest beyond a compiled-in or boot-time limit.
+ *
+ * It is not proper for the limit to be less than the target.
+ *
+ * When creating an HVM guest, if target is less than max_memkb,
+ * populate-on-demand is used.  In this situation the guest must have
+ * a balloon driver which must reclaim enough p-o-d guest memory
+ * quickly enough, or the guest will crash during boot.
+ */
+
 int libxl_domain_setmaxmem(libxl_ctx *ctx, uint32_t domid, uint32_t 
target_memkb);
 int libxl_set_memory_target(libxl_ctx *ctx, uint32_t domid, int32_t 
target_memkb, int relative, int enforce);
+  /* if enforce is set, sets the target too.  NB that there is a bug here,
+   * in that if you reduce the target with enforce=1 and then increase it
+   * again with enforce=0, the limit will now be less than the target. */
 int libxl_get_memory_target(libxl_ctx *ctx, uint32_t domid, uint32_t 
*out_target);
 /* how much free memory in the system a domain needs to be built */
 int libxl_domain_need_memory(libxl_ctx *ctx, libxl_domain_build_info *b_info,

_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.