[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH v2 14/17] translate-all: protect TB jumps with a
From: |
Alex Bennée |
Subject: |
Re: [Qemu-devel] [PATCH v2 14/17] translate-all: protect TB jumps with a per-destination-TB lock |
Date: |
Fri, 20 Apr 2018 17:13:03 +0100 |
User-agent: |
mu4e 1.1.0; emacs 26.1 |
Emilio G. Cota <address@hidden> writes:
> This applies to both user-mode and !user-mode emulation.
>
> Instead of relying on a global lock, protect the list of incoming
> jumps with tb->jmp_lock. This lock also protects tb->cflags,
> so update all tb->cflags readers outside tb->jmp_lock to use
> atomic reads via tb_cflags().
>
> In order to find the destination TB (and therefore its jmp_lock)
> from the origin TB, we introduce tb->jmp_dest[].
>
> I considered not using a linked list of jumps, which simplifies
> code and makes the struct smaller. However, it unnecessarily increases
> memory usage, which results in a performance decrease. See for
> instance these numbers booting+shutting down debian-arm:
> Time (s) Rel. err (%) Abs. err (s) Rel. slowdown (%)
> ------------------------------------------------------------------------------
> before 20.88 0.74 0.154512 0.
> after 20.81 0.38 0.079078 -0.33524904
> GTree 21.02 0.28 0.058856 0.67049808
> GHashTable + xxhash 21.63 1.08 0.233604 3.5919540
>
> Using a hash table or a binary tree to keep track of the jumps
> doesn't really pay off, not only due to the increased memory usage,
> but also because most TBs have only 0 or 1 jumps to them. The maximum
> number of jumps when booting debian-arm that I measured is 35, but
> as we can see in the histogram below a TB with that many incoming jumps
> is extremely rare; the average TB has 0.80 incoming jumps.
>
> n_jumps: 379208; avg jumps/tb: 0.801099
> dist: [0.0,1.0)|▄█▁▁▁▁▁▁▁▁▁▁▁ ▁▁▁▁▁▁ ▁▁▁ ▁▁▁ ▁|[34.0,35.0]
>
> Signed-off-by: Emilio G. Cota <address@hidden>
This now conflicts with master
--
Alex Bennée
- [Qemu-devel] [PATCH v2 01/17] qht: require a default comparison function, (continued)
- [Qemu-devel] [PATCH v2 01/17] qht: require a default comparison function, Emilio G. Cota, 2018/04/05
- [Qemu-devel] [PATCH v2 07/17] translate-all: remove hole in PageDesc, Emilio G. Cota, 2018/04/05
- [Qemu-devel] [PATCH v2 09/17] translate-all: move tb_invalidate_phys_page_range up in the file, Emilio G. Cota, 2018/04/05
- [Qemu-devel] [PATCH v2 04/17] tcg: move tb_ctx.tb_phys_invalidate_count to tcg_ctx, Emilio G. Cota, 2018/04/05
- [Qemu-devel] [PATCH v2 15/17] cputlb: remove tb_lock from tlb_flush functions, Emilio G. Cota, 2018/04/05
- [Qemu-devel] [PATCH v2 12/17] translate-all: add page_collection assertions, Emilio G. Cota, 2018/04/05
- [Qemu-devel] [PATCH v2 03/17] tcg: track TBs with per-region BST's, Emilio G. Cota, 2018/04/05
- [Qemu-devel] [PATCH v2 14/17] translate-all: protect TB jumps with a per-destination-TB lock, Emilio G. Cota, 2018/04/05
- Re: [Qemu-devel] [PATCH v2 14/17] translate-all: protect TB jumps with a per-destination-TB lock,
Alex Bennée <=
- [Qemu-devel] [PATCH v2 10/17] translate-all: use per-page locking in !user-mode, Emilio G. Cota, 2018/04/05
- [Qemu-devel] [PATCH v2 05/17] translate-all: iterate over TBs in a page with PAGE_FOR_EACH_TB, Emilio G. Cota, 2018/04/05
- [Qemu-devel] [PATCH v2 17/17] tcg: remove tb_lock, Emilio G. Cota, 2018/04/05
- Re: [Qemu-devel] [PATCH v2 00/17] tcg: tb_lock_removal redux v2, no-reply, 2018/04/05
- Re: [Qemu-devel] [PATCH v2 00/17] tcg: tb_lock_removal redux v2, Alex Bennée, 2018/04/20