[PATCH v9 0/6] hw/arm/virt: Fix CPU's default NUMA node ID

Gavin Shan posted 6 patches 1 year, 11 months ago
Patches applied successfully (tree, apply log)
git fetch https://github.com/patchew-project/qemu tags/patchew/20220503140304.855514-1-gshan@redhat.com
Maintainers: "Michael S. Tsirkin" <mst@redhat.com>, Igor Mammedov <imammedo@redhat.com>, Ani Sinha <ani@anisinha.ca>, Peter Maydell <peter.maydell@linaro.org>, Eduardo Habkost <eduardo@habkost.net>, Marcel Apfelbaum <marcel.apfelbaum@gmail.com>, "Philippe Mathieu-Daudé" <f4bug@amsat.org>, Yanan Wang <wangyanan55@huawei.com>, Eric Blake <eblake@redhat.com>, Markus Armbruster <armbru@redhat.com>, Thomas Huth <thuth@redhat.com>, Laurent Vivier <lvivier@redhat.com>, Paolo Bonzini <pbonzini@redhat.com>
hw/acpi/aml-build.c        | 111 ++++++++++++++++---------------------
hw/arm/virt.c              |  19 ++++++-
hw/core/machine-hmp-cmds.c |   4 ++
hw/core/machine.c          |  16 ++++++
qapi/machine.json          |   6 +-
tests/qtest/numa-test.c    |  19 +++++--
6 files changed, 102 insertions(+), 73 deletions(-)
[PATCH v9 0/6] hw/arm/virt: Fix CPU's default NUMA node ID
Posted by Gavin Shan 1 year, 11 months ago
When the CPU-to-NUMA association isn't provided by user, the default NUMA
node ID for the specific CPU is returned from virt_get_default_cpu_node_id().
Unfortunately, the default NUMA node ID breaks socket boundary and leads to
the broken CPU topology warning message in Linux guest. This series intends
to fix the issue by populating full CPU toplogy on arm/virt machine.

  PATCH[1/6] Add cluster-id to CPU instance property
  PATCH[2/6] Fixes test failure in qtest/numa-test/aarch64_numa_cpu()
  PATCH[3/6] Uses SMP configuration to populate CPU topology
  PATCH[4/6] Corrects CPU/NUMA association in qtest/numa-test/aarch64_numa_cpu()
  PATCH[5/6] Fixes the broken CPU topology by considering the socket boundary
             when the default NUMA node ID is given
  PATCH[6/6] Uses the populated CPU topology to build PPTT table, instead of
             calculate it again

Changelog
=========
v9:
   * Fix typo by replacing 'thrad-id' with 'thread-id' in
     PATCH[v9 2/6]'s commit log                                 (Igor)
   * Added PATCH[v9 4/6] to make CPU-to-NUMA association
     real                                                       (Igor)
v8:
   * Separate PATCH[v8 2/5] to fix test failure in qtest/
     numa-test/aarch64_numa_cpu()                               (Igor)
   * Improvents to coding style, changelog and comments         (Yanan)
v6/v7:
   * Fixed description for 'cluster-id' and 'core-id'           (Yanan)
   * Remove '% ms->smp.sockets' in socket ID calculation        (Yanan)
   * Fixed tests/qtest/numa-test/aarch64_numa_cpu()             (Yanan)
   * Initialized offset variables in build_pptt()               (Jonathan)
   * Added comments about the expected and sorted layout of
     cpus[n].props.*_id and assert() on the exceptional cases   (Igor)
v4/v5:
   * Split PATCH[v3 1/3] to PATCH[v5 1/4] and PATCH[v5 2/4].
     Verify or dump 'clsuter-id' in various spots               (Yanan)
   * s/within cluster/within cluster\/die/ for 'core-id' in
     qapi/machine.json                                          (Igor)
   * Apply '% ms->smp.{sockets, clusters, cores, threads} in
     virt_possible_cpu_arch_ids() as x86 does                   (Igor)
   * Use [0 - possible_cpus->len] as ACPI processor UID to
     build PPTT table and PATCH[v3 4/4] is dropped              (Igor)
   * Simplified build_pptt() to add all entries in one loop
     on ms->possible_cpus                                       (Igor)
v3:
   * Split PATCH[v2 1/3] to PATCH[v3 1/4] and PATCH[v3 2/4]     (Yanan)
   * Don't take account of die ID in CPU topology population
     and added assert(!mc->smp_props.dies_supported)            (Yanan/Igor)
   * Assign cluster_id and use it when building PPTT table      (Yanan/Igor)
v2:
   * Populate the CPU topology in virt_possible_cpu_arch_ids()
     so that it can be reused in virt_get_default_cpu_node_id() (Igor)
   * Added PATCH[2/3] to use the existing CPU topology when the
     PPTT table is built                                        (Igor)
   * Added PATCH[3/3] to take thread ID as ACPI processor ID
     in MADT and SRAT table                                     (Gavin)

Gavin Shan (6):
  qapi/machine.json: Add cluster-id
  qtest/numa-test: Specify CPU topology in aarch64_numa_cpu()
  hw/arm/virt: Consider SMP configuration in CPU topology
  qtest/numa-test: Correct CPU and NUMA association in
    aarch64_numa_cpu()
  hw/arm/virt: Fix CPU's default NUMA node ID
  hw/acpi/aml-build: Use existing CPU topology to build PPTT table

 hw/acpi/aml-build.c        | 111 ++++++++++++++++---------------------
 hw/arm/virt.c              |  19 ++++++-
 hw/core/machine-hmp-cmds.c |   4 ++
 hw/core/machine.c          |  16 ++++++
 qapi/machine.json          |   6 +-
 tests/qtest/numa-test.c    |  19 +++++--
 6 files changed, 102 insertions(+), 73 deletions(-)

-- 
2.23.0
Re: [PATCH v9 0/6] hw/arm/virt: Fix CPU's default NUMA node ID
Posted by Gavin Shan 1 year, 11 months ago
Hi Peter and maintainers,

On 5/3/22 10:02 PM, Gavin Shan wrote:
> When the CPU-to-NUMA association isn't provided by user, the default NUMA
> node ID for the specific CPU is returned from virt_get_default_cpu_node_id().
> Unfortunately, the default NUMA node ID breaks socket boundary and leads to
> the broken CPU topology warning message in Linux guest. This series intends
> to fix the issue by populating full CPU toplogy on arm/virt machine.
> 
>    PATCH[1/6] Add cluster-id to CPU instance property
>    PATCH[2/6] Fixes test failure in qtest/numa-test/aarch64_numa_cpu()
>    PATCH[3/6] Uses SMP configuration to populate CPU topology
>    PATCH[4/6] Corrects CPU/NUMA association in qtest/numa-test/aarch64_numa_cpu()
>    PATCH[5/6] Fixes the broken CPU topology by considering the socket boundary
>               when the default NUMA node ID is given
>    PATCH[6/6] Uses the populated CPU topology to build PPTT table, instead of
>               calculate it again
> 
> Changelog
> =========
> v9:
>     * Fix typo by replacing 'thrad-id' with 'thread-id' in
>       PATCH[v9 2/6]'s commit log                                 (Igor)
>     * Added PATCH[v9 4/6] to make CPU-to-NUMA association
>       real                                                       (Igor)

[...]

> Gavin Shan (6):
>    qapi/machine.json: Add cluster-id
>    qtest/numa-test: Specify CPU topology in aarch64_numa_cpu()
>    hw/arm/virt: Consider SMP configuration in CPU topology
>    qtest/numa-test: Correct CPU and NUMA association in
>      aarch64_numa_cpu()
>    hw/arm/virt: Fix CPU's default NUMA node ID
>    hw/acpi/aml-build: Use existing CPU topology to build PPTT table
> 
>   hw/acpi/aml-build.c        | 111 ++++++++++++++++---------------------
>   hw/arm/virt.c              |  19 ++++++-
>   hw/core/machine-hmp-cmds.c |   4 ++
>   hw/core/machine.c          |  16 ++++++
>   qapi/machine.json          |   6 +-
>   tests/qtest/numa-test.c    |  19 +++++--
>   6 files changed, 102 insertions(+), 73 deletions(-)
> 

I think this series is ready to be merged. Could you help to see how it
can be merged to QEMU 7.1?

Thanks,
Gavin
Re: [PATCH v9 0/6] hw/arm/virt: Fix CPU's default NUMA node ID
Posted by Peter Maydell 1 year, 11 months ago
On Mon, 9 May 2022 at 04:08, Gavin Shan <gshan@redhat.com> wrote:
>
> Hi Peter and maintainers,
>
> On 5/3/22 10:02 PM, Gavin Shan wrote:
> > When the CPU-to-NUMA association isn't provided by user, the default NUMA
> > node ID for the specific CPU is returned from virt_get_default_cpu_node_id().
> > Unfortunately, the default NUMA node ID breaks socket boundary and leads to
> > the broken CPU topology warning message in Linux guest. This series intends
> > to fix the issue by populating full CPU toplogy on arm/virt machine.
> >
> >    PATCH[1/6] Add cluster-id to CPU instance property
> >    PATCH[2/6] Fixes test failure in qtest/numa-test/aarch64_numa_cpu()
> >    PATCH[3/6] Uses SMP configuration to populate CPU topology
> >    PATCH[4/6] Corrects CPU/NUMA association in qtest/numa-test/aarch64_numa_cpu()
> >    PATCH[5/6] Fixes the broken CPU topology by considering the socket boundary
> >               when the default NUMA node ID is given
> >    PATCH[6/6] Uses the populated CPU topology to build PPTT table, instead of
> >               calculate it again
> >
> > Changelog
> > =========
> > v9:
> >     * Fix typo by replacing 'thrad-id' with 'thread-id' in
> >       PATCH[v9 2/6]'s commit log                                 (Igor)
> >     * Added PATCH[v9 4/6] to make CPU-to-NUMA association
> >       real                                                       (Igor)
>
> [...]
>
> > Gavin Shan (6):
> >    qapi/machine.json: Add cluster-id
> >    qtest/numa-test: Specify CPU topology in aarch64_numa_cpu()
> >    hw/arm/virt: Consider SMP configuration in CPU topology
> >    qtest/numa-test: Correct CPU and NUMA association in
> >      aarch64_numa_cpu()
> >    hw/arm/virt: Fix CPU's default NUMA node ID
> >    hw/acpi/aml-build: Use existing CPU topology to build PPTT table
> >
> >   hw/acpi/aml-build.c        | 111 ++++++++++++++++---------------------
> >   hw/arm/virt.c              |  19 ++++++-
> >   hw/core/machine-hmp-cmds.c |   4 ++
> >   hw/core/machine.c          |  16 ++++++
> >   qapi/machine.json          |   6 +-
> >   tests/qtest/numa-test.c    |  19 +++++--
> >   6 files changed, 102 insertions(+), 73 deletions(-)
> >
>
> I think this series is ready to be merged. Could you help to see how it
> can be merged to QEMU 7.1?



Applied to target-arm.next, thanks.

-- PMM