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

[Xen-devel] [PATCH 4/4] xl: report how much memory a domain has on each NUMA node



by introducing a new subcommant: `xl numainfo <domain>'.

Signed-off-by: Dario Faggioli <dario.faggioli@xxxxxxxxxx>
---
 tools/libxl/xl.h          |    1 +
 tools/libxl/xl_cmdimpl.c  |   58 +++++++++++++++++++++++++++++++++++++++++++++
 tools/libxl/xl_cmdtable.c |    5 ++++
 3 files changed, 64 insertions(+)

diff --git a/tools/libxl/xl.h b/tools/libxl/xl.h
index f188708..f519242 100644
--- a/tools/libxl/xl.h
+++ b/tools/libxl/xl.h
@@ -33,6 +33,7 @@ struct cmd_spec {
 int main_vcpulist(int argc, char **argv);
 int main_info(int argc, char **argv);
 int main_sharing(int argc, char **argv);
+int main_numainfo(int argc, char **argv);
 int main_cd_eject(int argc, char **argv);
 int main_cd_insert(int argc, char **argv);
 int main_console(int argc, char **argv);
diff --git a/tools/libxl/xl_cmdimpl.c b/tools/libxl/xl_cmdimpl.c
index 4fc46eb..07a3504 100644
--- a/tools/libxl/xl_cmdimpl.c
+++ b/tools/libxl/xl_cmdimpl.c
@@ -4721,6 +4721,64 @@ int main_vcpupin(int argc, char **argv)
     return vcpupin(find_domain(argv[optind]), argv[optind+1] , argv[optind+2]);
 }
 
+static void print_domain_numainfo(uint32_t domid)
+{
+    libxl_domain_numainfo *info;
+    libxl_bitmap nodemap;
+    libxl_physinfo physinfo;
+    int i;
+
+    libxl_bitmap_init(&nodemap);
+    libxl_physinfo_init(&physinfo);
+
+    if (libxl_node_bitmap_alloc(ctx, &nodemap, 0)) {
+        fprintf(stderr, "libxl_node_bitmap_alloc_failed.\n");
+        goto out;
+    }
+    if (libxl_get_physinfo(ctx, &physinfo) != 0) {
+        fprintf(stderr, "libxl_physinfo failed.\n");
+        goto out;
+    }
+
+    if (libxl_domain_get_nodeaffinity(ctx, domid, &nodemap)) {
+        fprintf(stderr, "libxl_domain_get_nodeaffinity failed.\n");
+        goto out;
+    }
+    printf("NODE Affinity: ");
+    print_bitmap(nodemap.map, physinfo.nr_nodes, stdout);
+    printf("\n");
+
+    info = libxl_domain_get_numainfo(ctx, domid);
+    if (!info) {
+        fprintf(stderr, "libxl_domain_get_numainfo failed.\n");
+        goto out;
+    }
+    printf("Memory:\n");
+    for (i = 0; i < info->num_memkbs; i++) {
+        if (info->memkbs[i])
+            printf("  Node %d: %"PRIu64" Kb\n", i, info->memkbs[i]);
+    }
+
+ out:
+    libxl_bitmap_dispose(&nodemap);
+    libxl_physinfo_dispose(&physinfo);
+}
+
+int main_numainfo(int argc, char **argv)
+{
+    uint32_t domid;
+    int opt = 0;
+
+    SWITCH_FOREACH_OPT(opt, "", NULL, "numainfo", 1) {
+        /* No options */
+    }
+
+    domid = find_domain(argv[optind]);
+    print_domain_numainfo(domid);
+
+    return 0;
+}
+
 static void vcpuset(uint32_t domid, const char* nr_vcpus, int check_host)
 {
     char *endptr;
diff --git a/tools/libxl/xl_cmdtable.c b/tools/libxl/xl_cmdtable.c
index e8ab93a..4b040dd 100644
--- a/tools/libxl/xl_cmdtable.c
+++ b/tools/libxl/xl_cmdtable.c
@@ -201,6 +201,11 @@ struct cmd_spec cmd_table[] = {
       "Set the current memory usage for a domain",
       "<Domain> <MemMB['b'[bytes]|'k'[KB]|'m'[MB]|'g'[GB]|'t'[TB]]>",
     },
+    { "numainfo",
+      &main_numainfo, 0, 0,
+      "Print NUMA related information for a domain",
+      "<Domain>",
+    },
     { "button-press",
       &main_button_press, 0, 1,
       "Indicate an ACPI button press to the domain",


_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel


 


Rackspace

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