On Thu, Jun 30, 2011 at 11:08:32AM +0800, Gui Jianfeng wrote: > Currently, libvirt makes use of sched_setaffinity() to set Guest processes's > cpu affinity. But, sometimes, for instance, when QEmu uses vhost-net, the > kernel part of vhost will create a kernel thread for some purpose. In this > case, such kernel thread won't inherit QEmu's cpu affinity. > > This patch enables cpuset cgroup in libvirt and setting cpu affinity by > configuring cpuset cgroup. > > Signed-off-by: Gui Jianfeng <guijianfeng@xxxxxxxxxxxxxx> > --- > src/libvirt_private.syms | 1 + > src/qemu/qemu_cgroup.c | 22 ++++++++++++++++++++++ > src/qemu/qemu_conf.c | 3 ++- > src/util/cgroup.c | 18 ++++++++++++++++++ > src/util/cgroup.h | 2 ++ > 5 files changed, 45 insertions(+), 1 deletions(-) > > diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms > index 626ac6c..e7aebc7 100644 > --- a/src/libvirt_private.syms > +++ b/src/libvirt_private.syms > @@ -83,6 +83,7 @@ virCgroupMounted; > virCgroupPathOfController; > virCgroupRemove; > virCgroupSetBlkioWeight; > +virCgroupCpusetSetcpus; > virCgroupSetCpuShares; > virCgroupSetFreezerState; > virCgroupSetMemory; > diff --git a/src/qemu/qemu_cgroup.c b/src/qemu/qemu_cgroup.c > index 1298924..eb92409 100644 > --- a/src/qemu/qemu_cgroup.c > +++ b/src/qemu/qemu_cgroup.c > @@ -296,6 +296,28 @@ int qemuSetupCgroup(struct qemud_driver *driver, > } > } > > + if (vm->def->cpumask != NULL) { > + if (qemuCgroupControllerActive(driver, VIR_CGROUP_CONTROLLER_CPUSET)) { > + char *cpumask = NULL; > + if ((cpumask = > + virDomainCpuSetFormat(vm->def->cpumask, vm->def->cpumasklen)) == NULL) > + goto cleanup; > + > + rc = virCgroupCpusetSetcpus(cgroup, cpumask); > + if(rc != 0) { > + virReportSystemError(-rc, > + _("Unable to set cpus for domain %s"), > + vm->def->name); > + VIR_FREE(cpumask); > + goto cleanup; > + } > + VIR_FREE(cpumask); > + } else { > + qemuReportError(VIR_ERR_CONFIG_UNSUPPORTED, > + _("Cpuset is not available on this host")); This is an effective regression for any existing deployments which are not using cgroups, or do not have the cpuset controller mounted. IMHO, this 'else' clause should just be removed, to allow the existing cpu affinity code to run normally. 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 :| -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list