
On Wed, Oct 01, 2008 at 01:19:03PM -0700, Dan Smith wrote:
This patch adds src/cgroup.{c,h} with support for creating and manipulating cgroups.
All groups created with the internal API are forced under $mount/libvirt/ to keep everything together. The first time a group is created, the libvirt directory is also created, and the settings from the root are inherited.
The code creates groups in all mounts requires to get memory and devices functionality. When setting a value, the appropriate mount is determined and the value is set there. I have tested this with all controllers mounted in a single location, as well as all of them mounted separately.
+int virCgroupForDomain(virDomainDefPtr def, virCgroupPtr *group)
I think we should pass in a 2nd 'const char *driverName' arg here with "lxc" as its value
+{ + int rc; + virCgroupPtr typegrp = NULL; + const char *typestr = virDomainVirtTypeToString(def->virtType);
Rather than rely on this virt type string - virt type is not adding enough uniqueness - can still have a (virttype, name) clash between 2 libvirt drivers. Name is unique per host, per driver, so we'd want to have $CONTROLLER_MOUNT/libvirt/$DRIVER_NAME/$DOMAIN_NAME
+ + if (typestr == NULL) + return -EINVAL; + + rc = virCgroupOpen(NULL, typestr, &typegrp); + if (rc == -ENOENT) { + rc = virCgroupCreate(NULL, typestr, &typegrp); + if (rc != 0) + goto out; + } else if (rc != 0) + goto out; + + rc = virCgroupOpen(typegrp, def->name, group); + if (rc == -ENOENT) + rc = virCgroupCreate(typegrp, def->name, group); +out: + virCgroupFree(&typegrp); + + return rc; +} +
Daniel -- |: Red Hat, Engineering, London -o- http://people.redhat.com/berrange/ :| |: http://libvirt.org -o- http://virt-manager.org -o- http://ovirt.org :| |: http://autobuild.org -o- http://search.cpan.org/~danberr/ :| |: GnuPG: 7D3B9505 -o- F3C9 553F A1DA 4AC2 5648 23C1 B3DF F742 7D3B 9505 :|