On 05/29/2013 11:14 AM, Eric Blake wrote:
On 05/28/2013 08:53 PM, Guannan Ren wrote:
> ---
> docs/formatdomain.html.in | 4 +++-
> 1 file changed, 3 insertions(+), 1 deletion(-)
There are little document about how to set values of sockets, cores,
threads properly.
After going through qemu code, I summarize the package/cores/threads/
algorithm
which can be verified by 'cpuid' tool.
The following only explains the case of all the four number are given in
qemu commandline.
smp = n (argument to -smp)
nr_threads = smp / (cores * sockets)
nr_cores = cores
-smp 4, sockets=1,cores=4,threads=2 leads to: 1(physical cpu) *4(cores)
*1(thread)
One physical cpu contains four cores log processor which each contains
one thread logical processor.
0 means only one physical cpu package
pkg_id = cpu_index/nr_threads/nr_cores
0 = 0 / 1 / 4
0 = 1 / 1 / 4
0 = 2 / 1 / 4
0 = 3 / 1 / 4
3 means there are four multi-cores logical processor
core_id = cpu_index/nr_threads % nr_cores
0 = 0 / 1 % 4
1 = 1 / 1 % 4
2 = 2 / 1 % 4
3 = 3 / 1 % 4
0 means only one thread logical processor
smt_id = cpu_index % nr_threads
0 = 0 % 1
0 = 1 % 1
0 = 2 % 1
0 = 3 % 1
And the result could be verified by 'cpuid' tool running in fedora guest.
1st vcpu: (APIC synth): PKG_ID=0 CORE_ID=0 SMT_ID=0
2nd vcpu: (APIC synth): PKG_ID=0 CORE_ID=1 SMT_ID=0
3rd vcpu: (APIC synth): PKG_ID=0 CORE_ID=2 SMT_ID=0
4th vcpu: (APIC synth): PKG_ID=0 CORE_ID=3 SMT_ID=0
I tried it on several cpu topology:
-smp 16, sockets=2,cores=2,threads=1 leads to 2 * 2 * 4
There are two physical cpu package. Each of them contains two cores
logical processor and
each of the cores contains four hyper-threading logical processor.
The result could be verified by cpuid tool.
If the calculation is true, I think my patch is self-acked.
Guannan