• L
    numa: equally distribute memory on nodes · 3bfe5716
    Laurent Vivier 提交于
    When there are more nodes than available memory to put the minimum
    allowed memory by node, all the memory is put on the last node.
    
    This is because we put (ram_size / nb_numa_nodes) &
    ~((1 << mc->numa_mem_align_shift) - 1); on each node, and in this
    case the value is 0. This is particularly true with pseries,
    as the memory must be aligned to 256MB.
    
    To avoid this problem, this patch uses an error diffusion algorithm [1]
    to distribute equally the memory on nodes.
    
    We introduce numa_auto_assign_ram() function in MachineClass
    to keep compatibility between machine type versions.
    The legacy function is used with pseries-2.9, pc-q35-2.9 and
    pc-i440fx-2.9 (and previous), the new one with all others.
    
    Example:
    
    qemu-system-ppc64 -S -nographic  -nodefaults -monitor stdio -m 1G -smp 8 \
                      -numa node -numa node -numa node \
                      -numa node -numa node -numa node
    
    Before:
    
    (qemu) info numa
    6 nodes
    node 0 cpus: 0 6
    node 0 size: 0 MB
    node 1 cpus: 1 7
    node 1 size: 0 MB
    node 2 cpus: 2
    node 2 size: 0 MB
    node 3 cpus: 3
    node 3 size: 0 MB
    node 4 cpus: 4
    node 4 size: 0 MB
    node 5 cpus: 5
    node 5 size: 1024 MB
    
    After:
    (qemu) info numa
    6 nodes
    node 0 cpus: 0 6
    node 0 size: 0 MB
    node 1 cpus: 1 7
    node 1 size: 256 MB
    node 2 cpus: 2
    node 2 size: 0 MB
    node 3 cpus: 3
    node 3 size: 256 MB
    node 4 cpus: 4
    node 4 size: 256 MB
    node 5 cpus: 5
    node 5 size: 256 MB
    
    [1] https://en.wikipedia.org/wiki/Error_diffusionSigned-off-by: NLaurent Vivier <lvivier@redhat.com>
    Message-Id: <20170502162955.1610-2-lvivier@redhat.com>
    Reviewed-by: NEduardo Habkost <ehabkost@redhat.com>
    [ehabkost: s/ram_size/size/ at numa_default_auto_assign_ram()]
    Signed-off-by: NEduardo Habkost <ehabkost@redhat.com>
    3bfe5716
pc_q35.c 12.4 KB