qemu-devel
[Top][All Lists]
Advanced

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

[Qemu-devel] [5873] Add ballooning infrastructure.


From: Anthony Liguori
Subject: [Qemu-devel] [5873] Add ballooning infrastructure.
Date: Thu, 04 Dec 2008 20:19:36 +0000

Revision: 5873
          http://svn.sv.gnu.org/viewvc/?view=rev&root=qemu&revision=5873
Author:   aliguori
Date:     2008-12-04 20:19:35 +0000 (Thu, 04 Dec 2008)

Log Message:
-----------
Add ballooning infrastructure.

Balloon devices allow you to ask the guest to allocate memory.  This allows you
to release that memory.  It's mostly useful for freeing up large chunks of
memory from cooperative guests.

Ballooning is supported by both Xen and VirtIO.

Signed-off-by: Anthony Liguori <address@hidden>

Modified Paths:
--------------
    trunk/monitor.c
    trunk/vl.c

Modified: trunk/monitor.c
===================================================================
--- trunk/monitor.c     2008-12-04 20:08:06 UTC (rev 5872)
+++ trunk/monitor.c     2008-12-04 20:19:35 UTC (rev 5873)
@@ -34,6 +34,7 @@
 #include "block.h"
 #include "audio/audio.h"
 #include "disas.h"
+#include "balloon.h"
 #include <dirent.h>
 #include "qemu-timer.h"
 #include "migration.h"
@@ -1390,6 +1391,23 @@
 }
 #endif
 
+static void do_balloon(int value)
+{
+    ram_addr_t target = value;
+    qemu_balloon(target << 20);
+}
+
+static void do_info_balloon(void)
+{
+    ram_addr_t actual;
+
+    actual = qemu_balloon_status();
+    if (actual == 0)
+        term_printf("Ballooning not activated in VM\n");
+    else
+        term_printf("balloon: actual=%d\n", (int)(actual >> 20));
+}
+
 static const term_cmd_t term_cmds[] = {
     { "help|?", "s?", do_help,
       "[cmd]", "show the help" },
@@ -1475,6 +1493,8 @@
       "", "cancel the current VM migration" },
     { "migrate_set_speed", "s", do_migrate_set_speed,
       "value", "set maximum speed (in bytes) for migrations" },
+    { "balloon", "i", do_balloon,
+      "target", "request VM to change it's memory allocation (in MB)" },
     { NULL, NULL, },
 };
 
@@ -1542,6 +1562,8 @@
       "", "show SLIRP statistics", },
 #endif
     { "migrate", "", do_info_migrate, "", "show migration status" },
+    { "balloon", "", do_info_balloon,
+      "", "show balloon information" },
     { NULL, NULL, },
 };
 

Modified: trunk/vl.c
===================================================================
--- trunk/vl.c  2008-12-04 20:08:06 UTC (rev 5872)
+++ trunk/vl.c  2008-12-04 20:19:35 UTC (rev 5873)
@@ -40,6 +40,7 @@
 #include "audio/audio.h"
 #include "migration.h"
 #include "kvm.h"
+#include "balloon.h"
 
 #include <unistd.h>
 #include <fcntl.h>
@@ -514,7 +515,32 @@
     va_end(ap);
     abort();
 }
+ 
+/***************/
+/* ballooning */
 
+static QEMUBalloonEvent *qemu_balloon_event;
+void *qemu_balloon_event_opaque;
+
+void qemu_add_balloon_handler(QEMUBalloonEvent *func, void *opaque)
+{
+    qemu_balloon_event = func;
+    qemu_balloon_event_opaque = opaque;
+}
+
+void qemu_balloon(ram_addr_t target)
+{
+    if (qemu_balloon_event)
+        qemu_balloon_event(qemu_balloon_event_opaque, target);
+}
+
+ram_addr_t qemu_balloon_status(void)
+{
+    if (qemu_balloon_event)
+        return qemu_balloon_event(qemu_balloon_event_opaque, 0);
+    return 0;
+}
+
 /***********************************************************/
 /* keyboard/mouse */
 






reply via email to

[Prev in Thread] Current Thread [Next in Thread]