qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
* [Qemu-devel] [PATCH 00/22] tcg: tb_lock removal
@ 2017-08-07 23:52 Emilio G. Cota
  2017-08-07 23:52 ` [Qemu-devel] [PATCH 01/22] disas/arm: fix 'instuction' typo in comment Emilio G. Cota
                   ` (23 more replies)
  0 siblings, 24 replies; 27+ messages in thread
From: Emilio G. Cota @ 2017-08-07 23:52 UTC (permalink / raw)
  To: qemu-devel; +Cc: Richard Henderson

This series applies on top of the "multiple TCG contexts" series, v4:
  https://lists.gnu.org/archive/html/qemu-devel/2017-07/msg06769.html

Highlights:

- First, fix a few typos I encountered while working on this (patches 1-3).
  I could send them separately to qemu-trivial if you prefer.
- QHT: use a proper cmp function, instead of just checking pointer values
  to determine equality of matches.
- Use a binary search tree for each TCG region.
- Make l1_map lockless by using cmpxchg
- Introduce page locks (for !user-mode), so that tb_lock is not
  needed when operating on a page
  - Introduce page_collection, to lock a range of pages
- Introduce tb->jmp_lock to protect TB jump lists.
- Remove tb_lock. User-mode uses just mmap_lock and tb->jmp_lock's;
  !user-mode uses the same jump locks as well as page locks.

Performance numbers are in patch 22. We get nice speedups, but I still
see a lot of idling when booting many cores. I suspect it comes from
cross-CPU events (e.g. TLB invalidations), but I need to profile it
better (perf is not good for this; mutrace doesn't quite work). But
anyway that's for another patchset.

You can fetch these changes from:
  https://github.com/cota/qemu/tree/multi-tcg-v4-parallel

Please review!

Thanks,

		Emilio

diffstat:

 accel/tcg/cpu-exec.c            |  58 +-
 accel/tcg/cputlb.c              |   8 -
 accel/tcg/translate-all.c       | 958 +++++++++++++++--------
 accel/tcg/translate-all.h       |   6 +-
 disas/arm.c                     |   2 +-
 docs/devel/multi-thread-tcg.txt |  21 +-
 exec.c                          |  25 +-
 include/exec/cpu-common.h       |   1 -
 include/exec/exec-all.h         |  86 +-
 include/exec/tb-context.h       |   4 -
 include/qemu/qht.h              |  36 +-
 linux-user/main.c               |   3 -
 linux-user/syscall.c            |   2 +-
 tcg/tcg.c                       | 205 +++++
 tcg/tcg.h                       |  13 +-
 tests/qht-bench.c               |  18 +-
 tests/test-qht.c                |  20 +-
 util/qht.c                      |  30 +-
 18 files changed, 1022 insertions(+), 474 deletions(-)

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

end of thread, other threads:[~2017-10-06 17:09 UTC | newest]

Thread overview: 27+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2017-08-07 23:52 [Qemu-devel] [PATCH 00/22] tcg: tb_lock removal Emilio G. Cota
2017-08-07 23:52 ` [Qemu-devel] [PATCH 01/22] disas/arm: fix 'instuction' typo in comment Emilio G. Cota
2017-08-07 23:52 ` [Qemu-devel] [PATCH 02/22] linux-user: fix 'finshed' " Emilio G. Cota
2017-08-07 23:52 ` [Qemu-devel] [PATCH 03/22] translate-all: fix 'consisits' " Emilio G. Cota
2017-08-07 23:52 ` [Qemu-devel] [PATCH 04/22] qht: fix kernel-doc markup in qht.h Emilio G. Cota
2017-08-07 23:52 ` [Qemu-devel] [PATCH 05/22] qht: require a default comparison function Emilio G. Cota
2017-08-07 23:52 ` [Qemu-devel] [PATCH 06/22] qht: return existing entry when qht_insert fails Emilio G. Cota
2017-08-07 23:52 ` [Qemu-devel] [PATCH 07/22] tcg: track TBs with per-region BST's Emilio G. Cota
2017-08-07 23:52 ` [Qemu-devel] [PATCH 08/22] tcg: move tb_ctx.tb_phys_invalidate_count to tcg_ctx Emilio G. Cota
2017-08-07 23:52 ` [Qemu-devel] [PATCH 09/22] translate-all: introduce iterator macros for tagged TB lists Emilio G. Cota
2017-08-07 23:52 ` [Qemu-devel] [PATCH 10/22] translate-all: iterate over TBs in a page with page_for_each_tb Emilio G. Cota
2017-08-07 23:52 ` [Qemu-devel] [PATCH 11/22] translate-all: exit from tb_phys_invalidate if qht_remove fails Emilio G. Cota
2017-08-07 23:52 ` [Qemu-devel] [PATCH 12/22] translate-all: make l1_map lockless Emilio G. Cota
2017-08-07 23:52 ` [Qemu-devel] [PATCH 13/22] translate-all: remove hole in PageDesc Emilio G. Cota
2017-08-07 23:52 ` [Qemu-devel] [PATCH 14/22] translate-all: work page-by-page in tb_invalidate_phys_range_1 Emilio G. Cota
2017-08-07 23:52 ` [Qemu-devel] [PATCH 15/22] translate-all: move tb_invalidate_phys_page_range up in the file Emilio G. Cota
2017-08-07 23:52 ` [Qemu-devel] [PATCH 16/22] translate-all: use per-page locking in !user-mode Emilio G. Cota
2017-08-07 23:52 ` [Qemu-devel] [PATCH 17/22] translate-all: discard TB when tb_link_page returns an existing matching TB Emilio G. Cota
2017-08-07 23:52 ` [Qemu-devel] [PATCH 18/22] translate-all: protect TB jumps with a per-destination-TB lock Emilio G. Cota
2017-08-07 23:52 ` [Qemu-devel] [PATCH 19/22] cputlb: remove tb_lock from tlb_flush functions Emilio G. Cota
2017-08-07 23:52 ` [Qemu-devel] [PATCH 20/22] exec: remove tb_lock from notdirty_mem_write Emilio G. Cota
2017-08-07 23:52 ` [Qemu-devel] [PATCH 21/22] translate-all: remove tb_lock mention from cpu_restore_state_from_tb Emilio G. Cota
2017-08-07 23:52 ` [Qemu-devel] [PATCH 22/22] tcg: remove tb_lock Emilio G. Cota
2017-08-25 23:23 ` [Qemu-devel] [PATCH 00/22] tcg: tb_lock removal Emilio G. Cota
2017-10-05 23:48 ` Emilio G. Cota
2017-10-06 10:56   ` Alex Bennée
2017-10-06 17:08     ` Emilio G. Cota

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