On 10/31/2012 08:58 PM, Hu Tao wrote: > On Wed, Oct 31, 2012 at 06:20:58PM +0100, Viktor Mihajlovski wrote: >> Modified the places where virNodeGetInfo was used for the purpose >> of obtaining the maximum node CPU number. Transparently falling >> back to virNodeGetInfo in case of failure. >> Wrote utility function vshNodeGetCPUCount to compute node CPU >> number. >> >> +static int >> +vshNodeGetCPUCount(virConnectPtr conn) >> +{ >> + int ret; >> + virNodeInfo nodeinfo; >> + >> + if ((ret = virNodeGetCPUMap(conn, NULL, NULL, 0)) < 0) { >> + /* fall back to nodeinfo */ >> + if (virNodeGetInfo(conn, &nodeinfo) == 0) { >> + ret = VIR_NODEINFO_MAXCPUS(nodeinfo); >> + } > > Isn't VIR_NODEINFO_MAXCPUS buggy? Either don't fall back to nodeinfo > or fix it. Hmm, and I just realized another issue - on the RHEL 5 box I tested, there is no /sys/devices/system/cpu/possible, so virNodeGetCPUCount() currently fails, even though virNodeGetInfo() succeeded. I'm going to hold off pushing this series until after 1.0.0, to avoid any chance of a last-minute unintentional regression. You were asking about VIR_NODEINFO_MAXCPUS: #define VIR_NODEINFO_MAXCPUS(nodeinfo) ((nodeinfo).nodes*(nodeinfo).sockets*(nodeinfo).cores*(nodeinfo).threads) I can confirm that virNodeGetInfo misbehaves if enough trailing cpus are offline, and therefore agree that we need to fix that API: # virsh nodeinfo CPU model: x86_64 CPU(s): 2 CPU frequency: 2801 MHz CPU socket(s): 1 Core(s) per socket: 2 Thread(s) per core: 1 NUMA cell(s): 1 Memory size: 3941792 KiB # echo 0 > /sys/devices/system/cpu/cpu1/online # virsh nodeinfo CPU model: x86_64 CPU(s): 1 CPU frequency: 2801 MHz CPU socket(s): 1 Core(s) per socket: 1 Thread(s) per core: 1 NUMA cell(s): 1 Memory size: 3941792 KiB That just changed things from 2 to 1. No fun. -- Eric Blake eblake@xxxxxxxxxx +1-919-301-3266 Libvirt virtualization library http://libvirt.org
Attachment:
signature.asc
Description: OpenPGP digital signature
-- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list