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

[Xen-devel] [PATCH] balloon: selfballooning and post memory info via xenbus


  • To: "Xen-Devel (E-mail)" <xen-devel@xxxxxxxxxxxxxxxxxxx>
  • From: "Dan Magenheimer" <dan.magenheimer@xxxxxxxxxx>
  • Date: Mon, 5 May 2008 16:44:56 -0600
  • Delivery-date: Mon, 05 May 2008 15:46:39 -0700
  • List-id: Xen developer discussion <xen-devel.lists.xensource.com>
  • Thread-index: AcivAaKDl54wgUKOReylcPRPM6N4ew==

OK, here's the promised patch.  The overall objective of the
patch is to enable limited memory load-balancing capabilities
as a step toward allowing limited memory overcommit.  With
this and some other minor hackery, I was able to run as
many as 15 lightly loaded 512MB domains on a 2GB system
(yes, veerrrryyy slooowwwlly).

Review/comments appreciated.

With this patch, balloon.c communicates (limited) useful
memory usage information via xenbus.  It also implements
"selfballooning" which applies the memory information
locally to immediately adjust the balloon, giving up memory
when it is not needed and asking for it back when it is needed,
implementing a first-come-first-served system-wide ballooning
"policy".  When a domain asks for memory but none is available,
it must use its own configured swap disk, resulting in
(potentially severe) performance degradation.  Naturally,
it is not recommended to turn on selfballooning in a domain
that has no swap disk or if performance is more important
than increasing the number of VMs runnable on a physical machine.

A key assumption is that the Linux variable vm_committed_space
is a reasonable first approximation of memory needed by a domain.
This approximation will probably improve over time, but is
a good start for now.  The variable is bound on the lower end
by the recently submitted minimum_target() algorithm patch;
thus O-O-M conditions should not occur.

The code is a bit complicated in a couple of places because of
race conditions involving xenstored startup relative to
turning on selfballooning locally.  Because the key variable
(vm_committed_space) is not exported by Linux, I implemented
a horrible hack which still allows the code to work in a
module, however I fully expect that this part of the patch
will not be accepted (which will limit the functionality to
pvm domains only... probably OK for now).

Existing balloon functionality which is unchanged:
- Set target for VM from domain0
- Set target inside VM by writing to /proc/xen/balloon
Existing balloon info on xenbus which is unchanged:
- /local/domain/X/memory/target
To turn on selfballooning:
- Inside a VM: "echo 1 > /proc/xen/balloon"
- From domain0: "xenstore-write /local/domain/X/memory/selfballoon 1"
To turn off selfballooning:
- Inside a VM: "echo 0 > /proc/xen/balloon"
- From domain0: "xenstore-write /local/domain/X/memory/selfballoon 0"
New balloon info now on xenbus:
- /local/domain/X/memory/selfballoon [0 or 1]
- /local/domain/X/memory/actual [kB] *
- /local/domain/X/memory/minimum [kB] *
- /local/domain/X/memory/selftarget [kB] * (only valid if
  selfballoon==1)
 * writeable only by balloon driver in X when either
   selfballooning is first enabled, or target is changed
   by domain0

Thanks,
Dan

===================================
Thanks... for the memory
I really could use more / My throughput's on the floor
The balloon is flat / My swap disk's fat / I've OOM's in store
Overcommitted so much
(with apologies to the late great Bob Hope)

Attachment: balloon.patch
Description: Binary data

_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel

 


Rackspace

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