The rest ARM & ACPI part (patches 8-14) have been packed into v6: v6: https://patchew.org/QEMU/20220103084636.2496-1-wangyana...@huawei.com/
Thanks, Yanan On 2021/12/28 17:22, Yanan Wang wrote:
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-wangyana...@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-phi...@redhat.com/ - v4: https://patchew.org/QEMU/20211121122502.9844-1-wangyana...@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 .