[Libvir] [PATCH] virsh NUMA command freecell

Daniel Veillard veillard at redhat.com
Wed Sep 26 13:11:25 UTC 2007


  Useful for testing the virNodeGetCellsFreeMemory() call, it requires the
3 precedent NUMA patches. The patch lack the documentation update.
The function takes an optional argument which is the cell number.
If no cell is provided it will print the total free memory available 
on the Node. A more useful function would be to find the cell with the
most available memory, but that one should still be useful and not just
for testing.

Daniel

-- 
Red Hat Virtualization group http://redhat.com/virtualization/
Daniel Veillard      | virtualization library  http://libvirt.org/
veillard at redhat.com  | libxml GNOME XML XSLT toolkit  http://xmlsoft.org/
http://veillard.com/ | Rpmfind RPM search engine  http://rpmfind.net/
-------------- next part --------------
Index: src/virsh.c
===================================================================
RCS file: /data/cvs/libxen/src/virsh.c,v
retrieving revision 1.101
diff -u -p -r1.101 virsh.c
--- src/virsh.c	29 Aug 2007 07:47:09 -0000	1.101
+++ src/virsh.c	26 Sep 2007 13:05:01 -0000
@@ -1562,6 +1562,48 @@ cmdDominfo(vshControl * ctl, vshCmd * cm
 }
 
 /*
+ * "freecell" command
+ */
+static vshCmdInfo info_freecell[] = {
+    {"syntax", "freecell [<cellno>]"},
+    {"help", gettext_noop("NUMA free memory")},
+    {"desc", gettext_noop("display available free memory for the NUMA cell.")},
+    {NULL, NULL}
+};
+
+static vshCmdOptDef opts_freecell[] = {
+    {"cellno", VSH_OT_DATA, 0, gettext_noop("NUMA cell number")},
+    {NULL, 0, 0, NULL}
+};
+
+static int
+cmdFreecell(vshControl * ctl, vshCmd * cmd)
+{
+    int ret;
+    int cell, cell_given;
+    long long memory;
+
+    if (!vshConnectionUsability(ctl, ctl->conn, TRUE))
+        return FALSE;
+
+    cell = vshCommandOptInt(cmd, "cellno", &cell_given);
+    if (!cell_given) {
+        cell = -1;
+    }
+
+    ret = virNodeGetCellsFreeMemory(ctl->conn, &memory, cell, 1);
+    if (ret != 1)
+        return FALSE;
+    
+    if (cell == -1)
+	vshPrint(ctl, "%s: %lli kB\n", _("Total"), memory);
+    else
+	vshPrint(ctl, "%d: %lli kB\n", cell, memory);
+
+    return TRUE;
+}
+
+/*
  * "vcpuinfo" command
  */
 static vshCmdInfo info_vcpuinfo[] = {
@@ -3661,6 +3703,7 @@ static vshCmdDef commands[] = {
     {"domblkstat", cmdDomblkstat, opts_domblkstat, info_domblkstat},
     {"domifstat", cmdDomIfstat, opts_domifstat, info_domifstat},
     {"dumpxml", cmdDumpXML, opts_dumpxml, info_dumpxml},
+    {"freecell", cmdFreecell, opts_freecell, info_freecell},
     {"hostname", cmdHostname, NULL, info_hostname},
     {"list", cmdList, opts_list, info_list},
     {"migrate", cmdMigrate, opts_migrate, info_migrate},


More information about the libvir-list mailing list