From: "Philippe Mathieu-Daudé" <philmd@linaro.org>
To: "Zhao Liu" <zhao1.liu@linux.intel.com>,
"Daniel P . Berrangé" <berrange@redhat.com>,
"Eduardo Habkost" <eduardo@habkost.net>,
"Marcel Apfelbaum" <marcel.apfelbaum@gmail.com>,
"Yanan Wang" <wangyanan55@huawei.com>,
"Michael S . Tsirkin" <mst@redhat.com>,
"Paolo Bonzini" <pbonzini@redhat.com>,
"Richard Henderson" <richard.henderson@linaro.org>,
"Eric Blake" <eblake@redhat.com>,
"Markus Armbruster" <armbru@redhat.com>,
"Marcelo Tosatti" <mtosatti@redhat.com>,
"Alex Bennée" <alex.bennee@linaro.org>,
"Peter Maydell" <peter.maydell@linaro.org>,
"Jonathan Cameron" <Jonathan.Cameron@huawei.com>,
"Sia Jee Heng" <jeeheng.sia@starfivetech.com>,
"Igor Mammedov" <imammedo@redhat.com>
Cc: qemu-devel@nongnu.org, kvm@vger.kernel.org,
qemu-riscv@nongnu.org, qemu-arm@nongnu.org,
Zhenyu Wang <zhenyu.z.wang@intel.com>,
Dapeng Mi <dapeng1.mi@linux.intel.com>,
Yongwei Ma <yongwei.ma@intel.com>, Zhao Liu <zhao1.liu@intel.com>
Subject: Re: [RFC 0/8] Introduce SMP Cache Topology
Date: Tue, 20 Feb 2024 21:07:21 +0100 [thread overview]
Message-ID: <66cf4c35-5f19-4e5e-a0a1-adb1ab7cf8f4@linaro.org> (raw)
In-Reply-To: <20240220092504.726064-1-zhao1.liu@linux.intel.com>
+Igor
On 20/2/24 10:24, Zhao Liu wrote:
> From: Zhao Liu <zhao1.liu@intel.com>
>
> Hi list,
>
> This's our proposal for supporting (SMP) cache topology in -smp as
> the following example:
>
> -smp 32,sockets=2,dies=2,modules=2,cores=2,threads=2,maxcpus=32,\
> l1d-cache=core,l1i-cache=core,l2-cache=core,l3-cache=die
>
> With the new cache topology options ("l1d-cache", "l1i-cache",
> "l2-cache" and "l3-cache"), we could adjust the cache topology via -smp.
>
> This patch set is rebased on our i386 module series:
> https://lore.kernel.org/qemu-devel/20240131101350.109512-1-zhao1.liu@linux.intel.com/
>
> Since the ARM [1] and RISC-V [2] folks have similar needs for the cache
> topology, I also cc'd the ARM and RISC-V folks and lists.
>
>
> Welcome your feedback!
>
>
> Introduction
> ============
>
> Background
> ----------
>
> Intel client platforms (ADL/RPL/MTL) and E core server platforms (SRF)
> share the L2 cache domain among multiple E cores (in the same module).
>
> Thus we need a way to adjust the cache topology so that users could
> create the cache topology for Guest that is nearly identical to Host.
>
> This is necessary in cases where there are bound vCPUs, especially
> considering that Guest scheduling often takes into account the cache
> topology as well (e.g. Linux cluster aware scheduling, i.e. L2 cache
> scheduling).
>
> Previously, we introduced a x86 specific option to adjust the cache
> topology:
>
> -cpu x-l2-cache-topo=[core|module] [3]
>
> However, considering the needs of other arches, we re-implemented the
> generic cache topology (aslo in response to Michael's [4] and Daniel's
> comment [5]) in this series.
>
>
> Cache Topology Representation
> -----------------------------
>
> We consider to define the cache topology based on CPU topology level for
> two reasons:
>
> 1. In practice, a cache will always be bound to the CPU container -
> "CPU container" indicates to a set of CPUs that refer to a certain
> level of CPU topology - where the cache is either private in that
> CPU container or shared among multiple containers.
>
> 2. The x86's cache-related CPUIDs encode cache topology based on APIC
> ID's CPU topology layout. And the ACPI PPTT table that ARM/RISCV
> relies on also requires CPU containers (CPU topology) to help
> indicate the private shared hierarchy of the cache.
>
> Therefore, for SMP systems, it is natural to use the CPU topology
> hierarchy directly in QEMU to define the cache topology.
>
> And currently, separated L1 cache (L1 data cache and L1 instruction
> cache) with unified higher-level caches (e.g., unified L2 and L3
> caches), is the most common cache architectures.
>
> Thus, we define the topology for L1 D-cache, L1 I-cache, L2 cache and L3
> cache in MachineState as the basic cache topology support:
>
> typedef struct CacheTopology {
> CPUTopoLevel l1d;
> CPUTopoLevel l1i;
> CPUTopoLevel l2;
> CPUTopoLevel l3;
> } CacheTopology;
>
> Machines may also only support a subset of the cache topology
> to be configured in -smp by setting the SMP property of MachineClass:
>
> typedef struct {
> ...
> bool l1_separated_cache_supported;
> bool l2_unified_cache_supported;
> bool l3_unified_cache_supported;
> } SMPCompatProps;
>
>
> Cache Topology Configuration in -smp
> ------------------------------------
>
> Further, we add new parameters to -smp:
> * l1d-cache=level
> * l1i-cache=level
> * l2-cache=level
> * l3-cache=level
>
> These cache topology parameters accept the strings of CPU topology
> levels (such as "drawer", "book", "socket", "die", "cluster", "module",
> "core" or "thread"). Exactly which topology level strings could be
> accepted as the parameter depends on the machine's support for the
> corresponding CPU topology level.
>
> Unsupported cache topology parameters will be omitted, and
> correspondingly, the target CPU's cache topology will use the its
> default cache topology setting.
>
> In this series, we add the cache topology support in -smp for x86 PC
> machine.
>
> The following example defines a 3-level cache topology hierarchy (L1
> D-cache per core, L1 I-cache per core, L2 cache per core and L3 cache per
> die) for PC machine.
>
> -smp 32,sockets=2,dies=2,modules=2,cores=2,threads=2,maxcpus=32,\
> l1d-cache=core,l1i-cache=core,l2-cache=core,l3-cache=die
>
>
> Reference
> ---------
>
> [1]: [ARM] Jonathan's proposal to adjust cache topology:
> https://lore.kernel.org/qemu-devel/20230808115713.2613-2-Jonathan.Cameron@huawei.com/
> [2]: [RISC-V] Discussion between JeeHeng and Jonathan about cache
> topology:
> https://lore.kernel.org/qemu-devel/20240131155336.000068d1@Huawei.com/
> [3]: Previous x86 specific cache topology option:
> https://lore.kernel.org/qemu-devel/20230914072159.1177582-22-zhao1.liu@linux.intel.com/
> [4]: Michael's comment about generic cache topology support:
> https://lore.kernel.org/qemu-devel/20231003085516-mutt-send-email-mst@kernel.org/
> [5]: Daniel's question about how x86 support L2 cache domain (cluster)
> configuration:
> https://lore.kernel.org/qemu-devel/ZcUG0Uc8KylEQhUW@redhat.com/
>
> Thanks and Best Regards,
> Zhao
>
> ---
> Zhao Liu (8):
> hw/core: Rename CpuTopology to CPUTopology
> hw/core: Move CPU topology enumeration into arch-agnostic file
> hw/core: Define cache topology for machine
> hw/core: Add cache topology options in -smp
> i386/cpu: Support thread and module level cache topology
> i386/cpu: Update cache topology with machine's configuration
> i386/pc: Support cache topology in -smp for PC machine
> qemu-options: Add the cache topology description of -smp
>
> MAINTAINERS | 2 +
> hw/core/cpu-topology.c | 56 ++++++++++++++
> hw/core/machine-smp.c | 128 ++++++++++++++++++++++++++++++++
> hw/core/machine.c | 9 +++
> hw/core/meson.build | 1 +
> hw/i386/pc.c | 3 +
> hw/s390x/cpu-topology.c | 6 +-
> include/hw/boards.h | 33 +++++++-
> include/hw/core/cpu-topology.h | 40 ++++++++++
> include/hw/i386/topology.h | 18 +----
> include/hw/s390x/cpu-topology.h | 6 +-
> qapi/machine.json | 14 +++-
> qemu-options.hx | 54 ++++++++++++--
> system/vl.c | 15 ++++
> target/i386/cpu.c | 55 ++++++++++----
> target/i386/cpu.h | 2 +-
> tests/unit/meson.build | 3 +-
> tests/unit/test-smp-parse.c | 14 ++--
> 18 files changed, 399 insertions(+), 60 deletions(-)
> create mode 100644 hw/core/cpu-topology.c
> create mode 100644 include/hw/core/cpu-topology.h
>
prev parent reply other threads:[~2024-02-20 20:07 UTC|newest]
Thread overview: 26+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-02-20 9:24 [RFC 0/8] Introduce SMP Cache Topology Zhao Liu
2024-02-20 9:24 ` [RFC 1/8] hw/core: Rename CpuTopology to CPUTopology Zhao Liu
2024-02-20 9:24 ` [RFC 2/8] hw/core: Move CPU topology enumeration into arch-agnostic file Zhao Liu
2024-02-28 9:53 ` JeeHeng Sia
2024-02-29 4:46 ` Zhao Liu
2024-02-20 9:24 ` [RFC 3/8] hw/core: Define cache topology for machine Zhao Liu
2024-02-20 9:25 ` [RFC 4/8] hw/core: Add cache topology options in -smp Zhao Liu
2024-02-21 12:46 ` Markus Armbruster
2024-02-21 15:17 ` Zhao Liu
2024-02-26 15:39 ` Jonathan Cameron via
2024-02-27 9:20 ` Zhao Liu
2024-02-27 9:12 ` Daniel P. Berrangé
2024-02-27 10:35 ` Zhao Liu
2024-02-27 10:51 ` Jonathan Cameron via
2024-02-27 15:55 ` Zhao Liu
2024-02-28 5:38 ` JeeHeng Sia
2024-02-29 7:04 ` Zhao Liu
2024-02-20 9:25 ` [RFC 5/8] i386/cpu: Support thread and module level cache topology Zhao Liu
2024-02-20 9:25 ` [RFC 6/8] i386/cpu: Update cache topology with machine's configuration Zhao Liu
2024-02-28 9:45 ` JeeHeng Sia
2024-02-29 7:19 ` Zhao Liu
2024-02-20 9:25 ` [RFC 7/8] i386/pc: Support cache topology in -smp for PC machine Zhao Liu
2024-02-20 9:25 ` [RFC 8/8] qemu-options: Add the cache topology description of -smp Zhao Liu
2024-02-26 15:47 ` Jonathan Cameron via
2024-02-27 16:17 ` Zhao Liu
2024-02-20 20:07 ` Philippe Mathieu-Daudé [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=66cf4c35-5f19-4e5e-a0a1-adb1ab7cf8f4@linaro.org \
--to=philmd@linaro.org \
--cc=Jonathan.Cameron@huawei.com \
--cc=alex.bennee@linaro.org \
--cc=armbru@redhat.com \
--cc=berrange@redhat.com \
--cc=dapeng1.mi@linux.intel.com \
--cc=eblake@redhat.com \
--cc=eduardo@habkost.net \
--cc=imammedo@redhat.com \
--cc=jeeheng.sia@starfivetech.com \
--cc=kvm@vger.kernel.org \
--cc=marcel.apfelbaum@gmail.com \
--cc=mst@redhat.com \
--cc=mtosatti@redhat.com \
--cc=pbonzini@redhat.com \
--cc=peter.maydell@linaro.org \
--cc=qemu-arm@nongnu.org \
--cc=qemu-devel@nongnu.org \
--cc=qemu-riscv@nongnu.org \
--cc=richard.henderson@linaro.org \
--cc=wangyanan55@huawei.com \
--cc=yongwei.ma@intel.com \
--cc=zhao1.liu@intel.com \
--cc=zhao1.liu@linux.intel.com \
--cc=zhenyu.z.wang@intel.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).