qemu-e2k/qapi
Yanan Wang 864c3b5c32 hw/core/machine: Introduce CPU cluster topology support
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) on both x86_64 and AArch64.

So now in 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.

In virtualization, on the Hosts which have pClusters (physical
clusters), 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.

This patch adds infrastructure for CPU cluster level topology
configuration and parsing, so that the user can specify cluster
parameter if their machines support it.

Signed-off-by: Yanan Wang <wangyanan55@huawei.com>
Message-Id: <20211228092221.21068-3-wangyanan55@huawei.com>
Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com>
[PMD: Added '(since 7.0)' to @clusters in qapi/machine.json]
Signed-off-by: Philippe Mathieu-Daudé <philmd@redhat.com>
2021-12-31 13:42:39 +01:00
..
acpi.json qapi: Extract ACPI commands to 'acpi.json' 2020-09-29 15:41:36 +02:00
audio.json audio: add "dbus" audio backend 2021-12-21 10:50:22 +04:00
authz.json qapi/qom: Add ObjectOptions for authz-* 2021-03-19 10:17:13 +01:00
block-core.json nbd: allow reconnect on open, with corresponding new options 2021-12-21 14:52:06 +01:00
block-export.json qapi: make 'if' condition strings simple identifiers 2021-08-26 13:53:56 +02:00
block.json qapi: Normalize version references x.y.0 to just x.y 2020-12-10 17:16:44 +01:00
char.json ui/dbus: add chardev backend & interface 2021-12-21 10:50:22 +04:00
common.json monitor: introduce HumanReadableText and HMP support 2021-11-02 15:55:13 +00:00
compat.json qapi: Extend -compat to set policy for unstable interfaces 2021-10-29 21:28:01 +02:00
control.json monitor: remove 'query-events' QMP command 2021-03-18 09:22:55 +00:00
crypto.json crypto: replace 'des-rfb' cipher with 'des' 2021-07-14 14:15:52 +01:00
dump.json
error.json
introspect.json qapi: Add feature flags to enum members 2021-10-27 17:18:55 +02:00
job.json migration: introduce snapshot-{save, load, delete} QMP commands 2021-02-08 11:19:52 +00:00
machine-target.json qapi: make 'if' condition strings simple identifiers 2021-08-26 13:53:56 +02:00
machine.json hw/core/machine: Introduce CPU cluster topology support 2021-12-31 13:42:39 +01:00
meson.build monitor: introduce HumanReadableText and HMP support 2021-11-02 15:55:13 +00:00
migration.json docs: fix 'sample-pages' option tag 2021-11-09 08:38:06 +01:00
misc-target.json numa: Support SGX numa in the monitor and Libvirt interfaces 2021-12-10 09:47:18 +01:00
misc.json ui/dbus: add p2p=on/off option 2021-12-21 10:50:22 +04:00
net.json netdev: add more commands to preconfig mode 2021-06-11 10:30:13 +08:00
opts-visitor.c qapi, qemu-options: make all parsing visitors parse boolean options the same 2020-11-04 12:00:40 -05:00
pci.json qapi: Normalize version references x.y.0 to just x.y 2020-12-10 17:16:44 +01:00
pragma.json block: Remove monitor command block_passwd 2021-03-23 22:31:56 +01:00
qapi-clone-visitor.c
qapi-dealloc-visitor.c
qapi-forward-visitor.c qapi: Generalize struct member policy checking 2021-10-29 18:23:09 +02:00
qapi-schema.json qemu-options: New -compat to set policy for deprecated interfaces 2021-03-19 15:43:33 +01:00
qapi-type-helpers.c monitor: introduce HumanReadableText and HMP support 2021-11-02 15:55:13 +00:00
qapi-util.c qapi: Extend -compat to set policy for unstable interfaces 2021-10-29 21:28:01 +02:00
qapi-visit-core.c qapi: Factor out compat_policy_input_ok() 2021-10-29 21:27:20 +02:00
qdev.json vl: Enable JSON syntax for -device 2021-10-15 16:11:22 +02:00
qmp-dispatch.c qapi: Factor out compat_policy_input_ok() 2021-10-29 21:27:20 +02:00
qmp-event.c
qmp-registry.c qapi: Generalize command policy checking 2021-10-29 18:24:46 +02:00
qobject-input-visitor.c qapi: Factor out compat_policy_input_ok() 2021-10-29 21:27:20 +02:00
qobject-output-visitor.c qapi: Extend -compat to set policy for unstable interfaces 2021-10-29 21:28:01 +02:00
qom.json qapi/qom,target/i386: sev-guest: Introduce kernel-hashes=on|off option 2021-11-18 11:07:44 +00:00
rdma.json
replay.json replay: implement replay-seek command 2020-10-06 08:34:49 +02:00
rocker.json
run-state.json runstate: cleanup reboot and panic actions 2021-01-21 13:00:41 +01:00
sockets.json build-sys: add HAVE_IPPROTO_MPTCP 2021-09-30 15:30:25 +02:00
string-input-visitor.c qapi, qemu-options: make all parsing visitors parse boolean options the same 2020-11-04 12:00:40 -05:00
string-output-visitor.c string-output-visitor: Fix to use sufficient precision 2020-12-19 10:37:16 +01:00
tpm.json qapi: Convert simple union TpmTypeOptions to flat one 2021-09-27 08:22:25 +02:00
trace-events qapi: Generalize struct member policy checking 2021-10-29 18:23:09 +02:00
trace.h
trace.json qapi: Set boolean value correctly in examples 2021-09-03 17:03:05 +02:00
transaction.json qapi: deprecate drive-backup 2021-11-09 18:21:19 +01:00
ui.json audio: add "dbus" audio backend 2021-12-21 10:50:22 +04:00
yank.json Introduce yank feature 2021-01-13 10:21:17 +01:00