[libvirt] [PATCH v5 4/5] qemu: Add support to pin IOThreads to specific CPU
Ján Tomko
jtomko at redhat.com
Tue Mar 10 16:37:22 UTC 2015
On Tue, Mar 10, 2015 at 11:20:43AM -0400, John Ferlan wrote:
>
>
> On 03/10/2015 09:51 AM, Ján Tomko wrote:
> > On Fri, Mar 06, 2015 at 09:05:44AM -0500, John Ferlan wrote:
>
> <...snip...>
>
> >> +
> >> + /* pinning to all physical cpus means resetting,
> >
> > It doesn't.
> > By default the iothreads inherit the pinning from the domain's cpumask.
> >
> > A completely clear bitmap would be a better value to mean resetting,
> > since it makes no sense otherwise. But getting the cpumask in that case
> > won't be that easy.
> >
>
> So again - this is taken from qemuDomainPinVcpuFlags() - if it's invalid
> here, then it's invalid there as well.
Yes, that function might also not behave properly on the corner case of
pinning a vcpu to all CPUs.
But that one has been released for ages. This is new code that doesn't
have to repeat its mistakes.
>
> Is your objection the comment? Should it be striken or restated?
>
It's not the comment I have a problem with, it's the behavior that follows it.
Calling this API on a domain with a per-domain cpuset to pin an iothread
to all pCPUs will result in:
a) for AFFECT_LIVE
The iothread will get pinned to all pCPUs
The pininfo will get deleted from the definition. But missing pininfo
does not mean all pCPUs if there is a per-domain cpuset.
b) for AFFECT_CONFIG
The pininfo will be deleted, even though it does not match the
cpumask.
I think the easiest 'fix' is to just drop all the 'doReset' functionality
and do not allow deleting pininfo with this API.
Alternatively, (since you already rejected
VIR_DOMAIN_CPU_PLACEMENT_MODE_AUTO above) you can pin the iothread to
the domain's cpuset.
Also, the full bitmap is ambiguous - does it means 'reset
it to default' or 'pin it to all pCPUs'?
> >> + * so check if we can reset setting.
> >> + */
> >> + if (virBitmapIsAllSet(pcpumap))
> >> + doReset = true;
> >> +
> >> + if (flags & VIR_DOMAIN_AFFECT_LIVE) {
> >> +
> >> + if (priv->iothreadpids == NULL) {
> >> + virReportError(VIR_ERR_OPERATION_INVALID,
> >> + "%s", _("IOThread affinity is not supported"));
> >> + goto endjob;
> >> + }
> >> +
> >> + if (iothread_id > priv->niothreadpids) {
> >> + virReportError(VIR_ERR_INVALID_ARG,
> >> + _("iothread value out of range %d > %d"),
> >> + iothread_id, priv->niothreadpids);
> >> + goto endjob;
> >> + }
> >> +
> >> + if (vm->def->cputune.iothreadspin) {
> >> + /* The VcpuPinDefCopy works for IOThreads too */
> >
> > Maybe it should be renamed to something like virDomainPinDefCopy then?
> >
>
> Perhaps, but that seems outside the scope of these changes.
Yes, that one belongs to a separate patch.
> The 'reuse'
> of virDomainVcpuPinDefPtr by the IOThreads code was an "optimization"
> that could also then be generalized I suppose (eg change from
> virDomainVcpuPinDefPtr to virDomainPinDefPtr), but that's a much more
> invasive change which would seemingly require change the structure
> "vcpuid" value to just "id".
It's just a name change. And they are generalized already, it's just the
naming that's behind :)
Jan
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 819 bytes
Desc: Digital signature
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20150310/443923e6/attachment-0001.sig>
More information about the libvir-list
mailing list