[libvirt] SetMaxMemory vs. SetMemory

Chris Lalancette clalance at redhat.com
Thu May 21 18:37:18 UTC 2009

Matthias Bolte wrote:
> Hello,
> I just took a look at the driver functions for SetMaxMemory and
> SetMemory, as they are not implemented yet for the ESX driver and
> Daniel Veillard was a bit surprised that they are missing, as he
> expects them to be simple to implement. The problem is that I'm not
> sure how the memory model of ESX maps to SetMaxMemory vs. SetMemory.
> An ESX virtual machine has a defined memory size. That's the size
> reported to the guest OS as the available "physical" memory size.
> Beside this ESX allows the user to control how the hypervisor
> satisfies this "physical" memory size. You can define a reservation
> and an upper limit. The hypervisor will at least use the reserved
> amount of real physical memory to satisfy the "physical" memory size,
> but will not use more than the upper limit.
> How does this map to SetMaxMemory and SetMemory? My first assumption
> was, SetMaxMemory defines the "physical" memory size and SetMemory
> defines the upper limit of real physical memory to satisfy the
> "physical" memory size. This assumption seems to be in sync with the
> QEMU driver from just looking at the code. But with Xen it seems to be
> different. If I call SetMaxMemory and SetMemory with 2GB than free
> inside the domain reports 2GB total memory. After I call SetMemory
> with 1GB, free reports 1GB of total memory.
> I'm confused. So, what is the intended semantic for SetMaxMemory and SetMemory?

Well, this is because of a peculiarity with Xen PV domains.  In Xen PV guests,
you specify a "maxmem" and a "memory" parameter in the configuration file.  The
"maxmem" parameter is presented to the guest as the end of the e820 map, hence
the end of real memory as far as the guest is concerned (you can see that in the
output of dmesg from the guest).  When the balloon driver in the guest loads, it
will "allocate" (maxmem - memory), so that free inside the guest looks like it
only has 1GB.  Later on, you can balloon back up, which means that the balloon
driver "releases" memory back to the domain (but never above the maxmem
parameter, since that's what's in the e820 map for the guest).

I would say for ESX driver, you probably want to follow the Qemu model; it's the
model that KVM and even Xen FV guests follow, so seems to be more common.

I hope that helps somewhat.

Chris Lalancette

More information about the libvir-list mailing list