qemu, lxc: Change host CPU number detection logic.

The drivers for QEMU and LXC use virNodeGetInfo only to determine
the number of host CPUs. On Linux hosts nodeGetCPUCount has less
overhead.
This commit is contained in:
Viktor Mihajlovski 2012-11-13 13:54:37 +01:00 committed by Eric Blake
parent 689b64d666
commit a2b3d7cff8
3 changed files with 11 additions and 19 deletions

View File

@ -492,17 +492,15 @@ static int virLXCControllerSetupNUMAPolicy(virLXCControllerPtr ctrl)
static int virLXCControllerSetupCpuAffinity(virLXCControllerPtr ctrl)
{
int hostcpus, maxcpu = CPU_SETSIZE;
virNodeInfo nodeinfo;
virBitmapPtr cpumap, cpumapToSet;
VIR_DEBUG("Setting CPU affinity");
if (nodeGetInfo(NULL, &nodeinfo) < 0)
return -1;
/* setaffinity fails if you set bits for CPUs which
* aren't present, so we have to limit ourselves */
hostcpus = VIR_NODEINFO_MAXCPUS(nodeinfo);
if ((hostcpus = nodeGetCPUCount()) < 0)
return -1;
if (maxcpu > hostcpus)
maxcpu = hostcpus;

View File

@ -4170,7 +4170,6 @@ qemudDomainGetVcpuPinInfo(virDomainPtr dom,
struct qemud_driver *driver = dom->conn->privateData;
virDomainObjPtr vm = NULL;
virNodeInfo nodeinfo;
virDomainDefPtr targetDef = NULL;
int ret = -1;
int maxcpu, hostcpus, vcpu, pcpu;
@ -4206,9 +4205,9 @@ qemudDomainGetVcpuPinInfo(virDomainPtr dom,
/* Coverity didn't realize that targetDef must be set if we got here. */
sa_assert(targetDef);
if (nodeGetInfo(dom->conn, &nodeinfo) < 0)
if ((hostcpus = nodeGetCPUCount()) < 0)
goto cleanup;
hostcpus = VIR_NODEINFO_MAXCPUS(nodeinfo);
maxcpu = maplen * 8;
if (maxcpu > hostcpus)
maxcpu = hostcpus;
@ -4421,7 +4420,6 @@ qemudDomainGetEmulatorPinInfo(virDomainPtr dom,
{
struct qemud_driver *driver = dom->conn->privateData;
virDomainObjPtr vm = NULL;
virNodeInfo nodeinfo;
virDomainDefPtr targetDef = NULL;
int ret = -1;
int maxcpu, hostcpus, pcpu;
@ -4453,9 +4451,9 @@ qemudDomainGetEmulatorPinInfo(virDomainPtr dom,
/* Coverity didn't realize that targetDef must be set if we got here. */
sa_assert(targetDef);
if (nodeGetInfo(dom->conn, &nodeinfo) < 0)
if ((hostcpus = nodeGetCPUCount()) < 0)
goto cleanup;
hostcpus = VIR_NODEINFO_MAXCPUS(nodeinfo);
maxcpu = maplen * 8;
if (maxcpu > hostcpus)
maxcpu = hostcpus;
@ -4498,7 +4496,6 @@ qemudDomainGetVcpus(virDomainPtr dom,
int maplen) {
struct qemud_driver *driver = dom->conn->privateData;
virDomainObjPtr vm;
virNodeInfo nodeinfo;
int i, v, maxcpu, hostcpus;
int ret = -1;
qemuDomainObjPrivatePtr priv;
@ -4524,10 +4521,9 @@ qemudDomainGetVcpus(virDomainPtr dom,
priv = vm->privateData;
if (nodeGetInfo(dom->conn, &nodeinfo) < 0)
if ((hostcpus = nodeGetCPUCount()) < 0)
goto cleanup;
hostcpus = VIR_NODEINFO_MAXCPUS(nodeinfo);
maxcpu = maplen * 8;
if (maxcpu > hostcpus)
maxcpu = hostcpus;

View File

@ -1902,15 +1902,13 @@ qemuPrepareCpumap(struct qemud_driver *driver,
virBitmapPtr nodemask)
{
int i, hostcpus, maxcpu = QEMUD_CPUMASK_LEN;
virNodeInfo nodeinfo;
virBitmapPtr cpumap = NULL;
if (nodeGetInfo(NULL, &nodeinfo) < 0)
return NULL;
/* setaffinity fails if you set bits for CPUs which
* aren't present, so we have to limit ourselves */
hostcpus = VIR_NODEINFO_MAXCPUS(nodeinfo);
if ((hostcpus = nodeGetCPUCount()) < 0)
return NULL;
if (maxcpu > hostcpus)
maxcpu = hostcpus;