[libvirt] vcpupin: fix cpu affinity setting bug of qemu driver
Osier Yang
jyang at redhat.com
Tue Jun 7 10:16:51 UTC 2011
On 06/07/2011 12:52 PM, Taku Izumi wrote:
>
> There is the case where cpu affinites for vcpu of qemu doesn't work
> correctly.
> For example, if only one vcpupin setting entry is provided and its setting
> is
> not for vcpu0, it doesn't work.
>
> # virsh dumpxml VM
> ...
> <vcpu>4</vcpu>
> <cputune>
> <vcpupin vcpu='3' cpuset='9-11'/>
> </cputune>
> ...
>
> # virsh start VM
> Domain VM started
>
> # virsh vcpuinfo VM
> VCPU: 0
> CPU: 31
> State: running
> CPU time: 2.5s
> CPU Affinity: yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy
>
> VCPU: 1
> CPU: 12
> State: running
> CPU time: 0.9s
> CPU Affinity: yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy
>
> VCPU: 2
> CPU: 30
> State: running
> CPU time: 1.5s
> CPU Affinity: yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy
>
> VCPU: 3
> CPU: 13
> State: running
> CPU time: 1.7s
> CPU Affinity: yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy
>
>
> This patch fixes this problem.
>
> Signed-off-by: Taku Izumi<izumi.taku at jp.fujitsu.com>
> ---
> src/qemu/qemu_process.c | 10 ++++------
> 1 file changed, 4 insertions(+), 6 deletions(-)
>
> Index: libvirt/src/qemu/qemu_process.c
> ===================================================================
> --- libvirt.orig/src/qemu/qemu_process.c
> +++ libvirt/src/qemu/qemu_process.c
> @@ -1194,7 +1194,7 @@ qemuProcessSetVcpuAffinites(virConnectPt
> virNodeInfo nodeinfo;
> pid_t vcpupid;
> unsigned char *cpumask;
> - int vcpu, cpumaplen, hostcpus, maxcpu;
> + int vcpu, cpumaplen, hostcpus, maxcpu, n;
> unsigned char *cpumap = NULL;
> int ret = -1;
>
> @@ -1223,14 +1223,12 @@ qemuProcessSetVcpuAffinites(virConnectPt
> return -1;
> }
>
> - for (vcpu = 0; vcpu< def->cputune.nvcpupin; vcpu++) {
> - if (vcpu != def->cputune.vcpupin[vcpu]->vcpuid)
> - continue;
Looks good to me, thanks for fixing it, ACK
Regards
Osier
> -
> + for (n = 0; n< def->cputune.nvcpupin; n++) {
> int i;
> + vcpu = def->cputune.vcpupin[n]->vcpuid;
>
> memset(cpumap, 0, cpumaplen);
> - cpumask = (unsigned char *)def->cputune.vcpupin[vcpu]->cpumask;
> + cpumask = (unsigned char *)def->cputune.vcpupin[n]->cpumask;
> vcpupid = priv->vcpupids[vcpu];
>
> /* Convert cpumask to bitmap here. */
>
>
More information about the libvir-list
mailing list