[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-ppc] [Qemu-devel] [PATCH v3 06/18] numa: mirror cpu to node ma
From: |
Eduardo Habkost |
Subject: |
Re: [Qemu-ppc] [Qemu-devel] [PATCH v3 06/18] numa: mirror cpu to node mapping in MachineState::possible_cpus |
Date: |
Mon, 29 May 2017 10:36:47 -0300 |
User-agent: |
Mutt/1.8.0 (2017-02-23) |
On Mon, May 29, 2017 at 03:12:45PM +0200, Igor Mammedov wrote:
> On Fri, 26 May 2017 12:46:25 -0300
> Eduardo Habkost <address@hidden> wrote:
>
> > On Wed, May 10, 2017 at 01:29:50PM +0200, Igor Mammedov wrote:
> > [...]
> > > diff --git a/hw/core/machine.c b/hw/core/machine.c
> > > index 2482c63..420c8c4 100644
> > > --- a/hw/core/machine.c
> > > +++ b/hw/core/machine.c
> > > @@ -389,6 +389,102 @@ HotpluggableCPUList
> > > *machine_query_hotpluggable_cpus(MachineState *machine)
> > [...]
> > > +void machine_set_cpu_numa_node(MachineState *machine,
> > > + const CpuInstanceProperties *props, Error
> > > **errp)
> > > +{
> > [...]
> > > + /* force board to initialize possible_cpus if it hasn't been done
> > > yet */
> > > + mc->possible_cpu_arch_ids(machine);
> > [...]
> > > diff --git a/numa.c b/numa.c
> > > index 7182481..7db5dde 100644
> > > --- a/numa.c
> > > +++ b/numa.c
> > > @@ -170,6 +170,7 @@ static void parse_numa_node(MachineState *ms,
> > > NumaNodeOptions *node,
> > > exit(1);
> > > }
> > > for (cpus = node->cpus; cpus; cpus = cpus->next) {
> > > + CpuInstanceProperties props;
> > > if (cpus->value >= max_cpus) {
> > > error_setg(errp,
> > > "CPU index (%" PRIu16 ")"
> > > @@ -178,6 +179,10 @@ static void parse_numa_node(MachineState *ms,
> > > NumaNodeOptions *node,
> > > return;
> > > }
> > > bitmap_set(numa_info[nodenr].node_cpu, cpus->value, 1);
> > > + props = mc->cpu_index_to_instance_props(ms, cpus->value);
> > > + props.node_id = nodenr;
> > > + props.has_node_id = true;
> > > + machine_set_cpu_numa_node(ms, &props, &error_fatal);
> >
> > This triggers a call to possible_cpu_arch_ids() before
> > nb_numa_nodes is set to the actual number of NUMA nodes in the
> > machine, breaking the "node_id = ... % nb_numa_nodes"
> > initialization logic in pc, virt, and spapr.
> >
> > The initialization ordering between possible_cpus and NUMA data
> > structures looks very subtle and fragile. I still don't see an
> > obvious way to untangle that.
> It's unfixable unless we require specific ordering on CLI,
> i.e. first go all '-numa node,nodeid=[...]' options and only then
> the rest of [-numa node,cpus|cpu].
> We can do that for '-numa cpu' (probably should do enforce it for
> this new option anyway for saner CLI)
>
> but not for '-numa node,cpus' as it will break existing users
> that do not declare nodes first.
>
> > I suggest moving the default-NUMA-mapping code to a separate
> > machine class method, instead of relying on
> > possible_cpu_arch_ids() to initialize node_id.
> So as you suggest we have to postpone default values initialization
> till all the options are parsed:
>
> 1: strait-forward additional machine callback called from
> machine_run_board_init()
>
> or:
>
> 2: save extra callback and recalculate not yet set props.node_id-s
> in possible_cpu_arch_ids() if nb_numa_nodes is changed since
> the last invocation of possible_cpu_arch_ids()
>
> which one would you prefer?
Option 1 sounds simpler to me.
--
Eduardo
- [Qemu-ppc] [PATCH v3 02/18] spapr: add node-id property to sPAPR core, (continued)
- [Qemu-ppc] [PATCH v3 02/18] spapr: add node-id property to sPAPR core, Igor Mammedov, 2017/05/10
- [Qemu-ppc] [PATCH v3 03/18] pc: add node-id property to CPU, Igor Mammedov, 2017/05/10
- [Qemu-ppc] [PATCH v3 05/18] numa: add check that board supports cpu_index to node mapping, Igor Mammedov, 2017/05/10
- [Qemu-ppc] [PATCH v3 01/18] numa: move source of default CPUs to NUMA node mapping into boards, Igor Mammedov, 2017/05/10
- [Qemu-ppc] [PATCH v3 04/18] virt-arm: add node-id property to CPU, Igor Mammedov, 2017/05/10
- [Qemu-ppc] [PATCH v3 07/18] numa: do default mapping based on possible_cpus instead of node_cpu bitmaps, Igor Mammedov, 2017/05/10
- [Qemu-ppc] [PATCH v3 06/18] numa: mirror cpu to node mapping in MachineState::possible_cpus, Igor Mammedov, 2017/05/10
- Re: [Qemu-ppc] [Qemu-devel] [PATCH v3 06/18] numa: mirror cpu to node mapping in MachineState::possible_cpus, Igor Mammedov, 2017/05/30
- Re: [Qemu-ppc] [Qemu-devel] [PATCH v3 06/18] numa: mirror cpu to node mapping in MachineState::possible_cpus, Eduardo Habkost, 2017/05/30
[Qemu-ppc] [PATCH v3 08/18] pc: get numa node mapping from possible_cpus instead of numa_get_node_for_cpu(), Igor Mammedov, 2017/05/10
[Qemu-ppc] [PATCH v3 09/18] spapr: get numa node mapping from possible_cpus instead of numa_get_node_for_cpu(), Igor Mammedov, 2017/05/10
[Qemu-ppc] [PATCH v3 10/18] virt-arm: get numa node mapping from possible_cpus instead of numa_get_node_for_cpu(), Igor Mammedov, 2017/05/10
[Qemu-ppc] [PATCH v3 11/18] QMP: include CpuInstanceProperties into query_cpus output output, Igor Mammedov, 2017/05/10
[Qemu-ppc] [PATCH v3 13/18] numa: remove no longer need numa_post_machine_init(), Igor Mammedov, 2017/05/10
[Qemu-ppc] [PATCH v3 12/18] tests: numa: add case for QMP command query-cpus, Igor Mammedov, 2017/05/10