It could be an issue of how the kernel presents the CPU topology.
Hardware: AMD Ryzen 3900X 12 core 24 threads (SMT) Host: Kernel 5.6.6, QEMU 4.2
virsh capabilities | grep "cpu id" <cpu id='0' socket_id='0' core_id='0' siblings='0,12'/> <cpu id='1' socket_id='0' core_id='1' siblings='1,13'/> <cpu id='2' socket_id='0' core_id='2' siblings='2,14'/> <cpu id='3' socket_id='0' core_id='4' siblings='3,15'/> <cpu id='4' socket_id='0' core_id='5' siblings='4,16'/> <cpu id='5' socket_id='0' core_id='6' siblings='5,17'/> <cpu id='6' socket_id='0' core_id='8' siblings='6,18'/> <cpu id='7' socket_id='0' core_id='9' siblings='7,19'/> <cpu id='8' socket_id='0' core_id='10' siblings='8,20'/> <cpu id='9' socket_id='0' core_id='12' siblings='9,21'/> <cpu id='10' socket_id='0' core_id='13' siblings='10,22'/> <cpu id='11' socket_id='0' core_id='14' siblings='11,23'/> <cpu id='12' socket_id='0' core_id='0' siblings='0,12'/> <cpu id='13' socket_id='0' core_id='1' siblings='1,13'/> <cpu id='14' socket_id='0' core_id='2' siblings='2,14'/> <cpu id='15' socket_id='0' core_id='4' siblings='3,15'/> <cpu id='16' socket_id='0' core_id='5' siblings='4,16'/> <cpu id='17' socket_id='0' core_id='6' siblings='5,17'/> <cpu id='18' socket_id='0' core_id='8' siblings='6,18'/> <cpu id='19' socket_id='0' core_id='9' siblings='7,19'/> <cpu id='20' socket_id='0' core_id='10' siblings='8,20'/> <cpu id='21' socket_id='0' core_id='12' siblings='9,21'/> <cpu id='22' socket_id='0' core_id='13' siblings='10,22'/> <cpu id='23' socket_id='0' core_id='14' siblings='11,23'/>
See how cpu id=3 gets core id=4, and cpu id=6 gets core id=8, etc.
cat /sys/devices/system/cpu/cpu2/topology/core_id 2
cat /sys/devices/system/cpu/cpu3/topology/core_id 4
However, the association of CPU IDs to L3 caches seems to be correct:
echo "Level CPU list";for file in /sys/devices/system/cpu/cpu*/cache/index3; do echo $(cat $file/id) " " $(cat $file/shared_cpu_list); done | sort --version-sort Level CPU list 0 0-2,12-14 0 0-2,12-14 0 0-2,12-14 0 0-2,12-14 0 0-2,12-14 0 0-2,12-14 1 3-5,15-17 1 3-5,15-17 1 3-5,15-17 1 3-5,15-17 1 3-5,15-17 1 3-5,15-17 2 6-8,18-20 2 6-8,18-20 2 6-8,18-20 2 6-8,18-20 2 6-8,18-20 2 6-8,18-20 3 9-11,21-23 3 9-11,21-23 3 9-11,21-23 3 9-11,21-23 3 9-11,21-23 3 9-11,21-23
There are 4 L3 caches with the correct CPU lists (6 CPUs/threads each).
Is it possible that this weird CPU ID enumeration is causing the confusion?
Haven't had a chance to check out QEMU 5.0, but hope to do that today.
It could be an issue of how the kernel presents the CPU topology.
Hardware: AMD Ryzen 3900X 12 core 24 threads (SMT)
Host: Kernel 5.6.6, QEMU 4.2
virsh capabilities | grep "cpu id"
<cpu id='0' socket_id='0' core_id='0' siblings='0,12'/>
<cpu id='1' socket_id='0' core_id='1' siblings='1,13'/>
<cpu id='2' socket_id='0' core_id='2' siblings='2,14'/>
<cpu id='3' socket_id='0' core_id='4' siblings='3,15'/>
<cpu id='4' socket_id='0' core_id='5' siblings='4,16'/>
<cpu id='5' socket_id='0' core_id='6' siblings='5,17'/>
<cpu id='6' socket_id='0' core_id='8' siblings='6,18'/>
<cpu id='7' socket_id='0' core_id='9' siblings='7,19'/>
<cpu id='8' socket_id='0' core_id='10' siblings='8,20'/>
<cpu id='9' socket_id='0' core_id='12' siblings='9,21'/>
<cpu id='10' socket_id='0' core_id='13' siblings='10,22'/>
<cpu id='11' socket_id='0' core_id='14' siblings='11,23'/>
<cpu id='12' socket_id='0' core_id='0' siblings='0,12'/>
<cpu id='13' socket_id='0' core_id='1' siblings='1,13'/>
<cpu id='14' socket_id='0' core_id='2' siblings='2,14'/>
<cpu id='15' socket_id='0' core_id='4' siblings='3,15'/>
<cpu id='16' socket_id='0' core_id='5' siblings='4,16'/>
<cpu id='17' socket_id='0' core_id='6' siblings='5,17'/>
<cpu id='18' socket_id='0' core_id='8' siblings='6,18'/>
<cpu id='19' socket_id='0' core_id='9' siblings='7,19'/>
<cpu id='20' socket_id='0' core_id='10' siblings='8,20'/>
<cpu id='21' socket_id='0' core_id='12' siblings='9,21'/>
<cpu id='22' socket_id='0' core_id='13' siblings='10,22'/>
<cpu id='23' socket_id='0' core_id='14' siblings='11,23'/>
See how cpu id=3 gets core id=4, and cpu id=6 gets core id=8, etc.
cat /sys/devices/ system/ cpu/cpu2/ topology/ core_id
2
cat /sys/devices/ system/ cpu/cpu3/ topology/ core_id
4
However, the association of CPU IDs to L3 caches seems to be correct:
echo "Level CPU list";for file in /sys/devices/ system/ cpu/cpu* /cache/ index3; do echo $(cat $file/id) " " $(cat $file/shared_ cpu_list) ; done | sort --version-sort
Level CPU list
0 0-2,12-14
0 0-2,12-14
0 0-2,12-14
0 0-2,12-14
0 0-2,12-14
0 0-2,12-14
1 3-5,15-17
1 3-5,15-17
1 3-5,15-17
1 3-5,15-17
1 3-5,15-17
1 3-5,15-17
2 6-8,18-20
2 6-8,18-20
2 6-8,18-20
2 6-8,18-20
2 6-8,18-20
2 6-8,18-20
3 9-11,21-23
3 9-11,21-23
3 9-11,21-23
3 9-11,21-23
3 9-11,21-23
3 9-11,21-23
There are 4 L3 caches with the correct CPU lists (6 CPUs/threads each).
Is it possible that this weird CPU ID enumeration is causing the confusion?
Haven't had a chance to check out QEMU 5.0, but hope to do that today.