• V
    qemu: Allow use of hot plugged host CPUs if no affinity set · 283e2904
    Viktor Mihajlovski 提交于
    If the cpuset cgroup controller is disabled in /etc/libvirt/qemu.conf
    QEMU virtual machines can in principle use all host CPUs, even if they
    are hot plugged, if they have no explicit CPU affinity defined.
    
    However, there's libvirt code supposed to handle the situation where
    the libvirt daemon itself is not using all host CPUs. The code in
    qemuProcessInitCpuAffinity attempts to set an affinity mask including
    all defined host CPUs. Unfortunately, the resulting affinity mask for
    the process will not contain the offline CPUs. See also the
    sched_setaffinity(2) man page.
    
    That means that even if the host CPUs come online again, they won't be
    used by the QEMU process anymore. The same is true for newly hot
    plugged CPUs. So we are effectively preventing that QEMU uses all
    processors instead of enabling it to use them.
    
    It only makes sense to set the QEMU process affinity if we're able
    to actually grow the set of usable CPUs, i.e. if the process affinity
    is a subset of the online host CPUs.
    
    There's still the chance that for some reason the deliberately chosen
    libvirtd affinity matches the online host CPU mask by accident. In this
    case the behavior remains as it was before (CPUs offline while setting
    the affinity will not be used if they show up later on).
    Signed-off-by: NViktor Mihajlovski <mihajlov@linux.vnet.ibm.com>
    Tested-by: NMatthew Rosato <mjrosato@linux.vnet.ibm.com>
    283e2904
qemu_process.c 208.0 KB