[v7,10/13] trace-state: always use the "nop" backend on events with the "disable" keyword

Submitted by =?utf-8?Q?Llu=C3=ADs?= on Aug. 25, 2011, 7:18 p.m.


Message ID 20110825191836.1413.4577.stgit@ginnungagap.bsc.es
State New
Headers show

Commit Message

=?utf-8?Q?Llu=C3=ADs?= Aug. 25, 2011, 7:18 p.m.
Any event with the keyword/property "disable" generates an empty trace event
using the "nop" backend, regardless of the current backend.

Signed-off-by: LluĂ­s Vilanova <vilanova@ac.upc.edu>
 docs/tracing.txt  |   25 +++++++++++++++----------
 scripts/tracetool |   15 ++-------------
 2 files changed, 17 insertions(+), 23 deletions(-)

Patch hide | download patch | download mbox

diff --git a/docs/tracing.txt b/docs/tracing.txt
index 963d002..448fdef 100644
--- a/docs/tracing.txt
+++ b/docs/tracing.txt
@@ -12,15 +12,11 @@  for debugging, profiling, and observing execution.
     ./configure --trace-backend=simple
-2. Enable trace events you are interested in:
-    $EDITOR trace-events  # remove "disable" from events you want
-3. Run the virtual machine to produce a trace file:
+2. Run the virtual machine to produce a trace file:
     qemu ... # your normal QEMU invocation
-4. Pretty-print the binary trace file:
+3. Pretty-print the binary trace file:
     ./simpletrace.py trace-events trace-*
@@ -103,10 +99,11 @@  portability macros, ensure they are preceded and followed by double quotes:
 4. Name trace events after their function.  If there are multiple trace events
    in one function, append a unique distinguisher at the end of the name.
-5. Declare trace events with the "disable" property.  Some trace events can
-   produce a lot of output and users are typically only interested in a subset
-   of trace events.  Marking trace events disabled by default saves the user
-   from having to manually disable noisy trace events.
+5. If specific trace events are going to be called a huge number of times, this
+   might have a noticeable performance impact even when the trace events are
+   programmatically disabled. In this case you should declare the trace event
+   with the "disable" property, which will effectively disable it at compile
+   time (using the "nop" backend).
 == Generic interface and monitor commands ==
@@ -156,6 +153,9 @@  The "nop" backend generates empty trace event functions so that the compiler
 can optimize out trace events completely.  This is the default and imposes no
 performance penalty.
+Note that regardless of the selected trace backend, events with the "disable"
+property will be generated with the "nop" backend.
 === Stderr ===
 The "stderr" backend sends trace events directly to standard error.  This
@@ -164,6 +164,11 @@  effectively turns trace events into debug printfs.
 This is the simplest backend and can be used together with existing code that
 uses DPRINTF().
+Note that with this backend trace events cannot be programmatically
+enabled/disabled. Thus, in order to trim down the amount of output and the
+performance impact of tracing, you might want to add the "disable" property in
+the "trace-events" file for those events you are not interested in.
 === Simpletrace ===
 The "simple" backend supports common use cases and comes as part of the QEMU
diff --git a/scripts/tracetool b/scripts/tracetool
index e649a5b..e2cf117 100755
--- a/scripts/tracetool
+++ b/scripts/tracetool
@@ -506,21 +506,10 @@  convert()
         # Skip comments and empty lines
         test -z "${str%%#*}" && continue
+        echo
         # Process the line.  The nop backend handles disabled lines.
-        disable="0"
         if has_property "$str" "disable"; then
-            disable="1"
-        fi
-        echo
-        if [ "$disable" = "1" ]; then
-            # Pass the disabled state as an arg for the simple
-            # or DTrace backends which handle it dynamically.
-            # For all other backends, call lineto$1_nop()
-            if [ $backend = "simple" -o "$backend" = "dtrace" ]; then
-                "$process_line" "$str"
-            else
-                "lineto$1_nop" "${str##disable }"
-            fi
+            "lineto$1_nop" "$str"
             "$process_line" "$str"