qemu: directly create virResctrlInfo ignoring capabilities

We always refresh the capabilities object when using virResctrlInfo
during process startup. This is undesirable overhead, because we can
just directly create a virResctrlInfo instead.

Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
This commit is contained in:
Daniel P. Berrangé 2019-11-29 14:04:01 +00:00
parent adf009b48f
commit 7be5fe66cd
2 changed files with 10 additions and 16 deletions

View File

@ -2724,29 +2724,24 @@ qemuProcessSetupEmulator(virDomainObjPtr vm)
static int
qemuProcessResctrlCreate(virQEMUDriverPtr driver,
virDomainObjPtr vm)
qemuProcessResctrlCreate(virDomainObjPtr vm)
{
int ret = -1;
size_t i = 0;
virCapsPtr caps = NULL;
qemuDomainObjPrivatePtr priv = vm->privateData;
g_autoptr(virResctrlInfo) resctrl = NULL;
if (!vm->def->nresctrls)
return 0;
/* Force capability refresh since resctrl info can change
* XXX: move cache info into virresctrl so caps are not needed */
caps = virQEMUDriverGetCapabilities(driver, true);
if (!caps)
if (!(resctrl = virResctrlInfoNew()))
return -1;
for (i = 0; i < vm->def->nresctrls; i++) {
size_t j = 0;
if (virResctrlAllocCreate(caps->host.resctrl,
if (virResctrlAllocCreate(resctrl,
vm->def->resctrls[i]->alloc,
priv->machineName) < 0)
goto cleanup;
return -1;
for (j = 0; j < vm->def->resctrls[i]->nmonitors; j++) {
virDomainResctrlMonDefPtr mon = NULL;
@ -2754,14 +2749,11 @@ qemuProcessResctrlCreate(virQEMUDriverPtr driver,
mon = vm->def->resctrls[i]->monitors[j];
if (virResctrlMonitorCreate(mon->instance,
priv->machineName) < 0)
goto cleanup;
return -1;
}
}
ret = 0;
cleanup:
virObjectUnref(caps);
return ret;
return 0;
}
@ -6882,7 +6874,7 @@ qemuProcessLaunch(virConnectPtr conn,
goto cleanup;
VIR_DEBUG("Setting up resctrl");
if (qemuProcessResctrlCreate(driver, vm) < 0)
if (qemuProcessResctrlCreate(vm) < 0)
goto cleanup;
VIR_DEBUG("Setting up managed PR daemon");

View File

@ -100,6 +100,8 @@ typedef virResctrlInfo *virResctrlInfoPtr;
virResctrlInfoPtr
virResctrlInfoNew(void);
G_DEFINE_AUTOPTR_CLEANUP_FUNC(virResctrlInfo, virObjectUnref);
int
virResctrlInfoGetCache(virResctrlInfoPtr resctrl,
unsigned int level,