From 625a5befc2e3200b396594f002218d235e375da5 Mon Sep 17 00:00:00 2001 From: Adam Litke Date: Tue, 26 Jan 2010 14:17:35 -0600 Subject: virtio: Add memory statistics reporting to the balloon driver When using ballooning to manage overcommitted memory on a host, a system for guests to communicate their memory usage to the host can provide information that will minimize the impact of ballooning on the guests. The current method employs a daemon running in each guest that communicates memory statistics to a host daemon at a specified time interval. The host daemon aggregates this information and inflates and/or deflates balloons according to the level of host memory pressure. This approach is effective but overly complex since a daemon must be installed inside each guest and coordinated to communicate with the host. A simpler approach is to collect memory statistics in the virtio balloon driver and communicate them directly to the hypervisor. Signed-off-by: Adam Litke Signed-off-by: Anthony Liguori --- vl.c | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) (limited to 'vl.c') diff --git a/vl.c b/vl.c index 5e8c775..1cd355c 100644 --- a/vl.c +++ b/vl.c @@ -365,17 +365,24 @@ void qemu_add_balloon_handler(QEMUBalloonEvent *func, void *opaque) qemu_balloon_event_opaque = opaque; } -void qemu_balloon(ram_addr_t target) +int qemu_balloon(ram_addr_t target, MonitorCompletion cb, void *opaque) { - if (qemu_balloon_event) - qemu_balloon_event(qemu_balloon_event_opaque, target); + if (qemu_balloon_event) { + qemu_balloon_event(qemu_balloon_event_opaque, target, cb, opaque); + return 1; + } else { + return 0; + } } -ram_addr_t qemu_balloon_status(void) +int qemu_balloon_status(MonitorCompletion cb, void *opaque) { - if (qemu_balloon_event) - return qemu_balloon_event(qemu_balloon_event_opaque, 0); - return 0; + if (qemu_balloon_event) { + qemu_balloon_event(qemu_balloon_event_opaque, 0, cb, opaque); + return 1; + } else { + return 0; + } } -- cgit v1.1