• D
    qemu_domain.c: NUMA CPUs auto-fill for incomplete topologies · baca59a5
    Daniel Henrique Barboza 提交于
    Libvirt allows the user to define an incomplete NUMA topology, where
    the sum of all CPUs in each cell is less than the total of VCPUs.
    What ends up happening is that QEMU allocates the non-enumerated CPUs
    in the first NUMA node. This behavior is being flagged as 'to be
    deprecated' at least since QEMU commit ec78f8114bc4 ("numa: use
    possible_cpus for not mapped CPUs check").
    
    In [1], Maxiwell suggested that we forbid the user to define such
    topologies. In his review [2], Peter Krempa pointed out that we can't
    break existing guests, and suggested that Libvirt should emulate the
    QEMU behavior of putting the remaining vCPUs in the first NUMA node
    in these cases.
    
    This patch implements Peter Krempa's suggestion. Since we're going
    to most likely end up with disjointed NUMA configuration in node 0
    after the auto-fill, we're making auto-fill dependent on QEMU_CAPS_NUMA.
    
    A following patch will update the documentation not just to inform
    about the auto-fill mechanic with incomplete NUMA topologies, but also
    to discourage the user to create such topologies in the future. This
    approach also makes Libvirt independent of whether QEMU changes
    its current behavior since we're either auto-filling the CPUs in
    node 0 or the user (hopefully) is aware that incomplete topologies,
    although supported in Libvirt, are to be avoided.
    
    [1] https://www.redhat.com/archives/libvir-list/2019-June/msg00224.html
    [2] https://www.redhat.com/archives/libvir-list/2019-June/msg00263.htmlSigned-off-by: NDaniel Henrique Barboza <danielhb413@gmail.com>
    Signed-off-by: NMichal Privoznik <mprivozn@redhat.com>
    Reviewed-by: NMichal Privoznik <mprivozn@redhat.com>
    baca59a5
qemu_driver.c 746.5 KB