mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-03-20 07:59:00 +00:00
vircgroup: Improve virCgroupControllerAvailable wrt to CGroupsV2
It all started as a simple bug: trying to move domain memory between NUMA nodes (e.g. via virsh numatune) did not work. I've traced the problem to qemuProcessHook() because that's where we decide whether to rely on CGroups or use numactl APIs to satisfy <numatune/>. The problem was that virCgroupControllerAvailable() was telling us that cpuset controller is unavailable. This is CGroupsV2, and pretty weird because CGroupsV2 definitely do support cpuset controller and I had them mounted in a standard way. What I found out (with Pavel's help) was that virCgroupNewSelf() was looking into the following path to detect supported controllers: /sys/fs/cgroup/system.slice/cgroup.controllers However, if there's no other VM running then the system.slice only has 'memory' and 'pids' controllers. Therefore, we saw 'cpuset' as not available. The fix is to look at the top most path, which has the full set of controllers: /sys/fs/cgroup/cgroup.controllers Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1976690 Signed-off-by: Michal Privoznik <mprivozn@redhat.com> Reviewed-by: Pavel Hrdina <phrdina@redhat.com>
This commit is contained in:
parent
12f96b0611
commit
c159db4cc0
@ -2996,7 +2996,10 @@ virCgroupControllerAvailable(int controller)
|
||||
{
|
||||
g_autoptr(virCgroup) cgroup = NULL;
|
||||
|
||||
if (virCgroupNewSelf(&cgroup) < 0)
|
||||
/* Don't use virCgroupNewSelf() - we might be running in a slice that
|
||||
* doesn't have @controller but the domain (for which we will later use
|
||||
* virCgroupHasController()) might have it. */
|
||||
if (virCgroupNew("/", -1, &cgroup) < 0)
|
||||
return false;
|
||||
|
||||
return virCgroupHasController(cgroup, controller);
|
||||
|
Loading…
x
Reference in New Issue
Block a user