All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Lluís Vilanova" <vilanova@ac.upc.edu>
To: Richard Henderson <richard.henderson@linaro.org>
Cc: qemu-devel@nongnu.org, Paolo Bonzini <pbonzini@redhat.com>,
	Richard Henderson <rth@twiddle.net>,
	Stefan Hajnoczi <stefanha@redhat.com>,
	Peter Crosthwaite <crosthwaite.peter@gmail.com>
Subject: Re: [Qemu-devel] [PATCH 6/7] trace: Add event "guest_inst_after"
Date: Thu, 14 Sep 2017 19:23:34 +0300	[thread overview]
Message-ID: <877ex1nta1.fsf@frigg.lan> (raw)
In-Reply-To: <418914ee-c8bf-2576-3cea-4a3eb2a9d4f7@linaro.org> (Richard Henderson's message of "Wed, 13 Sep 2017 11:01:39 -0700")

Richard Henderson writes:

> On 09/10/2017 09:35 AM, Lluís Vilanova wrote:
>> Signed-off-by: Lluís Vilanova <vilanova@ac.upc.edu>
>> ---
>> accel/tcg/translator.c |   23 ++++++++++++++++++-----
>> trace-events           |    8 ++++++++
>> 2 files changed, 26 insertions(+), 5 deletions(-)
>> 
>> diff --git a/accel/tcg/translator.c b/accel/tcg/translator.c
>> index d66d601c89..c010aeee45 100644
>> --- a/accel/tcg/translator.c
>> +++ b/accel/tcg/translator.c
>> @@ -35,7 +35,8 @@ void translator_loop_temp_check(DisasContextBase *db)
>> void translator_loop(const TranslatorOps *ops, DisasContextBase *db,
>> CPUState *cpu, TranslationBlock *tb)
>> {
>> -    target_ulong pc_bbl;
>> +    target_ulong pc_bbl, pc_insn = 0;
>> +    bool translated_insn = false;
>> int max_insns;
>> 
>> /* Initialize DisasContext */
>> @@ -75,10 +76,15 @@ void translator_loop(const TranslatorOps *ops, DisasContextBase *db,
>> tcg_debug_assert(db->is_jmp == DISAS_NEXT);  /* no early exit */
>> 
>> while (true) {
>> -        target_ulong pc_insn = db->pc_next;
>> TCGv_i32 insn_size_tcg = 0;
>> int insn_size_opcode_idx;
>> 
>> +        /* Tracing after (previous instruction) */
>> +        if (db->num_insns > 0) {
>> +            trace_guest_inst_after_tcg(cpu, tcg_ctx.tcg_env, pc_insn);
>> +        }

> How does this differ from "guest_inst"?  Why would you need two trace points?

I assume you mean how it differs from guest_inst_before. The two main ideas are:

* To be able to get a trace an execution-time event only after the instruction
  or TB have finished executing successfully (i.e., there could be an exception).
* Some values are only known *after* the instruction is translated (like the
  instruction size, or other extra information we might add in the future), so
  an efficient way to collect that is to trace guest_bbl_* and guest_insn_after
  at translation time (to build a TB "dictionary" as some call it), and trace
  guest_bbl_before at execution time (and use the detailed info above that you
  got at translation time).


> Why are you placing this at the beginning of the while loop rather than the end?

Yeah, that'll be much clearer.


>> @@ -164,6 +172,9 @@ void translator_loop(const TranslatorOps *ops, DisasContextBase *db,
>> 
>> gen_set_inline_region_begin(tcg_ctx.disas.inline_label);
>> 
>> +        if (TRACE_GUEST_INST_AFTER_ENABLED && translated_insn) {
>> +            trace_guest_inst_after_tcg(cpu, tcg_ctx.tcg_env, pc_insn);
>> +        }
>> if (TRACE_GUEST_BBL_AFTER_ENABLED) {
>> trace_guest_bbl_after_tcg(cpu, tcg_ctx.tcg_env, pc_bbl);
>> }

> I think I'm finally beginning to understand what you're after with your
> inlining.  But I still think this should be doable in the appropriate opcode
> generating functions.

I'm not sure we can if we want to avoid having the duplicate translation-time
events I said in a previous response (since TB can have two exit points and
we're detecting them through goto_tb).


Thanks,
  Lluis

  reply	other threads:[~2017-09-14 16:23 UTC|newest]

Thread overview: 29+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-09-10 16:11 [Qemu-devel] [PATCH 0/7] trace: Add guest code events Lluís Vilanova
2017-09-10 16:15 ` [Qemu-devel] [PATCH 1/7] trace: Add event "guest_bbl_before" Lluís Vilanova
2017-09-13 16:59   ` Richard Henderson
2017-09-14 14:21     ` Lluís Vilanova
2017-09-10 16:19 ` [Qemu-devel] [PATCH 2/7] trace: Add event "guest_inst_before" Lluís Vilanova
2017-09-13 17:02   ` Richard Henderson
2017-09-14 14:40     ` Lluís Vilanova
2017-09-10 16:23 ` [Qemu-devel] [PATCH 3/7] trace: Add event "guest_inst_info_before" Lluís Vilanova
2017-09-13 17:07   ` Richard Henderson
2017-09-14 14:59     ` Lluís Vilanova
2017-09-14 16:12       ` Richard Henderson
2017-09-10 16:27 ` [Qemu-devel] [PATCH 4/7] tcg: Add support for "inlining" regions of code Lluís Vilanova
2017-09-13 17:09   ` Richard Henderson
2017-09-14 15:20     ` Lluís Vilanova
2017-09-14 16:15       ` Richard Henderson
2017-09-15 12:55         ` Lluís Vilanova
2017-09-26 16:31           ` Lluís Vilanova
2017-09-26 16:52             ` Richard Henderson
2017-09-10 16:31 ` [Qemu-devel] [PATCH 5/7] trace: Add event "guest_bbl_after" Lluís Vilanova
2017-09-13 17:34   ` Richard Henderson
2017-09-14 15:20     ` Lluís Vilanova
2017-09-14 16:16       ` Richard Henderson
2017-09-10 16:35 ` [Qemu-devel] [PATCH 6/7] trace: Add event "guest_inst_after" Lluís Vilanova
2017-09-13 18:01   ` Richard Henderson
2017-09-14 16:23     ` Lluís Vilanova [this message]
2017-09-10 16:39 ` [Qemu-devel] [PATCH 7/7] trace: Add event "guest_inst_info_after" Lluís Vilanova
2017-09-13 18:03   ` Richard Henderson
2017-09-10 16:45 ` [Qemu-devel] [PATCH 0/7] trace: Add guest code events no-reply
2017-09-13 14:36   ` Stefan Hajnoczi

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=877ex1nta1.fsf@frigg.lan \
    --to=vilanova@ac.upc.edu \
    --cc=crosthwaite.peter@gmail.com \
    --cc=pbonzini@redhat.com \
    --cc=qemu-devel@nongnu.org \
    --cc=richard.henderson@linaro.org \
    --cc=rth@twiddle.net \
    --cc=stefanha@redhat.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.