2010-12-16 16:10:54 +00:00
|
|
|
/*
|
|
|
|
* qemu_cgroup.h: QEMU cgroup management
|
|
|
|
*
|
2014-07-08 07:59:49 +00:00
|
|
|
* Copyright (C) 2006-2007, 2009-2014 Red Hat, Inc.
|
2010-12-16 16:10:54 +00:00
|
|
|
* 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
|
2012-09-20 22:30:55 +00:00
|
|
|
* License along with this library. If not, see
|
2012-07-21 10:06:23 +00:00
|
|
|
* <http://www.gnu.org/licenses/>.
|
2010-12-16 16:10:54 +00:00
|
|
|
*
|
|
|
|
* Author: Daniel P. Berrange <berrange@redhat.com>
|
|
|
|
*/
|
|
|
|
|
|
|
|
#ifndef __QEMU_CGROUP_H__
|
|
|
|
# define __QEMU_CGROUP_H__
|
|
|
|
|
2012-12-12 17:04:51 +00:00
|
|
|
# include "virusb.h"
|
2013-03-21 14:40:29 +00:00
|
|
|
# include "vircgroup.h"
|
2010-12-16 16:10:54 +00:00
|
|
|
# include "domain_conf.h"
|
|
|
|
# include "qemu_conf.h"
|
|
|
|
|
2014-06-18 11:09:05 +00:00
|
|
|
int qemuSetImageCgroup(virDomainObjPtr vm,
|
|
|
|
virStorageSourcePtr src,
|
|
|
|
bool deny);
|
2012-10-17 20:22:24 +00:00
|
|
|
int qemuSetupDiskCgroup(virDomainObjPtr vm,
|
2010-12-16 16:10:54 +00:00
|
|
|
virDomainDiskDefPtr disk);
|
2012-10-17 20:22:24 +00:00
|
|
|
int qemuTeardownDiskCgroup(virDomainObjPtr vm,
|
2010-12-16 16:10:54 +00:00
|
|
|
virDomainDiskDefPtr disk);
|
2013-04-29 17:15:26 +00:00
|
|
|
int qemuSetupHostdevCGroup(virDomainObjPtr vm,
|
|
|
|
virDomainHostdevDefPtr dev)
|
|
|
|
ATTRIBUTE_RETURN_CHECK;
|
|
|
|
int qemuTeardownHostdevCgroup(virDomainObjPtr vm,
|
|
|
|
virDomainHostdevDefPtr dev)
|
|
|
|
ATTRIBUTE_RETURN_CHECK;
|
2013-07-22 12:59:28 +00:00
|
|
|
int qemuConnectCgroup(virQEMUDriverPtr driver,
|
|
|
|
virDomainObjPtr vm);
|
2012-11-28 16:43:10 +00:00
|
|
|
int qemuSetupCgroup(virQEMUDriverPtr driver,
|
2012-05-12 12:53:15 +00:00
|
|
|
virDomainObjPtr vm,
|
2012-09-14 07:47:00 +00:00
|
|
|
virBitmapPtr nodemask);
|
2014-07-08 07:59:49 +00:00
|
|
|
int qemuSetupCgroupPostInit(virDomainObjPtr vm,
|
|
|
|
virBitmapPtr nodemask);
|
2011-07-21 02:10:31 +00:00
|
|
|
int qemuSetupCgroupVcpuBW(virCgroupPtr cgroup,
|
|
|
|
unsigned long long period,
|
|
|
|
long long quota);
|
2012-08-21 09:18:30 +00:00
|
|
|
int qemuSetupCgroupVcpuPin(virCgroupPtr cgroup,
|
|
|
|
virDomainVcpuPinDefPtr *vcpupin,
|
|
|
|
int nvcpupin,
|
|
|
|
int vcpuid);
|
2012-10-17 14:39:31 +00:00
|
|
|
int qemuSetupCgroupEmulatorPin(virCgroupPtr cgroup, virBitmapPtr cpumask);
|
2014-09-03 13:05:02 +00:00
|
|
|
int qemuSetupCgroupIOThreadsPin(virCgroupPtr cgroup,
|
|
|
|
virDomainVcpuPinDefPtr *iothreadspin,
|
|
|
|
int niothreadspin,
|
|
|
|
int iothreadid);
|
2013-03-21 14:40:29 +00:00
|
|
|
int qemuSetupCgroupForVcpu(virDomainObjPtr vm);
|
2014-09-03 13:05:02 +00:00
|
|
|
int qemuSetupCgroupForIOThreads(virDomainObjPtr vm);
|
2012-11-28 16:43:10 +00:00
|
|
|
int qemuSetupCgroupForEmulator(virQEMUDriverPtr driver,
|
qemu: Keep the affinity when creating cgroup for emulator thread
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
2012-10-24 09:27:56 +00:00
|
|
|
virDomainObjPtr vm,
|
|
|
|
virBitmapPtr nodemask);
|
2014-09-25 11:32:58 +00:00
|
|
|
int qemuRemoveCgroup(virQEMUDriverPtr driver, virDomainObjPtr vm);
|
2013-03-21 14:40:29 +00:00
|
|
|
int qemuAddToCgroup(virDomainObjPtr vm);
|
2010-12-16 16:10:54 +00:00
|
|
|
|
|
|
|
#endif /* __QEMU_CGROUP_H__ */
|