aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--docs/man/xl.pod.123
-rw-r--r--tools/libxl/libxl.c4
-rw-r--r--tools/libxl/xl.h1
-rw-r--r--tools/libxl/xl_cmdimpl.c40
-rw-r--r--tools/libxl/xl_cmdtable.c6
5 files changed, 68 insertions, 6 deletions
diff --git a/docs/man/xl.pod.1 b/docs/man/xl.pod.1
index d8783e88b3..01ecc83433 100644
--- a/docs/man/xl.pod.1
+++ b/docs/man/xl.pod.1
@@ -780,6 +780,29 @@ explanatory.
Prints the current uptime of the domains running.
+=item B<claims>
+
+Prints information about outstanding claims by the guests. This provides
+the outstanding claims and currently populated memory count for the guests.
+These values added up reflect the global outstanding claim value, which
+is provided via the I<info> argument, B<outstanding_claims> value.
+The B<Mem> column has the cumulative value of outstanding claims and
+the total amount of memory that has been right now allocated to the guest.
+
+B<EXAMPLE>
+
+An example format for the list is as follows:
+
+ Name ID Mem VCPUs State Time(s) Claimed
+ Domain-0 0 2047 4 r----- 19.7 0
+ OL5 2 2048 1 --p--- 0.0 847
+ OL6 3 1024 4 r----- 5.9 0
+ Windows_XP 4 2047 1 --p--- 0.0 1989
+
+In which it can be seen that the OL5 guest still has 847MB of claimed
+memory (out of the total 2048MB where 1191MB has been allocated to
+the guest).
+
=back
=head1 SCHEDULER SUBCOMMANDS
diff --git a/tools/libxl/libxl.c b/tools/libxl/libxl.c
index 8b0e415044..c9905e319b 100644
--- a/tools/libxl/libxl.c
+++ b/tools/libxl/libxl.c
@@ -3865,9 +3865,9 @@ int libxl_wait_for_memory_target(libxl_ctx *ctx, uint32_t domid, int wait_secs)
rc = libxl_domain_info(ctx, &info, domid);
if (rc < 0)
return rc;
- } while (wait_secs > 0 && info.current_memkb > target_memkb);
+ } while (wait_secs > 0 && (info.current_memkb + info.outstanding_memkb) > target_memkb);
- if (info.current_memkb <= target_memkb)
+ if ((info.current_memkb + info.outstanding_memkb) <= target_memkb)
rc = 0;
else
rc = ERROR_FAIL;
diff --git a/tools/libxl/xl.h b/tools/libxl/xl.h
index 4c5e5d19a9..771b4af241 100644
--- a/tools/libxl/xl.h
+++ b/tools/libxl/xl.h
@@ -83,6 +83,7 @@ int main_vtpmattach(int argc, char **argv);
int main_vtpmlist(int argc, char **argv);
int main_vtpmdetach(int argc, char **argv);
int main_uptime(int argc, char **argv);
+int main_claims(int argc, char **argv);
int main_tmem_list(int argc, char **argv);
int main_tmem_freeze(int argc, char **argv);
int main_tmem_thaw(int argc, char **argv);
diff --git a/tools/libxl/xl_cmdimpl.c b/tools/libxl/xl_cmdimpl.c
index c9b71e652f..09b0f41457 100644
--- a/tools/libxl/xl_cmdimpl.c
+++ b/tools/libxl/xl_cmdimpl.c
@@ -3061,7 +3061,8 @@ out:
}
}
-static void list_domains(int verbose, int context, const libxl_dominfo *info, int nb_domain)
+static void list_domains(int verbose, int context, int claim,
+ const libxl_dominfo *info, int nb_domain)
{
int i;
static const char shutdown_reason_letters[]= "-rscw";
@@ -3069,6 +3070,7 @@ static void list_domains(int verbose, int context, const libxl_dominfo *info, in
printf("Name ID Mem VCPUs\tState\tTime(s)");
if (verbose) printf(" UUID Reason-Code\tSecurity Label");
if (context && !verbose) printf(" Security Label");
+ if (claim) printf(" Claimed");
printf("\n");
for (i = 0; i < nb_domain; i++) {
char *domname;
@@ -3078,7 +3080,8 @@ static void list_domains(int verbose, int context, const libxl_dominfo *info, in
printf("%-40s %5d %5lu %5d %c%c%c%c%c%c %8.1f",
domname,
info[i].domid,
- (unsigned long) (info[i].current_memkb / 1024),
+ (unsigned long) ((info[i].current_memkb +
+ info[i].outstanding_memkb)/ 1024),
info[i].vcpu_online,
info[i].running ? 'r' : '-',
info[i].blocked ? 'b' : '-',
@@ -3095,6 +3098,8 @@ static void list_domains(int verbose, int context, const libxl_dominfo *info, in
if (info[i].shutdown) printf(" %8x", shutdown_reason);
else printf(" %8s", "-");
}
+ if (claim)
+ printf(" %5lu", (unsigned long)info[i].outstanding_memkb / 1024);
if (verbose || context) {
int rc;
size_t size;
@@ -4029,7 +4034,7 @@ int main_list(int argc, char **argv)
if (details)
list_domains_details(info, nb_domain);
else
- list_domains(verbose, context, info, nb_domain);
+ list_domains(verbose, context, 0 /* claim */, info, nb_domain);
if (info_free)
libxl_dominfo_list_free(info, nb_domain);
@@ -4742,7 +4747,8 @@ static void sharing(const libxl_dominfo *info, int nb_domain)
printf("%-40s %5d %5lu %5lu\n",
domname,
info[i].domid,
- (unsigned long) (info[i].current_memkb / 1024),
+ (unsigned long) ((info[i].current_memkb +
+ info[i].outstanding_memkb) / 1024),
(unsigned long) (info[i].shared_memkb / 1024));
free(domname);
}
@@ -5927,6 +5933,32 @@ static char *uptime_to_string(unsigned long uptime, int short_mode)
return time_string;
}
+int main_claims(int argc, char **argv)
+{
+ libxl_dominfo *info;
+ int opt;
+ int nb_domain;
+
+ SWITCH_FOREACH_OPT(opt, "", NULL, "claims", 0) {
+ /* No options */
+ }
+
+ if (!libxl_defbool_val(claim_mode))
+ fprintf(stderr, "claim_mode not enabled (see man xl.conf).\n");
+
+ info = libxl_list_domain(ctx, &nb_domain);
+ if (!info) {
+ fprintf(stderr, "libxl_domain_infolist failed.\n");
+ return 1;
+ }
+
+ list_domains(0 /* verbose */, 0 /* context */, 1 /* claim */,
+ info, nb_domain);
+
+ libxl_dominfo_list_free(info, nb_domain);
+ return 0;
+}
+
static char *current_time_to_string(time_t now)
{
char now_str[100];
diff --git a/tools/libxl/xl_cmdtable.c b/tools/libxl/xl_cmdtable.c
index b4a87ca137..00899f5e1b 100644
--- a/tools/libxl/xl_cmdtable.c
+++ b/tools/libxl/xl_cmdtable.c
@@ -362,6 +362,12 @@ struct cmd_spec cmd_table[] = {
"Print uptime for all/some domains",
"[-s] [Domain]",
},
+ { "claims",
+ &main_claims, 0, 0,
+ "List outstanding claim information about all domains",
+ "",
+ "",
+ },
{ "tmem-list",
&main_tmem_list, 0, 0,
"List tmem pools",