|| ||Dan Magenheimer <dan.magenheimer-AT-oracle.com> |
|| ||Andrew Morton <akpm-AT-linux-foundation.org>, Avi Kivity <avi-AT-redhat.com> |
|| ||RE: [PATCH] VMware Balloon driver |
|| ||Mon, 5 Apr 2010 16:03:48 -0700 (PDT)|
|| ||Jeremy Fitzhardinge <jeremy-AT-goop.org>,
Dmitry Torokhov <dtor-AT-vmware.com>,
|| ||Article, Thread
> > On 04/06/2010 01:17 AM, Andrew Morton wrote:
> > >> The basic idea of the driver is to allow a guest system to give up
> > >> memory it isn't using so it can be reused by other virtual
> machines (or
> > >> the host itself).
> > >>
> > > So... does this differ in any fundamental way from what
> > > does, via shrink_all_memory()?
> > >
> > Just the _all_ bit, and the fact that we need to report the freed
> > numbers to the hypervisor.
> So... why not tweak that, rather than implementing some parallel
I think Avi was being facetious ("_all_"). Hibernation assumes
everything in the machine is going to stop for awhile. Ballooning
assumes that the machine has lower memory need for awhile, but
is otherwise fully operational. Think of it as hot-plug memory
at a page granularity.
Historically, all OS's had a (relatively) fixed amount of memory
and, since it was fixed in size, there was no sense wasting any of it.
In a virtualized world, OS's should be trained to be much more
flexible as one virtual machine's "waste" could/should be another
virtual machine's "want". Ballooning is currently the mechanism
for this; it places memory pressure on the OS to encourage it
to get by with less memory. Unfortunately, it is difficult even
within an OS to determine what memory is wasted and what memory
might be used imminently... because LRU is only an approximation of
the future. Hypervisors have an even more difficult problem not
only because they must infer this information from external events,
but they can double the problem if they infer the opposite of what
the OS actually does.
As Jeremy mentioned, Transcendent Memory (and its Linux implementations
"cleancache" and "frontswap") allows a guest kernel to give up memory
for the broader good while still retaining a probability that it
can get the same data back quickly. This results in more memory
fluidity. Transcendent Memory ("tmem") still uses ballooning as
the mechanism to create memory pressure... it just provides an
insurance policy for that memory pressure.
Avi will point out that it is not clear that tmem can make use of
or benefit from tmem, but we need not repeat that discussion here.
to post comments)