aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--docs/man/xl.conf.pod.52
-rw-r--r--docs/man/xl.pod.18
-rw-r--r--tools/libxl/libxl.c4
-rw-r--r--tools/libxl/xl_cmdimpl.c45
4 files changed, 27 insertions, 32 deletions
diff --git a/docs/man/xl.conf.pod.5 b/docs/man/xl.conf.pod.5
index c4072aa7e4..1229c8aedb 100644
--- a/docs/man/xl.conf.pod.5
+++ b/docs/man/xl.conf.pod.5
@@ -126,6 +126,8 @@ quickly and the amount of free memory (which C<xl info> can show) is
stale the moment it is printed. When claim is enabled a reservation for
the amount of memory (see 'memory' in xl.conf(5)) is set, which is then
reduced as the domain's memory is populated and eventually reaches zero.
+The free memory in C<xl info> is the combination of the hypervisor's
+free heap memory minus the outstanding claims value.
If the reservation cannot be meet the guest creation fails immediately
instead of taking seconds/minutes (depending on the size of the guest)
diff --git a/docs/man/xl.pod.1 b/docs/man/xl.pod.1
index 01ecc83433..57c6a79174 100644
--- a/docs/man/xl.pod.1
+++ b/docs/man/xl.pod.1
@@ -737,7 +737,8 @@ the feature bits returned by the cpuid command on x86 platforms.
=item B<free_memory>
-Available memory (in MB) not allocated to Xen, or any other domains.
+Available memory (in MB) not allocated to Xen, or any other domains, or
+claimed for domains.
=item B<outstanding_claims>
@@ -746,7 +747,10 @@ amount of pages is set and also a global value is incremented. This
global value (outstanding_claims) is then reduced as the domain's memory
is populated and eventually reaches zero. Most of the time the value will
be zero, but if you are launching multiple guests, and B<claim_mode> is
-enabled, this value can increase/decrease.
+enabled, this value can increase/decrease. Note that the value also
+affects the B<free_memory> - as it will reflect the free memory
+in the hypervisor minus the outstanding pages claimed for guests.
+See xl I<info> B<claims> parameter for detailed listing.
=item B<xen_caps>
diff --git a/tools/libxl/libxl.c b/tools/libxl/libxl.c
index c9905e319b..03a9782de1 100644
--- a/tools/libxl/libxl.c
+++ b/tools/libxl/libxl.c
@@ -4068,8 +4068,8 @@ uint64_t libxl_get_claiminfo(libxl_ctx *ctx)
"xc_domain_get_outstanding_pages failed.");
return ERROR_FAIL;
}
- /* In MB */
- return (l >> 8);
+ /* In pages */
+ return l;
}
const libxl_version_info* libxl_get_version_info(libxl_ctx *ctx)
diff --git a/tools/libxl/xl_cmdimpl.c b/tools/libxl/xl_cmdimpl.c
index 09b0f41457..98ecf67da9 100644
--- a/tools/libxl/xl_cmdimpl.c
+++ b/tools/libxl/xl_cmdimpl.c
@@ -4575,12 +4575,21 @@ static void output_physinfo(void)
unsigned int i;
libxl_bitmap cpumap;
int n = 0;
+ long claims = 0;
if (libxl_get_physinfo(ctx, &info) != 0) {
fprintf(stderr, "libxl_physinfo failed.\n");
return;
}
-
+ /*
+ * Don't bother checking "claim_mode" as user might have turned it off
+ * and we have outstanding claims.
+ */
+ if ((claims = libxl_get_claiminfo(ctx)) < 0){
+ fprintf(stderr, "libxl_get_claiminfo failed. errno: %d (%s)\n",
+ errno, strerror(errno));
+ return;
+ }
printf("nr_cpus : %d\n", info.nr_cpus);
printf("max_cpu_id : %d\n", info.max_cpu_id);
printf("nr_nodes : %d\n", info.nr_nodes);
@@ -4600,10 +4609,16 @@ static void output_physinfo(void)
if (vinfo) {
i = (1 << 20) / vinfo->pagesize;
printf("total_memory : %"PRIu64"\n", info.total_pages / i);
- printf("free_memory : %"PRIu64"\n", info.free_pages / i);
+ printf("free_memory : %"PRIu64"\n", (info.free_pages - claims) / i);
printf("sharing_freed_memory : %"PRIu64"\n", info.sharing_freed_pages / i);
printf("sharing_used_memory : %"PRIu64"\n", info.sharing_used_frames / i);
}
+ /*
+ * Only if enabled (claim_mode=1) or there are outstanding claims.
+ */
+ if (libxl_defbool_val(claim_mode) || claims)
+ printf("outstanding_claims : %ld\n", claims / i);
+
if (!libxl_get_freecpus(ctx, &cpumap)) {
libxl_for_each_bit(i, cpumap)
if (libxl_bitmap_test(&cpumap, i))
@@ -4611,7 +4626,6 @@ static void output_physinfo(void)
printf("free_cpus : %d\n", n);
free(cpumap.map);
}
-
libxl_physinfo_dispose(&info);
return;
}
@@ -4671,29 +4685,6 @@ static void output_topologyinfo(void)
return;
}
-static void output_claim(void)
-{
- long l;
-
- /*
- * Note that the xl.c (which calls us) has already read from the
- * global configuration the 'claim_mode' value.
- */
- if (!libxl_defbool_val(claim_mode))
- return;
-
- l = libxl_get_claiminfo(ctx);
- if (l < 0) {
- fprintf(stderr, "libxl_get_claiminfo failed. errno: %d (%s)\n",
- errno, strerror(errno));
- return;
- }
-
- printf("outstanding_claims : %ld\n", l);
-
- return;
-}
-
static void print_info(int numa)
{
output_nodeinfo();
@@ -4704,8 +4695,6 @@ static void print_info(int numa)
output_topologyinfo();
output_numainfo();
}
- output_claim();
-
output_xeninfo();
printf("xend_config_format : 4\n");