From: "Alex Bennée" <alex.bennee@linaro.org>
To: mttcg@listserver.greensocs.com, qemu-devel@nongnu.org,
fred.konrad@greensocs.com, a.rigo@virtualopensystems.com,
serge.fdrv@gmail.com, cota@braap.org, bobby.prani@gmail.com
Cc: mark.burton@greensocs.com, pbonzini@redhat.com,
jan.kiszka@siemens.com, rth@twiddle.net,
peter.maydell@linaro.org, claudio.fontana@huawei.com,
"Alex Bennée" <alex.bennee@linaro.org>
Subject: [Qemu-devel] [RFC v3 00/19] Base enabling patches for MTTCG
Date: Fri, 3 Jun 2016 21:40:09 +0100 [thread overview]
Message-ID: <1464986428-6739-1-git-send-email-alex.bennee@linaro.org> (raw)
This is the third iteration of the RFC patch set which aims to provide
the basic framework for MTTCG. There have been some considerable
changes since the last extensive review (thanks to all the reviewers).
- many updates to docs/multi-thread-tcg.txt design document
- added assertions for all the locking requirements
- split apart the big enable thread-per-vCPU patch
- removed locking from the hot-path
In general the main thread functions are a lot less messy (especially
the single thread variant). The splitting apart of the big enabling
patch was helped by removing tcg_current_cpu and the global
exit_request as separate patches. Finally the big performance boost of
a lockless hot-path is made possible by Emilio's QHT work which this
is based on.
The branch can be found at:
https://github.com/stsquad/qemu/tree/mttcg/base-patches-v3
It has been built up on top of:
https://github.com/stsquad/qemu/tree/review/qht-v6
What's next
===========
This series should now behave as normal in the default single threaded
mode and in multi-threaded mode where SMP==1. Please report any
regressions/bugs you find.
multi-threaded mode works for any guests that don't make assumptions
about atomicity, memory consistency or cache flushes. Basically simple
kvm-unit-test cases. I've been using the simple locking-test:
./arm/run ./arm/locking-test.flat -smp 4 -accel tcg,thread=[single|multi]
Default:
real 0m14.804s
user 0m14.752s
sys 0m0.032s
Multi-threaded:
real 0m6.307s
user 0m23.396s
sys 0m0.020s
With the lockless hot-path (thanks QHT ;-) we can now see a benefit in
running with multiple threads with a slight cost to overall CPU time.
I intend to run a more complete set of benchmarks once I'm re-based by
ARM specific series on top of this patch-set (and compared the LL/SC
work with the simple lock based exclusives in the original series.)
In the meantime any review comments gratefully received.
Cheers,
Alex
Alex Bennée (15):
cpus: make all_vcpus_paused() return bool
translate_all: DEBUG_FLUSH -> DEBUG_TB_FLUSH
translate-all: add DEBUG_LOCKING asserts
docs: new design document multi-thread-tcg.txt (DRAFTING)
exec: add assert_debug_safe and notes on debug structures
translate-all: Add assert_memory_lock annotations
target-arm/arm-powerctl: wake up sleeping CPUs
tcg: cpus rm tcg_exec_all()
tcg: add kick timer for single-threaded vCPU emulation
tcg: rename tcg_current_cpu to tcg_current_rr_cpu
tcg: remove global exit_request
tcg: drop global lock during TCG code execution
tcg: move locking for tb_invalidate_phys_page_range up
tcg: enable thread-per-vCPU
cpu-exec: remove tb_lock from the hot-path
KONRAD Frederic (2):
tcg: protect TBContext with tb_lock.
tcg: add options for enabling MTTCG
Paolo Bonzini (1):
tcg: comment on which functions have to be called with tb_lock held
Sergey Fedorov (1):
tcg: Ensure safe TB lookup out of 'tb_lock'
bsd-user/mmap.c | 5 +
cpu-exec-common.c | 3 -
cpu-exec.c | 104 ++++++-----
cpus.c | 448 ++++++++++++++++++++++++++++------------------
cputlb.c | 1 +
docs/multi-thread-tcg.txt | 225 +++++++++++++++++++++++
exec.c | 87 ++++++++-
hw/i386/kvmvapic.c | 4 +
include/exec/exec-all.h | 6 +-
include/qom/cpu.h | 11 ++
include/sysemu/cpus.h | 2 +
linux-user/elfload.c | 4 +
linux-user/main.c | 1 +
linux-user/mmap.c | 5 +
memory.c | 2 +
qemu-options.hx | 20 +++
softmmu_template.h | 17 ++
target-arm/Makefile.objs | 2 +-
target-arm/arm-powerctl.c | 2 +
target-i386/smm_helper.c | 7 +
tcg/tcg.h | 2 +
translate-all.c | 187 +++++++++++++++----
vl.c | 45 ++++-
23 files changed, 931 insertions(+), 259 deletions(-)
create mode 100644 docs/multi-thread-tcg.txt
--
2.7.4
next reply other threads:[~2016-06-03 20:40 UTC|newest]
Thread overview: 62+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-06-03 20:40 Alex Bennée [this message]
2016-06-03 20:40 ` [Qemu-devel] [RFC v3 01/19] cpus: make all_vcpus_paused() return bool Alex Bennée
2016-06-07 15:05 ` Richard Henderson
2016-06-03 20:40 ` [Qemu-devel] [RFC v3 02/19] translate_all: DEBUG_FLUSH -> DEBUG_TB_FLUSH Alex Bennée
2016-06-07 14:54 ` Richard Henderson
2016-06-03 20:40 ` [Qemu-devel] [RFC v3 03/19] translate-all: add DEBUG_LOCKING asserts Alex Bennée
2016-06-23 14:34 ` Sergey Fedorov
2016-06-23 17:14 ` Alex Bennée
2016-06-23 18:43 ` Sergey Fedorov
2016-07-01 23:21 ` Richard Henderson
2016-06-03 20:40 ` [Qemu-devel] [RFC v3 04/19] docs: new design document multi-thread-tcg.txt (DRAFTING) Alex Bennée
2016-06-23 21:33 ` Sergey Fedorov
2016-06-03 20:40 ` [Qemu-devel] [RFC v3 05/19] exec: add assert_debug_safe and notes on debug structures Alex Bennée
2016-06-24 15:28 ` Sergey Fedorov
2016-06-03 20:40 ` [Qemu-devel] [RFC v3 06/19] tcg: comment on which functions have to be called with tb_lock held Alex Bennée
2016-06-24 15:38 ` Sergey Fedorov
2016-06-03 20:40 ` [Qemu-devel] [RFC v3 07/19] translate-all: Add assert_memory_lock annotations Alex Bennée
2016-06-24 15:48 ` Sergey Fedorov
2016-06-03 20:40 ` [Qemu-devel] [RFC v3 08/19] tcg: protect TBContext with tb_lock Alex Bennée
2016-07-01 23:40 ` Richard Henderson
2016-06-03 20:40 ` [Qemu-devel] [RFC v3 09/19] target-arm/arm-powerctl: wake up sleeping CPUs Alex Bennée
2016-06-03 20:40 ` [Qemu-devel] [RFC v3 10/19] tcg: cpus rm tcg_exec_all() Alex Bennée
2016-06-24 17:09 ` Sergey Fedorov
2016-07-01 23:50 ` Richard Henderson
2016-06-03 20:40 ` [Qemu-devel] [RFC v3 11/19] tcg: add options for enabling MTTCG Alex Bennée
2016-06-27 21:07 ` Sergey Fedorov
2016-07-22 16:17 ` Alex Bennée
2016-07-01 23:53 ` Richard Henderson
2016-07-02 7:11 ` Alex Bennée
2016-07-02 7:38 ` Sergey Fedorov
2016-07-04 10:10 ` Paolo Bonzini
2016-06-03 20:40 ` [Qemu-devel] [RFC v3 12/19] tcg: add kick timer for single-threaded vCPU emulation Alex Bennée
2016-06-27 21:20 ` Sergey Fedorov
2016-07-02 0:17 ` Richard Henderson
2016-07-02 7:36 ` Sergey Fedorov
2016-06-03 20:40 ` [Qemu-devel] [RFC v3 13/19] tcg: rename tcg_current_cpu to tcg_current_rr_cpu Alex Bennée
2016-06-06 15:30 ` Paolo Bonzini
2016-06-06 16:05 ` Alex Bennée
2016-06-06 17:05 ` Paolo Bonzini
2016-06-06 17:26 ` Alex Bennée
2016-06-06 18:25 ` Paolo Bonzini
2016-06-07 12:59 ` Alex Bennée
2016-06-03 20:40 ` [Qemu-devel] [RFC v3 14/19] tcg: remove global exit_request Alex Bennée
2016-06-28 16:20 ` Sergey Fedorov
2016-08-03 11:42 ` Alex Bennée
2016-06-03 20:40 ` [Qemu-devel] [RFC v3 15/19] tcg: drop global lock during TCG code execution Alex Bennée
2016-06-28 16:54 ` Sergey Fedorov
2016-08-10 13:51 ` Alex Bennée
2016-06-03 20:40 ` [Qemu-devel] [RFC v3 16/19] tcg: move locking for tb_invalidate_phys_page_range up Alex Bennée
2016-06-28 19:43 ` Sergey Fedorov
2016-06-28 19:51 ` Sergey Fedorov
2016-06-03 20:40 ` [Qemu-devel] [RFC v3 17/19] tcg: enable thread-per-vCPU Alex Bennée
2016-06-29 14:09 ` Sergey Fedorov
2016-08-10 14:44 ` Alex Bennée
2016-06-03 20:40 ` [Qemu-devel] [RFC v3 18/19] tcg: Ensure safe TB lookup out of 'tb_lock' Alex Bennée
2016-06-03 20:40 ` [Qemu-devel] [RFC v3 19/19] cpu-exec: remove tb_lock from the hot-path Alex Bennée
2016-06-29 14:35 ` Sergey Fedorov
2016-06-29 14:47 ` Alex Bennée
2016-06-29 14:52 ` Sergey Fedorov
2016-06-29 16:08 ` Alex Bennée
2016-06-30 9:24 ` Sergey Fedorov
2016-06-04 14:40 ` [Qemu-devel] [RFC v3 00/19] Base enabling patches for MTTCG Pranith Kumar
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=1464986428-6739-1-git-send-email-alex.bennee@linaro.org \
--to=alex.bennee@linaro.org \
--cc=a.rigo@virtualopensystems.com \
--cc=bobby.prani@gmail.com \
--cc=claudio.fontana@huawei.com \
--cc=cota@braap.org \
--cc=fred.konrad@greensocs.com \
--cc=jan.kiszka@siemens.com \
--cc=mark.burton@greensocs.com \
--cc=mttcg@listserver.greensocs.com \
--cc=pbonzini@redhat.com \
--cc=peter.maydell@linaro.org \
--cc=qemu-devel@nongnu.org \
--cc=rth@twiddle.net \
--cc=serge.fdrv@gmail.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).