diff options
| author | Igor Mammedov <imammedo@redhat.com> | 2017-05-10 13:29:45 +0200 |
|---|---|---|
| committer | Eduardo Habkost <ehabkost@redhat.com> | 2017-05-11 16:08:48 -0300 |
| commit | ea089eebbd80e61d3c3cd03741dd5d9535c551fc (patch) | |
| tree | f868c4e6bc6f311b8513aaf465da5f343f96d6db /include/hw/boards.h | |
| parent | d9c34f9c6c745f6a8123a872b33990ab564c614a (diff) | |
| download | focaccia-qemu-ea089eebbd80e61d3c3cd03741dd5d9535c551fc.tar.gz focaccia-qemu-ea089eebbd80e61d3c3cd03741dd5d9535c551fc.zip | |
numa: move source of default CPUs to NUMA node mapping into boards
Originally CPU threads were by default assigned in round-robin fashion. However it was causing issues in guest since CPU threads from the same socket/core could be placed on different NUMA nodes. Commit fb43b73b (pc: fix default VCPU to NUMA node mapping) fixed it by grouping threads within a socket on the same node introducing cpu_index_to_socket_id() callback and commit 20bb648d (spapr: Fix default NUMA node allocation for threads) reused callback to fix similar issues for SPAPR machine even though socket doesn't make much sense there. As result QEMU ended up having 3 default distribution rules used by 3 targets /virt-arm, spapr, pc/. In effort of moving NUMA mapping for CPUs into possible_cpus, generalize default mapping in numa.c by making boards decide on default mapping and let them explicitly tell generic numa code to which node a CPU thread belongs to by replacing cpu_index_to_socket_id() with @cpu_index_to_instance_props() which provides default node_id assigned by board to specified cpu_index. Signed-off-by: Igor Mammedov <imammedo@redhat.com> Reviewed-by: Eduardo Habkost <ehabkost@redhat.com> Message-Id: <1494415802-227633-2-git-send-email-imammedo@redhat.com> Reviewed-by: David Gibson <david@gibson.dropbear.id.au> Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
Diffstat (limited to 'include/hw/boards.h')
| -rw-r--r-- | include/hw/boards.h | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/include/hw/boards.h b/include/hw/boards.h index 99458eb859..3ffa255fb8 100644 --- a/include/hw/boards.h +++ b/include/hw/boards.h @@ -74,7 +74,10 @@ typedef struct { * of HotplugHandler object, which handles hotplug operation * for a given @dev. It may return NULL if @dev doesn't require * any actions to be performed by hotplug handler. - * @cpu_index_to_socket_id: + * @cpu_index_to_instance_props: + * used to provide @cpu_index to socket/core/thread number mapping, allowing + * legacy code to perform maping from cpu_index to topology properties + * Returns: tuple of socket/core/thread ids given cpu_index belongs to. * used to provide @cpu_index to socket number mapping, allowing * a machine to group CPU threads belonging to the same socket/package * Returns: socket number given cpu_index belongs to. @@ -141,7 +144,8 @@ struct MachineClass { HotplugHandler *(*get_hotplug_handler)(MachineState *machine, DeviceState *dev); - unsigned (*cpu_index_to_socket_id)(unsigned cpu_index); + CpuInstanceProperties (*cpu_index_to_instance_props)(MachineState *machine, + unsigned cpu_index); const CPUArchIdList *(*possible_cpu_arch_ids)(MachineState *machine); }; |