qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PULL 11/13] target-i386: forward CPUID cache leaves wh


From: Paolo Bonzini
Subject: Re: [Qemu-devel] [PULL 11/13] target-i386: forward CPUID cache leaves when -cpu host is used
Date: Tue, 19 Nov 2013 11:47:01 +0100
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:17.0) Gecko/20130923 Thunderbird/17.0.9

Il 19/11/2013 11:25, Peter Lieven ha scritto:
>>
> 
> ~/git/qemu$ x86_64-softmmu/qemu-system-x86_64 -m 2048 -drive
> if=virtio,file=iscsi://172.21.200.45/iqn.2001-05.com.equallogic:0-8a0906-9d95c510a-344001d54795289f-2012-r2-1-7-0/0,format=raw,cache=writeback,aio=native
> -smp 2,cores=2,threads=1,sockets=1 -cpu host -monitor stdio -vnc :1
> -enable-kvm -usb -usbdevice tablet -vga cirrus -global
> virtio-blk-pci.scsi=off  -serial null  -parallel null -boot c

What is your host CPU's topology

> With just -smp 2 it works. However, have a look at my other email I
> think there is a bug in smp_parse, because -smp 2 yields
> cpus=2,cores=1,threads=1,sockets=1 whereas I think cores should
> be 2.

The code matching the comment in vl.c ("compute missing values, prefer
sockets over cores over threads") would be like "-smp
cpu=2,cores=1,threads=1,sockets=2", giving this code:

        if (cpus == 0) {
            sockets = sockets > 0 ? sockets : 1;
            cores = cores > 0 ? cores : 1;
            threads = threads > 0 ? threads : 1;
            cpus = cores * threads * sockets;
        } else if (sockets == 0) {
            cores = cores > 0 ? cores : 1;
            threads = threads > 0 ? threads : 1;
            sockets = cpus / (cores * threads);
        } else if (cores == 0) {
            threads = threads > 0 ? threads : 1;
            cores = cpus / (sockets * threads);
        } else {
            threads = cpus / (sockets * cores);
        }

What you suggest is cores over threads over sockets:

        if (cpus == 0) {
            cores = cores > 0 ? cores : 1;
            threads = threads > 0 ? threads : 1;
            sockets = sockets > 0 ? sockets : 1;
            cpus = cores * threads * sockets;
        } else if (cores == 0) {
            threads = threads > 0 ? threads : 1;
            sockets = sockets > 0 ? sockets : 1;
            cores = cpus / (threads * sockets);
        } else if (threads == 0) {
            sockets = sockets > 0 ? sockets : 1;
            threads = cpus / (cores * sockets);
        } else {
            sockets = cpus / (cores * threads);
        }

Can you test which of these two work?  But I agree it's best to disable
cache-leaf forwarding.

Paolo



reply via email to

[Prev in Thread] Current Thread [Next in Thread]