Message ID | 20211228092221.21068-1-wangyanan55@huawei.com (mailing list archive) |
---|---|
Headers | show |
Series | ARM virt: Introduce CPU clusters topology support | expand |
On 12/28/21 10:22, Yanan Wang wrote: > Hi, > > This series introduces the new CPU clusters topology parameter > and enable the support for it on ARM virt machines. > 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" Patches 1, 2, 4-7 queued, thanks.
The rest ARM & ACPI part (patches 8-14) have been packed into v6: v6: https://patchew.org/QEMU/20220103084636.2496-1-wangyanan55@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-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 > > .