On 12/18/19 12:58 PM, Daniel P. Berrangé wrote: > If the host OS doesn't have NUMA present, we fallback to > populating fake NUMA info and the code thus assumes only a > single NUMA node. > > Unfortunately we also fallback to fake NUMA if numactl-devel > was not present, and in this case we can still have multiple > NUMA nodes. In this case we create all CPUs, but only the > CPUs in the first node have any data filled in, resulting in > capabilities like: > > <topology> > <cells num='1'> > <cell id='0'> > <memory unit='KiB'>15977572</memory> > <cpus num='48'> > <cpu id='0' socket_id='0' core_id='0' siblings='0'/> > <cpu id='1' socket_id='0' core_id='0' siblings='1'/> > <cpu id='2' socket_id='0' core_id='1' siblings='2'/> > <cpu id='3' socket_id='0' core_id='1' siblings='3'/> > <cpu id='4' socket_id='0' core_id='2' siblings='4'/> > <cpu id='5' socket_id='0' core_id='2' siblings='5'/> > <cpu id='6' socket_id='0' core_id='3' siblings='6'/> > <cpu id='7' socket_id='0' core_id='3' siblings='7'/> > <cpu id='8' socket_id='0' core_id='4' siblings='8'/> > <cpu id='9' socket_id='0' core_id='4' siblings='9'/> > <cpu id='10' socket_id='0' core_id='5' siblings='10'/> > <cpu id='11' socket_id='0' core_id='5' siblings='11'/> > <cpu id='0'/> > <cpu id='0'/> > <cpu id='0'/> > <cpu id='0'/> > <cpu id='0'/> > <cpu id='0'/> > <cpu id='0'/> > <cpu id='0'/> > <cpu id='0'/> > <cpu id='0'/> > <cpu id='0'/> > </cpus> > </cell> > </cells> > </topology> > > With this new code we get something slightly less broken > > <topology> > <cells num='4'> > <cell id='0'> > <memory unit='KiB'>15977572</memory> > <cpus num='12'> > <cpu id='0' socket_id='0' core_id='0' siblings='0-1'/> > <cpu id='1' socket_id='0' core_id='0' siblings='0-1'/> > <cpu id='2' socket_id='0' core_id='1' siblings='2-3'/> > <cpu id='3' socket_id='0' core_id='1' siblings='2-3'/> > <cpu id='4' socket_id='0' core_id='2' siblings='4-5'/> > <cpu id='5' socket_id='0' core_id='2' siblings='4-5'/> > <cpu id='6' socket_id='0' core_id='3' siblings='6-7'/> > <cpu id='7' socket_id='0' core_id='3' siblings='6-7'/> > <cpu id='8' socket_id='0' core_id='4' siblings='8-9'/> > <cpu id='9' socket_id='0' core_id='4' siblings='8-9'/> > <cpu id='10' socket_id='0' core_id='5' siblings='10-11'/> > <cpu id='11' socket_id='0' core_id='5' siblings='10-11'/> > </cpus> > </cell> > <cell id='0'> > <memory unit='KiB'>15977572</memory> > <cpus num='12'> > <cpu id='12' socket_id='0' core_id='0' siblings='12-13'/> > <cpu id='13' socket_id='0' core_id='0' siblings='12-13'/> > <cpu id='14' socket_id='0' core_id='1' siblings='14-15'/> > <cpu id='15' socket_id='0' core_id='1' siblings='14-15'/> > <cpu id='16' socket_id='0' core_id='2' siblings='16-17'/> > <cpu id='17' socket_id='0' core_id='2' siblings='16-17'/> > <cpu id='18' socket_id='0' core_id='3' siblings='18-19'/> > <cpu id='19' socket_id='0' core_id='3' siblings='18-19'/> > <cpu id='20' socket_id='0' core_id='4' siblings='20-21'/> > <cpu id='21' socket_id='0' core_id='4' siblings='20-21'/> > <cpu id='22' socket_id='0' core_id='5' siblings='22-23'/> > <cpu id='23' socket_id='0' core_id='5' siblings='22-23'/> > </cpus> > </cell> > </cells> > </topology> > > The topology at least now reflects what 'virsh nodeinfo' reports. > The main bug is that the CPU "id" values won't match what the Linux > host actually uses. > > Signed-off-by: Daniel P. Berrangé <berrange@xxxxxxxxxx> > --- > src/conf/capabilities.c | 67 ++++++++++++++++++++++------------------- > 1 file changed, 36 insertions(+), 31 deletions(-) Reviewed-by: Michal Privoznik <mprivozn@xxxxxxxxxx> Michal -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list