mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2024-09-08 16:54:49 +00:00
qemu: Save numad advice into qemuDomainObjPrivate
Thanks to that we don't need to drag the pointer everywhere and future code will get cleaner. Signed-off-by: Martin Kletzander <mkletzan@redhat.com>
This commit is contained in:
parent
f801a81208
commit
c74d58ad47
@ -608,8 +608,7 @@ qemuSetupDevicesCgroup(virQEMUDriverPtr driver,
|
|||||||
|
|
||||||
|
|
||||||
int
|
int
|
||||||
qemuSetupCpusetMems(virDomainObjPtr vm,
|
qemuSetupCpusetMems(virDomainObjPtr vm)
|
||||||
virBitmapPtr nodemask)
|
|
||||||
{
|
{
|
||||||
virCgroupPtr cgroup_temp = NULL;
|
virCgroupPtr cgroup_temp = NULL;
|
||||||
qemuDomainObjPrivatePtr priv = vm->privateData;
|
qemuDomainObjPrivatePtr priv = vm->privateData;
|
||||||
@ -624,7 +623,7 @@ qemuSetupCpusetMems(virDomainObjPtr vm,
|
|||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
if (virDomainNumatuneMaybeFormatNodeset(vm->def->numatune,
|
if (virDomainNumatuneMaybeFormatNodeset(vm->def->numatune,
|
||||||
nodemask,
|
priv->autoNodeset,
|
||||||
&mem_mask, -1) < 0)
|
&mem_mask, -1) < 0)
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
|
|
||||||
@ -644,7 +643,6 @@ qemuSetupCpusetMems(virDomainObjPtr vm,
|
|||||||
|
|
||||||
static int
|
static int
|
||||||
qemuSetupCpusetCgroup(virDomainObjPtr vm,
|
qemuSetupCpusetCgroup(virDomainObjPtr vm,
|
||||||
virBitmapPtr nodemask,
|
|
||||||
virCapsPtr caps)
|
virCapsPtr caps)
|
||||||
{
|
{
|
||||||
qemuDomainObjPrivatePtr priv = vm->privateData;
|
qemuDomainObjPrivatePtr priv = vm->privateData;
|
||||||
@ -659,7 +657,7 @@ qemuSetupCpusetCgroup(virDomainObjPtr vm,
|
|||||||
|
|
||||||
if (vm->def->placement_mode == VIR_DOMAIN_CPU_PLACEMENT_MODE_AUTO) {
|
if (vm->def->placement_mode == VIR_DOMAIN_CPU_PLACEMENT_MODE_AUTO) {
|
||||||
virBitmapPtr cpumap;
|
virBitmapPtr cpumap;
|
||||||
if (!(cpumap = virCapabilitiesGetCpusForNodemask(caps, nodemask)))
|
if (!(cpumap = virCapabilitiesGetCpusForNodemask(caps, priv->autoNodeset)))
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
cpu_mask = virBitmapFormat(cpumap);
|
cpu_mask = virBitmapFormat(cpumap);
|
||||||
virBitmapFree(cpumap);
|
virBitmapFree(cpumap);
|
||||||
@ -823,8 +821,7 @@ qemuConnectCgroup(virQEMUDriverPtr driver,
|
|||||||
|
|
||||||
int
|
int
|
||||||
qemuSetupCgroup(virQEMUDriverPtr driver,
|
qemuSetupCgroup(virQEMUDriverPtr driver,
|
||||||
virDomainObjPtr vm,
|
virDomainObjPtr vm)
|
||||||
virBitmapPtr nodemask)
|
|
||||||
{
|
{
|
||||||
qemuDomainObjPrivatePtr priv = vm->privateData;
|
qemuDomainObjPrivatePtr priv = vm->privateData;
|
||||||
virCapsPtr caps = NULL;
|
virCapsPtr caps = NULL;
|
||||||
@ -857,7 +854,7 @@ qemuSetupCgroup(virQEMUDriverPtr driver,
|
|||||||
if (qemuSetupCpuCgroup(driver, vm) < 0)
|
if (qemuSetupCpuCgroup(driver, vm) < 0)
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
|
|
||||||
if (qemuSetupCpusetCgroup(vm, nodemask, caps) < 0)
|
if (qemuSetupCpusetCgroup(vm, caps) < 0)
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
|
|
||||||
ret = 0;
|
ret = 0;
|
||||||
@ -1042,8 +1039,7 @@ qemuSetupCgroupForVcpu(virDomainObjPtr vm)
|
|||||||
|
|
||||||
int
|
int
|
||||||
qemuSetupCgroupForEmulator(virQEMUDriverPtr driver,
|
qemuSetupCgroupForEmulator(virQEMUDriverPtr driver,
|
||||||
virDomainObjPtr vm,
|
virDomainObjPtr vm)
|
||||||
virBitmapPtr nodemask)
|
|
||||||
{
|
{
|
||||||
virBitmapPtr cpumask = NULL;
|
virBitmapPtr cpumask = NULL;
|
||||||
virBitmapPtr cpumap = NULL;
|
virBitmapPtr cpumap = NULL;
|
||||||
@ -1079,7 +1075,7 @@ qemuSetupCgroupForEmulator(virQEMUDriverPtr driver,
|
|||||||
goto cleanup;
|
goto cleanup;
|
||||||
|
|
||||||
if (def->placement_mode == VIR_DOMAIN_CPU_PLACEMENT_MODE_AUTO) {
|
if (def->placement_mode == VIR_DOMAIN_CPU_PLACEMENT_MODE_AUTO) {
|
||||||
if (!(cpumap = qemuPrepareCpumap(driver, nodemask)))
|
if (!(cpumap = qemuPrepareCpumap(driver, priv->autoNodeset)))
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
cpumask = cpumap;
|
cpumask = cpumap;
|
||||||
} else if (def->cputune.emulatorpin) {
|
} else if (def->cputune.emulatorpin) {
|
||||||
|
@ -45,10 +45,8 @@ int qemuTeardownHostdevCgroup(virDomainObjPtr vm,
|
|||||||
int qemuConnectCgroup(virQEMUDriverPtr driver,
|
int qemuConnectCgroup(virQEMUDriverPtr driver,
|
||||||
virDomainObjPtr vm);
|
virDomainObjPtr vm);
|
||||||
int qemuSetupCgroup(virQEMUDriverPtr driver,
|
int qemuSetupCgroup(virQEMUDriverPtr driver,
|
||||||
virDomainObjPtr vm,
|
virDomainObjPtr vm);
|
||||||
virBitmapPtr nodemask);
|
int qemuSetupCpusetMems(virDomainObjPtr vm);
|
||||||
int qemuSetupCpusetMems(virDomainObjPtr vm,
|
|
||||||
virBitmapPtr nodemask);
|
|
||||||
int qemuSetupCgroupVcpuBW(virCgroupPtr cgroup,
|
int qemuSetupCgroupVcpuBW(virCgroupPtr cgroup,
|
||||||
unsigned long long period,
|
unsigned long long period,
|
||||||
long long quota);
|
long long quota);
|
||||||
@ -64,8 +62,7 @@ int qemuSetupCgroupIOThreadsPin(virCgroupPtr cgroup,
|
|||||||
int qemuSetupCgroupForVcpu(virDomainObjPtr vm);
|
int qemuSetupCgroupForVcpu(virDomainObjPtr vm);
|
||||||
int qemuSetupCgroupForIOThreads(virDomainObjPtr vm);
|
int qemuSetupCgroupForIOThreads(virDomainObjPtr vm);
|
||||||
int qemuSetupCgroupForEmulator(virQEMUDriverPtr driver,
|
int qemuSetupCgroupForEmulator(virQEMUDriverPtr driver,
|
||||||
virDomainObjPtr vm,
|
virDomainObjPtr vm);
|
||||||
virBitmapPtr nodemask);
|
|
||||||
int qemuRemoveCgroup(virQEMUDriverPtr driver, virDomainObjPtr vm);
|
int qemuRemoveCgroup(virQEMUDriverPtr driver, virDomainObjPtr vm);
|
||||||
int qemuAddToCgroup(virDomainObjPtr vm);
|
int qemuAddToCgroup(virDomainObjPtr vm);
|
||||||
|
|
||||||
|
@ -451,6 +451,7 @@ qemuDomainObjPrivateFree(void *data)
|
|||||||
qemuAgentClose(priv->agent);
|
qemuAgentClose(priv->agent);
|
||||||
}
|
}
|
||||||
VIR_FREE(priv->cleanupCallbacks);
|
VIR_FREE(priv->cleanupCallbacks);
|
||||||
|
virBitmapFree(priv->autoNodeset);
|
||||||
VIR_FREE(priv);
|
VIR_FREE(priv);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -187,6 +187,7 @@ struct _qemuDomainObjPrivate {
|
|||||||
char **qemuDevices; /* NULL-terminated list of devices aliases known to QEMU */
|
char **qemuDevices; /* NULL-terminated list of devices aliases known to QEMU */
|
||||||
|
|
||||||
bool hookRun; /* true if there was a hook run over this domain */
|
bool hookRun; /* true if there was a hook run over this domain */
|
||||||
|
virBitmapPtr autoNodeset;
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef enum {
|
typedef enum {
|
||||||
|
@ -2377,12 +2377,12 @@ qemuPrepareCpumap(virQEMUDriverPtr driver,
|
|||||||
*/
|
*/
|
||||||
static int
|
static int
|
||||||
qemuProcessInitCpuAffinity(virQEMUDriverPtr driver,
|
qemuProcessInitCpuAffinity(virQEMUDriverPtr driver,
|
||||||
virDomainObjPtr vm,
|
virDomainObjPtr vm)
|
||||||
virBitmapPtr nodemask)
|
|
||||||
{
|
{
|
||||||
int ret = -1;
|
int ret = -1;
|
||||||
virBitmapPtr cpumap = NULL;
|
virBitmapPtr cpumap = NULL;
|
||||||
virBitmapPtr cpumapToSet = NULL;
|
virBitmapPtr cpumapToSet = NULL;
|
||||||
|
qemuDomainObjPrivatePtr priv = vm->privateData;
|
||||||
|
|
||||||
if (!vm->pid) {
|
if (!vm->pid) {
|
||||||
virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
|
virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
|
||||||
@ -2390,7 +2390,7 @@ qemuProcessInitCpuAffinity(virQEMUDriverPtr driver,
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!(cpumap = qemuPrepareCpumap(driver, nodemask)))
|
if (!(cpumap = qemuPrepareCpumap(driver, priv->autoNodeset)))
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
if (vm->def->placement_mode == VIR_DOMAIN_CPU_PLACEMENT_MODE_AUTO) {
|
if (vm->def->placement_mode == VIR_DOMAIN_CPU_PLACEMENT_MODE_AUTO) {
|
||||||
@ -3041,13 +3041,13 @@ struct qemuProcessHookData {
|
|||||||
virConnectPtr conn;
|
virConnectPtr conn;
|
||||||
virDomainObjPtr vm;
|
virDomainObjPtr vm;
|
||||||
virQEMUDriverPtr driver;
|
virQEMUDriverPtr driver;
|
||||||
virBitmapPtr nodemask;
|
|
||||||
virQEMUDriverConfigPtr cfg;
|
virQEMUDriverConfigPtr cfg;
|
||||||
};
|
};
|
||||||
|
|
||||||
static int qemuProcessHook(void *data)
|
static int qemuProcessHook(void *data)
|
||||||
{
|
{
|
||||||
struct qemuProcessHookData *h = data;
|
struct qemuProcessHookData *h = data;
|
||||||
|
qemuDomainObjPrivatePtr priv = h->vm->privateData;
|
||||||
int ret = -1;
|
int ret = -1;
|
||||||
int fd;
|
int fd;
|
||||||
virBitmapPtr nodeset = NULL;
|
virBitmapPtr nodeset = NULL;
|
||||||
@ -3084,7 +3084,7 @@ static int qemuProcessHook(void *data)
|
|||||||
|
|
||||||
mode = virDomainNumatuneGetMode(h->vm->def->numatune, -1);
|
mode = virDomainNumatuneGetMode(h->vm->def->numatune, -1);
|
||||||
nodeset = virDomainNumatuneGetNodeset(h->vm->def->numatune,
|
nodeset = virDomainNumatuneGetNodeset(h->vm->def->numatune,
|
||||||
h->nodemask, -1);
|
priv->autoNodeset, -1);
|
||||||
|
|
||||||
if (virNumaSetupMemoryPolicy(mode, nodeset) < 0)
|
if (virNumaSetupMemoryPolicy(mode, nodeset) < 0)
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
@ -4426,7 +4426,7 @@ int qemuProcessStart(virConnectPtr conn,
|
|||||||
if (virBitmapParse(nodeset, 0, &nodemask, VIR_DOMAIN_CPUMASK_LEN) < 0)
|
if (virBitmapParse(nodeset, 0, &nodemask, VIR_DOMAIN_CPUMASK_LEN) < 0)
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
}
|
}
|
||||||
hookData.nodemask = nodemask;
|
priv->autoNodeset = nodemask;
|
||||||
|
|
||||||
/* "volume" type disk's source must be translated before
|
/* "volume" type disk's source must be translated before
|
||||||
* cgroup and security setting.
|
* cgroup and security setting.
|
||||||
@ -4630,13 +4630,13 @@ int qemuProcessStart(virConnectPtr conn,
|
|||||||
}
|
}
|
||||||
|
|
||||||
VIR_DEBUG("Setting up domain cgroup (if required)");
|
VIR_DEBUG("Setting up domain cgroup (if required)");
|
||||||
if (qemuSetupCgroup(driver, vm, nodemask) < 0)
|
if (qemuSetupCgroup(driver, vm) < 0)
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
|
|
||||||
/* This must be done after cgroup placement to avoid resetting CPU
|
/* This must be done after cgroup placement to avoid resetting CPU
|
||||||
* affinity */
|
* affinity */
|
||||||
if (!vm->def->cputune.emulatorpin &&
|
if (!vm->def->cputune.emulatorpin &&
|
||||||
qemuProcessInitCpuAffinity(driver, vm, nodemask) < 0)
|
qemuProcessInitCpuAffinity(driver, vm) < 0)
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
|
|
||||||
VIR_DEBUG("Setting domain security labels");
|
VIR_DEBUG("Setting domain security labels");
|
||||||
@ -4683,7 +4683,7 @@ int qemuProcessStart(virConnectPtr conn,
|
|||||||
goto cleanup;
|
goto cleanup;
|
||||||
|
|
||||||
VIR_DEBUG("Setting cgroup for emulator (if required)");
|
VIR_DEBUG("Setting cgroup for emulator (if required)");
|
||||||
if (qemuSetupCgroupForEmulator(driver, vm, nodemask) < 0)
|
if (qemuSetupCgroupForEmulator(driver, vm) < 0)
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
|
|
||||||
VIR_DEBUG("Setting affinity of emulator threads");
|
VIR_DEBUG("Setting affinity of emulator threads");
|
||||||
@ -4710,7 +4710,7 @@ int qemuProcessStart(virConnectPtr conn,
|
|||||||
goto cleanup;
|
goto cleanup;
|
||||||
|
|
||||||
VIR_DEBUG("Setting up post-init cgroup restrictions");
|
VIR_DEBUG("Setting up post-init cgroup restrictions");
|
||||||
if (qemuSetupCpusetMems(vm, nodemask) < 0)
|
if (qemuSetupCpusetMems(vm) < 0)
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
|
|
||||||
VIR_DEBUG("Detecting VCPU PIDs");
|
VIR_DEBUG("Detecting VCPU PIDs");
|
||||||
@ -4848,7 +4848,6 @@ int qemuProcessStart(virConnectPtr conn,
|
|||||||
* if we failed to initialize the now running VM. kill it off and
|
* if we failed to initialize the now running VM. kill it off and
|
||||||
* pretend we never started it */
|
* pretend we never started it */
|
||||||
VIR_FREE(nodeset);
|
VIR_FREE(nodeset);
|
||||||
virBitmapFree(nodemask);
|
|
||||||
virCommandFree(cmd);
|
virCommandFree(cmd);
|
||||||
VIR_FORCE_CLOSE(logfile);
|
VIR_FORCE_CLOSE(logfile);
|
||||||
if (priv->mon)
|
if (priv->mon)
|
||||||
|
Loading…
Reference in New Issue
Block a user