Patchwork simpletrace: Inline runtime state check

login
register
mail settings
Submitter Jan Kiszka
Date Oct. 19, 2010, 2:14 p.m.
Message ID <4CBDA7B1.6020902@siemens.com>
Download mbox | patch
Permalink /patch/68339/
State New
Headers show

Comments

Jan Kiszka - Oct. 19, 2010, 2:14 p.m.
Instead of preparing all traced args, jumping into the common trace
function, even collecting a timestamp, do the check if a particular
tracepoint is enabled inline. Also, mark the enabled case unlikely to
motivate the compiler to push the trace code out of the fastpath.

Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com>
---
 simpletrace.c |    4 ----
 tracetool     |    7 +++++--
 2 files changed, 5 insertions(+), 6 deletions(-)
Stefan Hajnoczi - Oct. 19, 2010, 3:18 p.m.
On Tue, Oct 19, 2010 at 04:14:09PM +0200, Jan Kiszka wrote:
> Instead of preparing all traced args, jumping into the common trace
> function, even collecting a timestamp, do the check if a particular
> tracepoint is enabled inline. Also, mark the enabled case unlikely to
> motivate the compiler to push the trace code out of the fastpath.
> 
> Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com>
> ---
>  simpletrace.c |    4 ----
>  tracetool     |    7 +++++--
>  2 files changed, 5 insertions(+), 6 deletions(-)

Acked-by: Stefan Hajnoczi <stefanha@linux.vnet.ibm.com>

Patch

diff --git a/simpletrace.c b/simpletrace.c
index deb1e07..224e4ab 100644
--- a/simpletrace.c
+++ b/simpletrace.c
@@ -148,10 +148,6 @@  static void trace(TraceEventID event, uint64_t x1, uint64_t x2, uint64_t x3,
      */
     clock_gettime(CLOCK_MONOTONIC, &ts);
 
-    if (!trace_list[event].state) {
-        return;
-    }
-
     rec->event = event;
     rec->timestamp_ns = ts.tv_sec * 1000000000LL + ts.tv_nsec;
     rec->x1 = x1;
diff --git a/tracetool b/tracetool
index 7010858..9532409 100755
--- a/tracetool
+++ b/tracetool
@@ -146,6 +146,8 @@  linetoh_begin_simple()
 {
     cat <<EOF
 #include "simpletrace.h"
+
+extern TraceEvent trace_list[];
 EOF
 
     simple_event_num=0
@@ -179,7 +181,9 @@  linetoh_simple()
     cat <<EOF
 static inline void trace_$name($args)
 {
-    trace$argc($trace_args);
+    if (unlikely(trace_list[$simple_event_num].state)) {
+        trace$argc($trace_args);
+    }
 }
 EOF
 
@@ -190,7 +194,6 @@  linetoh_end_simple()
 {
     cat <<EOF
 #define NR_TRACE_EVENTS $simple_event_num
-extern TraceEvent trace_list[NR_TRACE_EVENTS];
 EOF
 }