On Mon, Apr 4, 2011 at 5:07 PM, Jeff Anderson <jeffe...@programmerq.net>wrote:

> On Mon, Apr 04, 2011 at 04:18:00PM -0600, Alberto Trevi?o wrote:
> > On Monday, April 04, 2011 3:02:19 PM Jeff Anderson wrote:
> > > Hello,
> > >
> > > This question is frequently posed by those new to Linux: "Where has all
> > > my ram gone?!"
> > >
> > > The answer is disk caching!
> > >
> > > I'd like to do some testing where I'll be firing up about 7 virtual
> > > machines on my workstation. I'm using qemu+kvm, which does a good job
> > > about not grabbing ram until it is used. That way, I can fire up 7 VMs,
> > > each allowed to use up to 512 MB of ram. I'm still below my actual
> > > physical ram capacity of 4GB, but I'd like to still have use of any ram
> > > that I can on the host. As long as my VMs don't allocate any memory, I
> > > should be fine. The disk caching feature of Linux will guarantee that
> > > over time, with use, each VM will eventually make full use of the 512MB
> > > of ram.
> >
> > The idea of virtualization is to give your VMs as much memory as you
> would
> > like them to have. If your virtual server only needs about 100mb to run,
> > then you give the VM 128 MB of ram, not 512. Otherwise, as you have
> > mentioned, your host OS is going to eat up 512 MB one way or another.
> >
> > > If I'm overlooking another feature of qemu-kvm that'd make my life
> > > easier, I'd love to know about it. I do believe that since each VM is
> > > running the same version of Linux, that kvm can do some shared memory
> > > magic, but I don't know if I have to explicitly request that feature.
> >
> > The proper solution to your problem is the Memory Balloon driver. It is a
> > fake driver that sits in your VM which, under memory crunch from the
> host,
> > will begin to consume memory in your VM to give it back to the host. This
> > sounds kind of weird, but it does exactly what you want. Let's say your
> VM
> > has 512 MB of memory, but only using 100 MB for applications. The balloon
> > driver, when signaled by the host, will begin to use up memory. Let's say
> it
> > grows to 380 MB. In your VM, your memory usage will be 100 MB for system
> and
> > apps, 380 MB for the balloon, with the remaining 32 MB for cache (ignore
> > swap for now). But, what your hosts sees is a VM with 132 MB of memory
> being
> > used. Tada!
> >
> > The "shared memory magic" is called KSM which will merge similar pages
> > together when using the same version of the OS for more than one VM.
> Let's
> > say, in theory, you have two VMs that were created from the same
> template.
> > Everything is the same, except for the configuration. Let's say each VM
> uses
> > 100MB at startup. KSM will begin to look for identical pages and merge
> them
> > so that instead of using 200 MB for 2 VMs, you only use 120 MB for both:
> 80
> > MB in common plus 20 MB of unique pages in each VM (80 + 2 * 20). If you
> > fire up another VM just like the other two, your memory usage may only go
> up
> > to 140 MB (80 + 3 * 20). This is all in theory of course, and your
> mileage
> > will vary. (The same with the balloon driver).
> >
> > I hope this helps.
>
> Thanks for the clarification! I'd read about the existence of the
> ballooning,
> but I didn't really understand what it did or how it worked. qemu-kvm
> doesn't
> seem to have a method to automatically handle ballooning, but it should be
> fairly easy to script since I'm running the qemu monitory on a unix socket.
>
> I'd say this is much cleaner than my crazy "disable disk cache" idea.
>
> I also figured out how to enable KSM in my running kernel (for kernels
> above
> 2.6.32):
>
>    echo 1 > /sys/kernel/mm/ksm/run
>
>
> Thanks!
>
>
Be careful, the host needs to know how the ballooning is working. When the
guest driver balloons, it tells the host which memory pages are in the
balloon. The host then trashes those pages and uses them for something else.
When the guest is pressured for memory and the balloon deflates, the host
will have to either swap those pages to disk to release them as in the case
of being used as disk cache. You can't just use any balloon technique, KVM
needs to understand and coordinate with it. Unfortunately I don't know
enough about KVM, I only use it for a couple of Windows only apps that I
tried really hard to get to work under WINE and couldn't on my netbook. I
can tell you all about VMware's memory ballooning, page sharing and
compression though.

Robert
--------------------
BYU Unix Users Group 
http://uug.byu.edu/ 

The opinions expressed in this message are the responsibility of their
author.  They are not endorsed by BYU, the BYU CS Department or BYU-UUG. 
___________________________________________________________________
List Info (unsubscribe here): http://uug.byu.edu/mailman/listinfo/uug-list

Reply via email to