
On Thu, Mar 31, 2011 at 11:09:33AM -0600, Eric Blake wrote:
Currently, all qemu domains are created in their own cgroup, but that cgroup is a direct child of libvirt. So cgroup tunings are all-or-one; there is no way to group multiple VMs to share a particular resource without infringing on other VMs.
Just as we can currently track interface, nwfilter, and storage pool objects as independent xml entities in parallel with domains, it would be nice to expose a new object, virCgroup. All virCgroup and virDomain objects would have an optional parent virCgroup object, and anything without such a parent defaults to the global libvirt cgroup as the parent. Recent tuning parameters like <memtune>, <blkiotune> that apply to domains would also apply to a virCgroup XML representation.
That way, you can create a hierarchy of cgroups, such as:
libvirt |+cgroup1 | |+vm1 | \+vm2 \+vm3
where a <memtune> of cgroup1 is memory that is shared between vm1 and vm2 (possibly with overcommit, if it is anticipated that both vms will not simultaneously be using the max memory), which maps nicely to the fact that cgroups are already hierarchical to the kernel.
I'm not quite sure how this would affect migration, but it would probably be similar to how <interface> or <nwfilter> setups affect migration (that is, if a domain refers to a particular host <interface>, then that interface object better be present with similar characteristics on both source and destination of the migration).
I'm throwing this out for general thoughts, based on an IRC conversation (and not necessarily because I plan on implementing it any time soon).
CGroups are a Linux specific implementation detail that we don't really want to expose in the public API. Your proposal, however, would make sense if we were to just expose an object 'virDomainGroupPtr' as a way to group domains. The idea being that virDomainGroupPtr would map to CGroups with QEMU/LXC, or another hypervisor's own grouping concept. Aside from performance tunables, domain grouping could also be useful in the context of shared disks. Currently a disk marked 'shared' is potentially accessible across every single guest on a host. If we had domain groups, we could restrict the disk access to a subset of guests. The fun part is that you might want different groups for perf tunables vs disk sharing. Regards, Daniel -- |: http://berrange.com -o- http://www.flickr.com/photos/dberrange/ :| |: http://libvirt.org -o- http://virt-manager.org :| |: http://autobuild.org -o- http://search.cpan.org/~danberr/ :| |: http://entangle-photo.org -o- http://live.gnome.org/gtk-vnc :|