qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v2 0/7] accel/tcg: remove implied BQL from cpu_handle_interrupt/exception path
@ 2020-08-19 18:28 Robert Foley
  2020-08-19 18:28 ` [PATCH v2 1/7] target: rename all *_do_interupt functions to _do_interrupt_locked Robert Foley
                   ` (7 more replies)
  0 siblings, 8 replies; 19+ messages in thread
From: Robert Foley @ 2020-08-19 18:28 UTC (permalink / raw)
  To: qemu-devel
  Cc: Peter Maydell, Sarah Harris, Cornelia Huck, Sagar Karandikar,
	David Hildenbrand, Anthony Green, Mark Cave-Ayland, Thomas Huth,
	Jiaxun Yang, Max Filippov, Alistair Francis, Edgar E. Iglesias,
	Guan Xuetao, Eduardo Habkost, Marek Vasut, Yoshinori Sato,
	Aleksandar Markovic, Richard Henderson, Artyom Tarasenko,
	Aleksandar Rikalo, robert.foley, Michael Rolnik, pbonzini,
	Stafford Horne, alex.bennee, David Gibson, Bastian Koppelmann,
	Chris Wulff, Laurent Vivier, Michael Walle, Palmer Dabbelt,
	peter.puhov, Aurelien Jarno

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



^ permalink raw reply	[flat|nested] 19+ messages in thread

end of thread, other threads:[~2020-08-31 23:45 UTC | newest]

Thread overview: 19+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2020-08-19 18:28 [PATCH v2 0/7] accel/tcg: remove implied BQL from cpu_handle_interrupt/exception path Robert Foley
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

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).