From: Robert Foley <robert.foley@linaro.org>
To: qemu-devel@nongnu.org
Cc: Peter Maydell <peter.maydell@linaro.org>,
Sarah Harris <S.E.Harris@kent.ac.uk>,
Cornelia Huck <cohuck@redhat.com>,
Sagar Karandikar <sagark@eecs.berkeley.edu>,
David Hildenbrand <david@redhat.com>,
Anthony Green <green@moxielogic.com>,
Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>,
Thomas Huth <thuth@redhat.com>,
Jiaxun Yang <jiaxun.yang@flygoat.com>,
Max Filippov <jcmvbkbc@gmail.com>,
Alistair Francis <Alistair.Francis@wdc.com>,
"Edgar E. Iglesias" <edgar.iglesias@gmail.com>,
Guan Xuetao <gxt@mprc.pku.edu.cn>,
Eduardo Habkost <ehabkost@redhat.com>,
Marek Vasut <marex@denx.de>,
Yoshinori Sato <ysato@users.sourceforge.jp>,
Aleksandar Markovic <aleksandar.qemu.devel@gmail.com>,
Richard Henderson <rth@twiddle.net>,
Artyom Tarasenko <atar4qemu@gmail.com>,
Aleksandar Rikalo <aleksandar.rikalo@syrmia.com>,
robert.foley@linaro.org, Michael Rolnik <mrolnik@gmail.com>,
pbonzini@redhat.com, Stafford Horne <shorne@gmail.com>,
alex.bennee@linaro.org,
David Gibson <david@gibson.dropbear.id.au>,
Bastian Koppelmann <kbastian@mail.uni-paderborn.de>,
Chris Wulff <crwulff@gmail.com>,
Laurent Vivier <laurent@vivier.eu>,
Michael Walle <michael@walle.cc>,
Palmer Dabbelt <palmer@dabbelt.com>,
peter.puhov@linaro.org, Aurelien Jarno <aurelien@aurel32.net>
Subject: [PATCH v2 0/7] accel/tcg: remove implied BQL from cpu_handle_interrupt/exception path
Date: Wed, 19 Aug 2020 14:28:49 -0400 [thread overview]
Message-ID: <20200819182856.4893-1-robert.foley@linaro.org> (raw)
The purpose of this change is to set the groundwork
so that an arch could move towards removing
the BQL from the cpu_handle_interrupt/exception paths.
The BQL is a bottleneck in scaling to more cores.
And this cpu_handle_interrupt/exception path is one of
the key BQL users as measured by the QEMU sync profiling (qsp).
As the first step in removing the BQL from this path, we will make
changes to the core/common functions of cpu_handle_interrupt/exception
to drop the holding of the BQL. The holding of the BQL is pushed down
to the per-arch implementation code.
This patch goes through several transitions of the code in order to
maintain correctness (bisectability). In order to maintain
bisectability across these steps some patches need to touch many
files across different arches, however most of the changes are trivial.
The general order of the changes is below where each step
represents one patch.
1) rename all *_do_interrupt functions to *_do_interrupt_locked
2) add a new function *_do_interrupt that takes the BQL and calls
*_do_interrupt_locked, point ->do_interrupt to it, and remove
the BQL from cpu-exec.c's cpu_handle_exception.
3) modify the BQL critical sections around
->cpu_exec_interrupt, so that the BQL critical section covers just the
call to ->cpu_exec_interrupt.
4/5) same as 1/2 for ->cpu_exec_interrupt. This removes the BQL
from cpu_handle_exception.
This approach of pushing the BQL down to the per arch functions was
suggested by Paolo Bonzini.
For reference, here are several key posts in the discussion, explaining
the reasoning/benefits of this approach.
https://lists.gnu.org/archive/html/qemu-devel/2020-08/msg00784.html
https://lists.gnu.org/archive/html/qemu-devel/2020-08/msg01517.html
https://lists.gnu.org/archive/html/qemu-devel/2020-07/msg08731.html
https://lists.gnu.org/archive/html/qemu-devel/2020-08/msg00044.html
This patch series is based on the per-CPU locks patch:
https://lists.gnu.org/archive/html/qemu-devel/2020-06/msg05314.html
Our most recent WIP tree is here:
https://github.com/rf972/qemu/tree/interrupts_v2.7
Robert Foley (7):
target: rename all *_do_interupt functions to _do_interrupt_locked
target/arm: add ARMCPUClass->do_interrupt_locked
target/cris: add CRISCPUClass->do_interrupt_locked
target: Push BQL on ->do_interrupt down into per-arch implementation
accel/tcg: Change BQL critical section in cpu_handle_interrupt
target: rename all *_cpu_exec_interrupt functions to
*_cpu_exec_interrupt_locked
target: Push BQL on ->cpu_exec_interrupt down into per-arch
implementation
accel/tcg/cpu-exec.c | 8 +-------
hw/ppc/spapr_events.c | 2 +-
target/alpha/helper.c | 22 +++++++++++++++++++---
target/arm/cpu-qom.h | 3 +++
target/arm/cpu.c | 16 +++++++++++++---
target/arm/cpu.h | 2 ++
target/arm/cpu_tcg.c | 19 +++++++++++++++----
target/arm/helper.c | 10 +++++++++-
target/arm/m_helper.c | 2 +-
target/avr/helper.c | 27 ++++++++++++++++++++++-----
target/cris/cpu-qom.h | 3 +++
target/cris/cpu.c | 11 ++++++-----
target/cris/cpu.h | 3 ++-
target/cris/helper.c | 35 ++++++++++++++++++++++++++---------
target/hppa/int_helper.c | 22 +++++++++++++++++++---
target/i386/seg_helper.c | 20 ++++++++++++++++++--
target/lm32/helper.c | 22 +++++++++++++++++++---
target/m68k/op_helper.c | 22 +++++++++++++++++++---
target/microblaze/helper.c | 24 ++++++++++++++++++++----
target/mips/helper.c | 22 +++++++++++++++++++---
target/moxie/cpu.c | 2 +-
target/moxie/cpu.h | 2 +-
target/moxie/helper.c | 2 +-
target/nios2/cpu.c | 13 +++++++++++--
target/nios2/cpu.h | 1 +
target/nios2/helper.c | 13 +++++++++++--
target/openrisc/interrupt.c | 23 ++++++++++++++++++++---
target/ppc/cpu.h | 1 +
target/ppc/excp_helper.c | 22 +++++++++++++++++++---
target/ppc/kvm.c | 2 +-
target/riscv/cpu_helper.c | 24 +++++++++++++++++++++---
target/rx/cpu.h | 1 +
target/rx/helper.c | 22 +++++++++++++++++++---
target/s390x/excp_helper.c | 24 ++++++++++++++++++++----
target/s390x/internal.h | 1 +
target/sh4/helper.c | 25 +++++++++++++++++++++----
target/sparc/cpu.c | 13 +++++++++++--
target/sparc/cpu.h | 1 +
target/sparc/int32_helper.c | 9 ++++++++-
target/sparc/int64_helper.c | 9 ++++++++-
target/tilegx/cpu.c | 23 ++++++++++++++++++++---
target/unicore32/cpu.h | 1 +
target/unicore32/helper.c | 13 +++++++++++--
target/unicore32/softmmu.c | 9 ++++++++-
target/xtensa/exc_helper.c | 25 +++++++++++++++++++++----
45 files changed, 476 insertions(+), 100 deletions(-)
--
2.17.1
next reply other threads:[~2020-08-19 18:31 UTC|newest]
Thread overview: 19+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-08-19 18:28 Robert Foley [this message]
2020-08-19 18:28 ` [PATCH v2 1/7] target: rename all *_do_interupt functions to _do_interrupt_locked Robert Foley
2020-08-31 21:14 ` Richard Henderson
2020-08-19 18:28 ` [PATCH v2 2/7] target/arm: add ARMCPUClass->do_interrupt_locked Robert Foley
2020-08-31 21:18 ` Richard Henderson
2020-08-31 22:02 ` Richard Henderson
2020-08-31 23:44 ` Philippe Mathieu-Daudé
2020-08-19 18:28 ` [PATCH v2 3/7] target/cris: add CRISCPUClass->do_interrupt_locked Robert Foley
2020-08-31 21:19 ` Richard Henderson
2020-08-19 18:28 ` [PATCH v2 4/7] target: Push BQL on ->do_interrupt down into per-arch implementation Robert Foley
2020-08-31 21:37 ` Richard Henderson
2020-08-19 18:28 ` [PATCH v2 5/7] accel/tcg: Change BQL critical section in cpu_handle_interrupt Robert Foley
2020-08-31 21:44 ` Richard Henderson
2020-08-19 18:28 ` [PATCH v2 6/7] target: rename all *_cpu_exec_interrupt functions to *_cpu_exec_interrupt_locked Robert Foley
2020-08-31 21:46 ` Richard Henderson
2020-08-19 18:28 ` [PATCH v2 7/7] target: Push BQL on ->cpu_exec_interrupt down into per-arch implementation Robert Foley
2020-08-31 22:11 ` Richard Henderson
2020-08-21 10:55 ` [PATCH v2 0/7] accel/tcg: remove implied BQL from cpu_handle_interrupt/exception path Cornelia Huck
2020-08-27 12:38 ` Robert Foley
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=20200819182856.4893-1-robert.foley@linaro.org \
--to=robert.foley@linaro.org \
--cc=Alistair.Francis@wdc.com \
--cc=S.E.Harris@kent.ac.uk \
--cc=aleksandar.qemu.devel@gmail.com \
--cc=aleksandar.rikalo@syrmia.com \
--cc=alex.bennee@linaro.org \
--cc=atar4qemu@gmail.com \
--cc=aurelien@aurel32.net \
--cc=cohuck@redhat.com \
--cc=crwulff@gmail.com \
--cc=david@gibson.dropbear.id.au \
--cc=david@redhat.com \
--cc=edgar.iglesias@gmail.com \
--cc=ehabkost@redhat.com \
--cc=green@moxielogic.com \
--cc=gxt@mprc.pku.edu.cn \
--cc=jcmvbkbc@gmail.com \
--cc=jiaxun.yang@flygoat.com \
--cc=kbastian@mail.uni-paderborn.de \
--cc=laurent@vivier.eu \
--cc=marex@denx.de \
--cc=mark.cave-ayland@ilande.co.uk \
--cc=michael@walle.cc \
--cc=mrolnik@gmail.com \
--cc=palmer@dabbelt.com \
--cc=pbonzini@redhat.com \
--cc=peter.maydell@linaro.org \
--cc=peter.puhov@linaro.org \
--cc=qemu-devel@nongnu.org \
--cc=rth@twiddle.net \
--cc=sagark@eecs.berkeley.edu \
--cc=shorne@gmail.com \
--cc=thuth@redhat.com \
--cc=ysato@users.sourceforge.jp \
/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).