From: Masami Hiramatsu <masami.hiramatsu.pt@hitachi.com>
To: Stefan Hajnoczi <stefanha@linux.vnet.ibm.com>
Cc: Josh Stone <jistone@redhat.com>, qemu-devel@nongnu.org
Subject: Re: [Qemu-devel] [PATCH] tracetool: Omit useless QEMU_*_ENABLED() check
Date: Tue, 27 Sep 2011 17:49:37 +0900 [thread overview]
Message-ID: <4E818E21.5010501@hitachi.com> (raw)
In-Reply-To: <1317110422-25005-1-git-send-email-stefanha@linux.vnet.ibm.com>
(2011/09/27 17:00), Stefan Hajnoczi wrote:
> SystemTap provides a "semaphore" that can optionally be tested before
> executing a trace event. The purpose of this mechanism is to skip
> expensive tracing code when the trace event is disabled.
>
> For example, some applications may have trace events that format or
> convert strings for trace events. This expensive processing should only
> be done in the case where the trace event is enabled.
>
> Since QEMU's generated trace events never have such special-purpose
> code, there is no reason to add the semaphore check.
>
> Signed-off-by: Stefan Hajnoczi <stefanha@linux.vnet.ibm.com>
Thanks Stefan,
The systemtap sdt.h just makes a space with NOP for inserting
a breakpoint. However, ENABLED() check adds another static
variable checking for each tracepoint. So without any clear
reason, ENABLED() should not be used.
I've checked that this can remove useless conditional jumps from
the code.
Without this patch:
0000000000420130 <vm_state_notify>:
[snip]
420146: 48 89 44 24 08 mov %rax,0x8(%rsp)
42014b: 31 c0 xor %eax,%eax
// Here, this check a semaphore
42014d: 66 83 3d 0f da 58 00 cmpw $0x0,0x58da0f(%rip)
420154: 00
// And a conditional jump
420155: 75 3e jne 420195 <vm_state_notify+0x65>
420157: 48 8b 1d 4a df 58 00 mov 0x58df4a(%rip),%rbx
[snip]
420192: 41 5c pop %r12
420194: c3 retq
420195: 90 nop // jump to here
420196: eb bf jmp 420157 <vm_state_notify+0x27>
With this patch:
0000000000420130 <vm_state_notify>:
[snip]
420146: 48 89 44 24 08 mov %rax,0x8(%rsp)
42014b: 31 c0 xor %eax,%eax
42014d: 90 nop // We have just one NOP
42014e: 48 8b 1d 13 d7 58 00 mov 0x58d713(%rip),%rbx
420155: 48 85 db test %rbx,%rbx
Reviewed-by: Masami Hiramatsu <masami.hiramatsu.pt@hitachi.com>
> ---
> scripts/tracetool | 4 +---
> 1 files changed, 1 insertions(+), 3 deletions(-)
>
> diff --git a/scripts/tracetool b/scripts/tracetool
> index 4c9951d..ffe3eba 100755
> --- a/scripts/tracetool
> +++ b/scripts/tracetool
> @@ -415,9 +415,7 @@ linetoh_dtrace()
> # Define an empty function for the trace event
> cat <<EOF
> static inline void trace_$name($args) {
> - if (QEMU_${nameupper}_ENABLED()) {
> - QEMU_${nameupper}($argnames);
> - }
> + QEMU_${nameupper}($argnames);
> }
> EOF
> }
--
Masami HIRAMATSU
Software Platform Research Dept. Linux Technology Center
Hitachi, Ltd., Yokohama Research Laboratory
E-mail: masami.hiramatsu.pt@hitachi.com
next prev parent reply other threads:[~2011-09-27 8:49 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-09-27 8:00 [Qemu-devel] [PATCH] tracetool: Omit useless QEMU_*_ENABLED() check Stefan Hajnoczi
2011-09-27 8:49 ` Masami Hiramatsu [this message]
2012-01-10 14:23 ` 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=4E818E21.5010501@hitachi.com \
--to=masami.hiramatsu.pt@hitachi.com \
--cc=jistone@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=stefanha@linux.vnet.ibm.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.