[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-arm] [PATCH for-2.10 05/23] numa: move source of default CPUs
From: |
David Gibson |
Subject: |
Re: [Qemu-arm] [PATCH for-2.10 05/23] numa: move source of default CPUs to NUMA node mapping into boards |
Date: |
Wed, 29 Mar 2017 13:24:49 +1100 |
User-agent: |
Mutt/1.8.0 (2017-02-23) |
On Tue, Mar 28, 2017 at 12:53:10PM +0200, Igor Mammedov wrote:
> On Tue, 28 Mar 2017 15:19:20 +1100
> David Gibson <address@hidden> wrote:
>
> > On Wed, Mar 22, 2017 at 02:32:30PM +0100, Igor Mammedov wrote:
> > > 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 <address@hidden>
[snip]
> > > +static CpuInstanceProperties
> > > +virt_cpu_index_to_props(MachineState *ms, unsigned cpu_index)
> > > +{
> > > + MachineClass *mc = MACHINE_GET_CLASS(ms);
> > > + const CPUArchIdList *possible_cpus = mc->possible_cpu_arch_ids(ms);
> > > +
> > > + assert(cpu_index < possible_cpus->len);
> > > + return possible_cpus->cpus[cpu_index].props;;
> > > +}
> > > +
> >
> > It seems a bit weird to have a machine specific hook to pull the
> > property information when one way or another it's coming from the
> > possible_cpus table, which is already constructed by a machine
> > specific hook. Could we add a range or list of cpu_index values to
> > each possible_cpus entry instead, and have a generic lookup of the
> > right entry based on that?
[snip]
> > > -static unsigned pc_cpu_index_to_socket_id(unsigned cpu_index)
> > > +static CpuInstanceProperties
> > > +pc_cpu_index_to_props(MachineState *ms, unsigned cpu_index)
> > > {
> > > - X86CPUTopoInfo topo;
> > > - x86_topo_ids_from_idx(smp_cores, smp_threads, cpu_index,
> > > - &topo);
> > > - return topo.pkg_id;
> > > + MachineClass *mc = MACHINE_GET_CLASS(ms);
> > > + const CPUArchIdList *possible_cpus = mc->possible_cpu_arch_ids(ms);
> > > +
> > > + assert(cpu_index < possible_cpus->len);
> > > + return possible_cpus->cpus[cpu_index].props;;
> >
> > Since the pc and arm version of this are basically identical, I wonder
> > if that should actually be the default implementation. If we need it
> > at all.
> ARM is still moving target and props are not really defined for it yet,
> so I'd like to keep it separate for now and when it stabilizes we can think
> about generalizing it.
Fair enough.
Any thoughts on my more general query above
--
David Gibson | I'll have my music baroque, and my code
david AT gibson.dropbear.id.au | minimalist, thank you. NOT _the_ _other_
| _way_ _around_!
http://www.ozlabs.org/~dgibson
signature.asc
Description: PGP signature
- [Qemu-arm] [PATCH for-2.10 01/23] tests: add CPUs to numa node mapping test, (continued)
- [Qemu-arm] [PATCH for-2.10 01/23] tests: add CPUs to numa node mapping test, Igor Mammedov, 2017/03/22
- [Qemu-arm] [PATCH for-2.10 02/23] hw/arm/virt: extract mp-affinity calculation in separate function, Igor Mammedov, 2017/03/22
- [Qemu-arm] [PATCH for-2.10 03/23] hw/arm/virt: use machine->possible_cpus for storing possible topology info, Igor Mammedov, 2017/03/22
- [Qemu-arm] [PATCH for-2.10 04/23] hw/arm/virt: explicitly allocate cpu_index for cpus, Igor Mammedov, 2017/03/22
- [Qemu-arm] [PATCH for-2.10 05/23] numa: move source of default CPUs to NUMA node mapping into boards, Igor Mammedov, 2017/03/22
[Qemu-arm] [PATCH for-2.10 06/23] spapr: add node-id property to sPAPR core, Igor Mammedov, 2017/03/22
[Qemu-arm] [PATCH for-2.10 07/23] pc: add node-id property to CPU, Igor Mammedov, 2017/03/22
[Qemu-arm] [PATCH for-2.10 08/23] virt-arm: add node-id property to CPU, Igor Mammedov, 2017/03/22
[Qemu-arm] [PATCH for-2.10 09/23] numa: add check that board supports cpu_index to node mapping, Igor Mammedov, 2017/03/22
[Qemu-arm] [PATCH for-2.10 10/23] numa: mirror cpu to node mapping in MachineState::possible_cpus, Igor Mammedov, 2017/03/22
[Qemu-arm] [PATCH for-2.10 11/23] numa: do default mapping based on possible_cpus instead of node_cpu bitmaps, Igor Mammedov, 2017/03/22