On 03/08/2015 07:03 AM, Ján Tomko wrote: > On Fri, Mar 06, 2015 at 01:47:06PM -0500, John Ferlan wrote: >> Based on jtomko's review of the IOThread series and my foray into the >> libvirt-perl bindings, these patches make the following adjustments: >> >> Patch 1 - Found while generating the virsh iothreadpin description, the >> vcpupin description had a few missing words >> Patch 2 - While working on the libvirt-perl bindings - I found I was a >> bit overaggressive with my GetIOThreadsInfo interface with regard >> to checking ReadOnly unnecessarily >> Patch 3 - Adjust the IOThread CPU Affnity algorithm based on jtomko's review >> comments >> Patch 4 - Fallout because I ran the patches through my Coverity checker. >> Patch 5 - Similar to IOThread - adjust the GetVcpuInfo CPU Affinity algorithm >> for the returned cpumap >> Patch 5 - Similar to IOThread - adjust the GetEmulatorInfo CPU Affinity >> algorithm for the returned cpumap >> >> John Ferlan (6): >> Fix syntax for vcpupin description >> Remove ReadOnly check for GetIOThreadsInfo >> qemu: Change/Fix IOThread CPU affinity bitmap manipulation >> qemu: Resolve Coverity CHECKED_RETURN issue >> qemu: Change qemuDomainGetVcpuPinInfo bitmap manipulation >> qemu: Change qemuDomainGetEmulatorPinInfo bitmap manipulation >> >> src/libvirt-domain.c | 1 - >> src/qemu/qemu_driver.c | 177 +++++++++++++++++++++---------------------------- >> tools/virsh.pod | 4 +- >> 3 files changed, 76 insertions(+), 106 deletions(-) > > ACK series, thanks for touching up VcpuInfo and EmulatorInfo as well! > > There's one bug that I noticed: > If the CPUs are pinned domain-wide, that is: > <vcpu placement='static' cpuset='0-1'>4</vcpu> > <iothreads>2</iothreads> > > Both vcpu threads and iothreads will inherit this pinning. > > For a shutoff domain, vcpupininfo will display 0-1 for all vcpus, but > iothreadsinfo shows 0-4, even though they will get pinned to 0-1 after > domain startup. > > Turns out the vpcupin info is filled for all the vcpus when the XML is > parsed since commit 10f8a45deb0f057a70a0d49794d3a3d19d17dceb > > Falling back to targetDef->cpumask in qemuDomainGetIOThreadsConfig > (as qemuDomainGetEmulatorPinInfo does) would solve that too. > Squashed the following into patch 4 to address this... diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c index 2a9db1b..ceceafa 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -5653,6 +5653,8 @@ qemuDomainGetIOThreadsConfig(virDomainDefPtr targetDef, virDomainIOThreadInfoPtr **info) { virDomainIOThreadInfoPtr *info_ret = NULL; + virBitmapPtr bitmap = NULL; + virBitmapPtr cpumask = NULL; int hostcpus; size_t i; int ret = -1; @@ -5668,7 +5670,6 @@ qemuDomainGetIOThreadsConfig(virDomainDefPtr targetDef, for (i = 0; i < targetDef->iothreads; i++) { virDomainVcpuPinDefPtr pininfo; - virBitmapPtr bitmap = NULL; if (VIR_ALLOC(info_ret[i]) < 0) goto cleanup; @@ -5681,20 +5682,22 @@ qemuDomainGetIOThreadsConfig(virDomainDefPtr targetDef, targetDef->cputune.niothreadspin, i + 1); if (!pininfo) { - if (!(bitmap = virBitmapNew(hostcpus))) - goto cleanup; - virBitmapSetAll(bitmap); + if (targetDef->cpumask) { + cpumask = targetDef->cpumask; + } else { + if (!(bitmap = virBitmapNew(hostcpus))) + goto cleanup; + virBitmapSetAll(bitmap); + cpumask = bitmap; + } } else { - bitmap = pininfo->cpumask; + cpumask = pininfo->cpumask; } - if (virBitmapToData(bitmap, &info_ret[i]->cpumap, - &info_ret[i]->cpumaplen) < 0) { - if (!pininfo) - virBitmapFree(bitmap); + if (virBitmapToData(cpumask, &info_ret[i]->cpumap, + &info_ret[i]->cpumaplen) < 0) goto cleanup; - } - if (!pininfo) - virBitmapFree(bitmap); + virBitmapFree(bitmap); + bitmap = NULL; } *info = info_ret; @@ -5707,6 +5710,7 @@ qemuDomainGetIOThreadsConfig(virDomainDefPtr targetDef, virDomainIOThreadsInfoFree(info_ret[i]); VIR_FREE(info_ret); } + virBitmapFree(bitmap); return ret; } Replaced the overly aggressively removed lines from patch 5... I will send a separate patch for the domain_conf.c change that addresses any needs for iothreadspin setup to use the def->cpumask. and pushed. Tks - John -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list