All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v5 00/14] ARM virt: Introduce CPU clusters topology support
@ 2021-12-28  9:22 Yanan Wang via
  2021-12-28  9:22 ` [PATCH v5 01/14] qemu-options: Improve readability of SMP related Docs Yanan Wang via
                   ` (15 more replies)
  0 siblings, 16 replies; 30+ messages in thread
From: Yanan Wang via @ 2021-12-28  9:22 UTC (permalink / raw)
  To: qemu-devel, qemu-arm
  Cc: Peter Maydell, Andrew Jones, Eduardo Habkost,
	Philippe Mathieu-Daudé,
	Marcel Apfelbaum, Paolo Bonzini, Michael S . Tsirkin,
	Igor Mammedov, Shannon Zhao, Ani Sinha, Markus Armbruster,
	Eric Blake, wanghaibin.wang, Yanan Wang

Hi,

This series introduces the new CPU clusters topology parameter
and enable the support for it on ARM virt machines.

Background and descriptions:
The new Cluster-Aware Scheduling support has landed in Linux 5.16,
which has been proved to benefit the scheduling performance (e.g.
load balance and wake_affine strategy) for both x86_64 and AArch64.
We can see the PR [1] or the actual patch series [2] for reference.

So since Linux 5.16 we have four-level arch-neutral CPU topology
definition like below and a new scheduler level for clusters.
struct cpu_topology {
    int thread_id;
    int core_id;
    int cluster_id;
    int package_id;
    int llc_id;
    cpumask_t thread_sibling;
    cpumask_t core_sibling;
    cpumask_t cluster_sibling;
    cpumask_t llc_sibling;
}

A cluster generally means a group of CPU cores which share L2 cache
or other mid-level resources, and it is the shared resources that
is used to improve scheduler's behavior. From the point of view of
the size range, it's between CPU die and CPU core. For example, on
some ARM64 Kunpeng servers, we have 6 clusters in each NUMA node,
and 4 CPU cores in each cluster. The 4 CPU cores share a separate
L2 cache and a L3 cache tag, which brings cache affinity advantage.

[1] https://lore.kernel.org/lkml/163572864855.3357115.17938524897008353101.tglx@xen13/
[2] https://lkml.org/lkml/2021/9/24/178

In virtualization, on the Hosts which have pClusters, if we can
design a vCPU topology with cluster level for guest kernel and
have a dedicated vCPU pinning. A Cluster-Aware Guest kernel can
also make use of the cache affinity of CPU clusters to gain
similar scheduling performance. So this series introduce clusters
support in the vCPU topology on ARM virt machines.

The patches are arranged mainly in two parts:
The first part (patch 1-7):
- Implement infrastructure for CPU cluster level topology support,
  including the SMP documentation, configuration and parsing,
  adding testcases for clusters.

The second part (part 8-14):
- Enable CPU cluster support on ARM virt machines, so that users
  can specify a 4-level CPU hierarchy sockets/clusters/cores/threads.
  And the 4-level topology will be described to guest kernel through
  ACPI PPTT and DT cpu-map.

Changelog:
v3->v4:
- Significant change from v3 to v4, since the whole series is reworked
  based on latest QEMU SMP frame.
- v3: https://patchew.org/QEMU/20210516103228.37792-1-wangyanan55@huawei.com/

v4->v5:
- newly added patches 4-7
- rebased on Philippe series: "tests/unit: Rework test-smp-parse tests"
  https://patchew.org/QEMU/20211216132015.815493-1-philmd@redhat.com/
- v4: https://patchew.org/QEMU/20211121122502.9844-1-wangyanan55@huawei.com/

Yanan Wang (14):
  qemu-options: Improve readability of SMP related Docs
  hw/core/machine: Introduce CPU cluster topology support
  hw/core/machine: Wrap target specific parameters together
  tests/unit/test-smp-parse: Add testcases for CPU clusters
  tests/unit/test-smp-parse: No need to explicitly zero MachineClass
    members
  tests/unit/test-smp-parse: Keep default MIN/MAX CPUs in
    machine_base_class_init
  MAINTAINERS: Self-recommended as reviewer of "Machine core"
  hw/arm/virt: Support clusters on ARM virt machines
  hw/arm/virt: Support cluster level in DT cpu-map
  hw/acpi/aml-build: Improve scalability of PPTT generation
  hw/arm/virt-acpi-build: Make an ARM specific PPTT generator
  tests/acpi/bios-tables-test: Allow changes to virt/PPTT file
  hw/arm/virt-acpi-build: Support cluster level in PPTT generation
  tests/acpi/bios-table-test: Update expected virt/PPTT file

 MAINTAINERS                 |   1 +
 hw/acpi/aml-build.c         |  66 +----------------
 hw/arm/virt-acpi-build.c    |  92 +++++++++++++++++++++++-
 hw/arm/virt.c               |  16 +++--
 hw/core/machine-smp.c       |  29 ++++++--
 hw/core/machine.c           |   3 +
 include/hw/acpi/aml-build.h |   5 +-
 include/hw/boards.h         |   6 +-
 qapi/machine.json           |   5 +-
 qemu-options.hx             |  91 ++++++++++++++++++-----
 softmmu/vl.c                |   3 +
 tests/data/acpi/virt/PPTT   | Bin 76 -> 96 bytes
 tests/unit/test-smp-parse.c | 140 ++++++++++++++++++++++++++++++------
 13 files changed, 332 insertions(+), 125 deletions(-)

--
2.27.0



^ permalink raw reply	[flat|nested] 30+ messages in thread

end of thread, other threads:[~2022-01-14 11:40 UTC | newest]

Thread overview: 30+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-12-28  9:22 [PATCH v5 00/14] ARM virt: Introduce CPU clusters topology support Yanan Wang via
2021-12-28  9:22 ` [PATCH v5 01/14] qemu-options: Improve readability of SMP related Docs Yanan Wang via
2021-12-28 19:11   ` Philippe Mathieu-Daudé
2021-12-28  9:22 ` [PATCH v5 02/14] hw/core/machine: Introduce CPU cluster topology support Yanan Wang via
2021-12-28 19:17   ` Philippe Mathieu-Daudé
2021-12-29  3:48     ` wangyanan (Y) via
2021-12-29 10:44       ` Philippe Mathieu-Daudé
2021-12-29 13:04         ` wangyanan (Y) via
2021-12-29 15:44           ` Philippe Mathieu-Daudé
2022-01-14 11:34     ` Markus Armbruster
2021-12-28  9:22 ` [PATCH v5 03/14] hw/core/machine: Wrap target specific parameters together Yanan Wang via
2021-12-28 19:23   ` Philippe Mathieu-Daudé
2021-12-29  1:40     ` wangyanan (Y) via
2021-12-28  9:22 ` [PATCH v5 04/14] tests/unit/test-smp-parse: Add testcases for CPU clusters Yanan Wang via
2021-12-28 19:26   ` Philippe Mathieu-Daudé
2021-12-28  9:22 ` [PATCH v5 05/14] tests/unit/test-smp-parse: No need to explicitly zero MachineClass members Yanan Wang via
2021-12-28 15:58   ` Philippe Mathieu-Daudé
2021-12-28  9:22 ` [PATCH v5 06/14] tests/unit/test-smp-parse: Keep default MIN/MAX CPUs in machine_base_class_init Yanan Wang via
2021-12-28 19:28   ` Philippe Mathieu-Daudé
2021-12-28  9:22 ` [PATCH v5 07/14] MAINTAINERS: Self-recommended as reviewer of "Machine core" Yanan Wang via
2021-12-28 15:58   ` Philippe Mathieu-Daudé
2021-12-28  9:22 ` [PATCH v5 08/14] hw/arm/virt: Support clusters on ARM virt machines Yanan Wang via
2021-12-28  9:22 ` [PATCH v5 09/14] hw/arm/virt: Support cluster level in DT cpu-map Yanan Wang via
2021-12-28  9:22 ` [PATCH v5 10/14] hw/acpi/aml-build: Improve scalability of PPTT generation Yanan Wang via
2021-12-28  9:22 ` [PATCH v5 11/14] hw/arm/virt-acpi-build: Make an ARM specific PPTT generator Yanan Wang via
2021-12-28  9:22 ` [PATCH v5 12/14] tests/acpi/bios-tables-test: Allow changes to virt/PPTT file Yanan Wang via
2021-12-28  9:22 ` [PATCH v5 13/14] hw/arm/virt-acpi-build: Support cluster level in PPTT generation Yanan Wang via
2021-12-28  9:22 ` [PATCH v5 14/14] tests/acpi/bios-table-test: Update expected virt/PPTT file Yanan Wang via
2021-12-31 12:05 ` [PATCH v5 00/14] ARM virt: Introduce CPU clusters topology support Philippe Mathieu-Daudé
2022-01-03  9:08 ` wangyanan (Y) via

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.