mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-02-06 20:00:05 +00:00
bb81021bfe
When the cpu placement model is "auto", it sets the affinity for domain process with the advisory nodeset from numad, however, creating cgroup for the domain process (called emulator thread in some contexts) later overrides that with pinning it to all available pCPUs. How to reproduce: * Configure the domain with "auto" placement for <vcpu>, e.g. <vcpu placement='auto'>4</vcpu> * % virsh start dom * % cat /proc/$dompid/status Though the emulator cgroup cause conflicts, but we can't simply prohibit creating it, as other tunables are still useful, such as "emulator_period", which is used by API virDomainSetSchedulerParameter. So this patch doesn't prohibit creating the emulator cgroup, but inherit the nodeset from numad, and reset the affinity for domain process. * src/qemu/qemu_cgroup.h: Modify definition of qemuSetupCgroupForEmulator to accept the passed nodenet * src/qemu/qemu_cgroup.c: Set the affinity with the passed nodeset
70 lines
2.6 KiB
C
70 lines
2.6 KiB
C
/*
|
|
* qemu_cgroup.h: QEMU cgroup management
|
|
*
|
|
* Copyright (C) 2006-2007, 2009-2012 Red Hat, Inc.
|
|
* Copyright (C) 2006 Daniel P. Berrange
|
|
*
|
|
* This library is free software; you can redistribute it and/or
|
|
* modify it under the terms of the GNU Lesser General Public
|
|
* License as published by the Free Software Foundation; either
|
|
* version 2.1 of the License, or (at your option) any later version.
|
|
*
|
|
* This library is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
* Lesser General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU Lesser General Public
|
|
* License along with this library. If not, see
|
|
* <http://www.gnu.org/licenses/>.
|
|
*
|
|
* Author: Daniel P. Berrange <berrange@redhat.com>
|
|
*/
|
|
|
|
#ifndef __QEMU_CGROUP_H__
|
|
# define __QEMU_CGROUP_H__
|
|
|
|
# include "hostusb.h"
|
|
# include "domain_conf.h"
|
|
# include "qemu_conf.h"
|
|
|
|
struct _qemuCgroupData {
|
|
virDomainObjPtr vm;
|
|
virCgroupPtr cgroup;
|
|
};
|
|
typedef struct _qemuCgroupData qemuCgroupData;
|
|
|
|
bool qemuCgroupControllerActive(struct qemud_driver *driver,
|
|
int controller);
|
|
int qemuSetupDiskCgroup(virDomainObjPtr vm,
|
|
virCgroupPtr cgroup,
|
|
virDomainDiskDefPtr disk);
|
|
int qemuTeardownDiskCgroup(virDomainObjPtr vm,
|
|
virCgroupPtr cgroup,
|
|
virDomainDiskDefPtr disk);
|
|
int qemuSetupHostUsbDeviceCgroup(usbDevice *dev,
|
|
const char *path,
|
|
void *opaque);
|
|
int qemuSetupCgroup(struct qemud_driver *driver,
|
|
virDomainObjPtr vm,
|
|
virBitmapPtr nodemask);
|
|
int qemuSetupCgroupVcpuBW(virCgroupPtr cgroup,
|
|
unsigned long long period,
|
|
long long quota);
|
|
int qemuSetupCgroupVcpuPin(virCgroupPtr cgroup,
|
|
virDomainVcpuPinDefPtr *vcpupin,
|
|
int nvcpupin,
|
|
int vcpuid);
|
|
int qemuSetupCgroupEmulatorPin(virCgroupPtr cgroup, virBitmapPtr cpumask);
|
|
int qemuSetupCgroupForVcpu(struct qemud_driver *driver, virDomainObjPtr vm);
|
|
int qemuSetupCgroupForEmulator(struct qemud_driver *driver,
|
|
virDomainObjPtr vm,
|
|
virBitmapPtr nodemask);
|
|
int qemuRemoveCgroup(struct qemud_driver *driver,
|
|
virDomainObjPtr vm,
|
|
int quiet);
|
|
int qemuAddToCgroup(struct qemud_driver *driver,
|
|
virDomainDefPtr def);
|
|
|
|
#endif /* __QEMU_CGROUP_H__ */
|