qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Richard Henderson <richard.henderson@linaro.org>
To: qemu-devel@nongnu.org
Cc: peter.maydell@linaro.org, "Emilio G. Cota" <cota@braap.org>
Subject: [Qemu-devel] [PULL 02/23] tcg: fix corruption of code_time profiling counter upon tb_flush
Date: Mon,  9 Oct 2017 17:55:39 -0700	[thread overview]
Message-ID: <20171010005600.28735-3-richard.henderson@linaro.org> (raw)
In-Reply-To: <20171010005600.28735-1-richard.henderson@linaro.org>

From: "Emilio G. Cota" <cota@braap.org>

Whenever there is an overflow in code_gen_buffer (e.g. we run out
of space in it and have to flush it), the code_time profiling counter
ends up with an invalid value (that is, code_time -= profile_getclock(),
without later on getting += profile_getclock() due to the goto).

Fix it by using the ti variable, so that we only update code_time
when there is no overflow. Note that in case there is an overflow
we fail to account for the elapsed coding time, but this is quite rare
so we can probably live with it.

"info jit" before/after, roughly at the same time during debian-arm bootup:

- before:
Statistics:
TB flush count      1
TB invalidate count 4665
TLB flush count     998
JIT cycles          -615191529184601 (-256329.804 s at 2.4 GHz)
translated TBs      302310 (aborted=0 0.0%)
avg ops/TB          48.4 max=438
deleted ops/TB      8.54
avg temps/TB        32.31 max=38
avg host code/TB    361.5
avg search data/TB  24.5
cycles/op           -42014693.0
cycles/in byte      -121444900.2
cycles/out byte     -5629031.1
cycles/search byte     -83114481.0
  gen_interm time   -0.0%
  gen_code time     100.0%
optim./code time    -0.0%
liveness/code time  -0.0%
cpu_restore count   6236
  avg cycles        110.4

- after:
Statistics:
TB flush count      1
TB invalidate count 4665
TLB flush count     1010
JIT cycles          1996899624 (0.832 s at 2.4 GHz)
translated TBs      297961 (aborted=0 0.0%)
avg ops/TB          48.5 max=438
deleted ops/TB      8.56
avg temps/TB        32.31 max=38
avg host code/TB    361.8
avg search data/TB  24.5
cycles/op           138.2
cycles/in byte      398.4
cycles/out byte     18.5
cycles/search byte     273.1
  gen_interm time   14.0%
  gen_code time     86.0%
optim./code time    19.4%
liveness/code time  10.3%
cpu_restore count   6372
  avg cycles        111.0

Reviewed-by: Richard Henderson <rth@twiddle.net>
Reviewed-by: Alex Bennée <alex.bennee@linaro.org>
Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
Signed-off-by: Emilio G. Cota <cota@braap.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
---
 accel/tcg/translate-all.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/accel/tcg/translate-all.c b/accel/tcg/translate-all.c
index 6b5d4bece2..b3bfe65059 100644
--- a/accel/tcg/translate-all.c
+++ b/accel/tcg/translate-all.c
@@ -1300,7 +1300,7 @@ TranslationBlock *tb_gen_code(CPUState *cpu,
 #ifdef CONFIG_PROFILER
     tcg_ctx.tb_count++;
     tcg_ctx.interm_time += profile_getclock() - ti;
-    tcg_ctx.code_time -= profile_getclock();
+    ti = profile_getclock();
 #endif
 
     /* ??? Overflow could be handled better here.  In particular, we
@@ -1318,7 +1318,7 @@ TranslationBlock *tb_gen_code(CPUState *cpu,
     }
 
 #ifdef CONFIG_PROFILER
-    tcg_ctx.code_time += profile_getclock();
+    tcg_ctx.code_time += profile_getclock() - ti;
     tcg_ctx.code_in_len += tb->size;
     tcg_ctx.code_out_len += gen_code_size;
     tcg_ctx.search_out_len += search_size;
-- 
2.13.6

  parent reply	other threads:[~2017-10-10  0:56 UTC|newest]

Thread overview: 27+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-10-10  0:55 [Qemu-devel] [PULL 00/23] Queued TCG patches Richard Henderson
2017-10-10  0:55 ` [Qemu-devel] [PULL 01/23] cputlb: bring back tlb_flush_count under !TLB_DEBUG Richard Henderson
2017-10-10  0:55 ` Richard Henderson [this message]
2017-10-10  0:55 ` [Qemu-devel] [PULL 03/23] exec-all: fix typos in TranslationBlock's documentation Richard Henderson
2017-10-10  0:55 ` [Qemu-devel] [PULL 04/23] translate-all: make have_tb_lock static Richard Henderson
2017-10-10  0:55 ` [Qemu-devel] [PULL 05/23] cpu-exec: rename have_tb_lock to acquired_tb_lock in tb_find Richard Henderson
2017-10-10  0:55 ` [Qemu-devel] [PULL 06/23] tcg/i386: constify tcg_target_callee_save_regs Richard Henderson
2017-10-10  0:55 ` [Qemu-devel] [PULL 07/23] tcg/mips: " Richard Henderson
2017-10-10  0:55 ` [Qemu-devel] [PULL 08/23] tcg: remove addr argument from lookup_tb_ptr Richard Henderson
2017-10-10  0:55 ` [Qemu-devel] [PULL 09/23] tcg: consolidate TB lookups in tb_lookup__cpu_state Richard Henderson
2017-10-10  0:55 ` [Qemu-devel] [PULL 10/23] exec-all: bring tb->invalid into tb->cflags Richard Henderson
2017-10-10  0:55 ` [Qemu-devel] [PULL 11/23] translate-all: define and use DEBUG_TB_FLUSH_GATE Richard Henderson
2017-10-10  0:55 ` [Qemu-devel] [PULL 12/23] exec-all: introduce TB_PAGE_ADDR_FMT Richard Henderson
2017-10-10  0:55 ` [Qemu-devel] [PULL 13/23] translate-all: define and use DEBUG_TB_INVALIDATE_GATE Richard Henderson
2017-10-10  0:55 ` [Qemu-devel] [PULL 14/23] translate-all: define and use DEBUG_TB_CHECK_GATE Richard Henderson
2017-10-10  0:55 ` [Qemu-devel] [PULL 15/23] exec-all: extract tb->tc_* into a separate struct tc_tb Richard Henderson
2017-10-10  0:55 ` [Qemu-devel] [PULL 16/23] tci: move tci_regs to tcg_qemu_tb_exec's stack Richard Henderson
2017-10-10  0:55 ` [Qemu-devel] [PULL 17/23] tcg: take .helpers out of TCGContext Richard Henderson
2017-10-10  0:55 ` [Qemu-devel] [PULL 18/23] tcg: allocate optimizer temps with tcg_malloc Richard Henderson
2017-10-10  0:55 ` [Qemu-devel] [PULL 19/23] util: move qemu_real_host_page_size/mask to osdep.h Richard Henderson
2017-10-10  0:55 ` [Qemu-devel] [PULL 20/23] osdep: introduce qemu_mprotect_rwx/none Richard Henderson
2017-10-10  0:55 ` [Qemu-devel] [PULL 21/23] translate-all: use qemu_protect_rwx/none helpers Richard Henderson
2017-10-10  0:55 ` [Qemu-devel] [PULL 22/23] tcg: define TCG_HIGHWATER Richard Henderson
2017-10-10  0:56 ` [Qemu-devel] [PULL 23/23] tcg/mips: delete commented out extern keyword Richard Henderson
2017-10-10  1:30 ` [Qemu-devel] [PULL 00/23] Queued TCG patches no-reply
2017-10-10  1:30 ` no-reply
2017-10-10 12:23 ` Peter Maydell

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=20171010005600.28735-3-richard.henderson@linaro.org \
    --to=richard.henderson@linaro.org \
    --cc=cota@braap.org \
    --cc=peter.maydell@linaro.org \
    --cc=qemu-devel@nongnu.org \
    /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).