
On Tue, Aug 24, 2010 at 11:53:27AM +0530, Nikunj A. Dadhania wrote:
Subject: [RFC] Memory controller exploitation in libvirt
Memory CGroup is a kernel feature that can be exploited effectively in the current libvirt/qemu driver. Here is a shot at that.
At present, QEmu uses memory ballooning feature, where the memory can be inflated/deflated as and when needed, co-operatively between the host and the guest. There should be some mechanism where the host can have more control over the guests memory usage. Memory CGroup provides features such as hard-limit and soft-limit for memory, and hard-limit for swap area.
Exposing the tunables is nice, but there is another related problem. We don't provide apps enough information to effectively use them.
eg, they configure a guest with 500 MB of RAM. How much RAM does QEMU actually use. 500 MB + X MB more. We need to give apps an indication of what the 'X' overhead is. Some of it comes from the video RAM. Some is pure QEMU emulation overhead. Can we cover them in memory statistics API, ie, domainGetMemoryParameters with
On Tue, 24 Aug 2010 10:59:52 +0100, "Daniel P. Berrange" <berrange@redhat.com> wrote: parameter type MemoryUsage, MemoryOverhead?
* Might need to redefine(changing the scope) of existing memory API. Currently, domainSetMemory is used to set limit_in_bytes in LXC and memory ballooning in QEmu. While the domainSetMaxMemory is not defined in QEmu and in case of LXC it is setting the internal object's maxmem variable.
Yep, might need to clarify LXC a little bit. Sure, when domainSetMaxMemory is called in case of LXC, sets vm->def->maxmem (vm is of type virDomainObjPtr and def is of type virDomainDefPtr) if the newmaxmem is greater than current memory.
domainSetMemory for LXC: Sets the memory cgroup file memory.limit_in_bytes if newmem being set is less than the maximum permissible VM memory(vm->def->maxmem) Nikunj