Hi,
We have problem of host CPU topology parsing on special
platforms (general platforms are fine). E.g.
On a AMD machine with 48 CPUs [1] (4 sockets, 6 cores indeed
[2]), VIR_NODEINFO_MAXCPUS [3] will always return 24 as the
total CPU number.
As a result, a domain without "cpuset" or "placement='auto'"
(which drives numad) will only be pinned to part of the
host CPUs (in the case of the 48 CPUS AMD machine, domain
process will be pinned to only the first 24 CPUs), which
cause the performance lost. And actually it's also functional
bug, as the "cpuset" specified by user could be truncated.
If a domain uses "placement='auto'", and the advisory
nodeset returned from numad has node(s) exceeds the wrong
max CPU number, the domain will fail to start, as the
bitmask passed to sched_setaffinity is fully filled with
zero.
"nodeinfo.cpus" has the right number though, but I'm not
sure if it should be used as the max CPU number.
VIR_NODEINFO_MAXCPUS is used in many places, and I'd never
want to fix something here, but break other things there.
Anyone has thought on how to sort the fucky topology out?
[1]
http://fpaste.org/MTtz/
[2]
http://fpaste.org/mtoA/,
http://fpaste.org/EPLd/
[3] #define VIR_NODEINFO_MAXCPUS(nodeinfo)
((nodeinfo).nodes*(nodeinfo).sockets*(nodeinfo).cores*(nodeinfo).threads)
Regards,
Osier