qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH] trace: Provide a per-event status define for co


From: Blue Swirl
Subject: Re: [Qemu-devel] [PATCH] trace: Provide a per-event status define for conditional compilation
Date: Sat, 24 Sep 2011 07:51:11 +0000

2011/9/21 Lluís Vilanova <address@hidden>:
> Adds a 'trace_${name}_enabled' preprocessor define for each tracing event in
> "trace.h".
>
> This lets the user conditionally compile code with a relatively high execution
> cost that is only necessary when producing the tracing information for an 
> event
> that is enabled.
>
> Note that events using this define will probably have the "disable" property 
> by
> default, in order to avoid such costs on regular builds.
>
> Signed-off-by: Lluís Vilanova <address@hidden>
> ---
>  docs/tracing.txt  |   46 ++++++++++++++++++++++++++++++++++++++++------
>  scripts/tracetool |    8 +++++++-
>  2 files changed, 47 insertions(+), 7 deletions(-)
>
> diff --git a/docs/tracing.txt b/docs/tracing.txt
> index b36b54b..5bee61e 100644
> --- a/docs/tracing.txt
> +++ b/docs/tracing.txt
> @@ -103,12 +103,6 @@ respectively.  This ensures portability between 32- and 
> 64-bit platforms.
>  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. 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 ==
>
>  You can programmatically query and control the dynamic state of trace events
> @@ -229,3 +223,43 @@ probes:
>                       --target-type system \
>                       --target-arch x86_64 \
>                       <trace-events >qemu.stp
> +
> +== Trace event properties ==
> +
> +Each event in the "trace-events" file can be prefixed with a space-separated
> +list of zero or more of the following event properties.
> +
> +=== "disable" ===
> +
> +If a specific trace event is going to be invoked a huge number of times, this
> +might have a noticeable performance impact even when the event is
> +programmatically disabled.
> +
> +In this case you should declare such event with the "disable" property. This
> +will effectively disable the event at compile time (by using the "nop" 
> backend),
> +thus having no performance impact at all on regular builds (i.e., unless you
> +edit the "trace-events" file).

Nack, by default events should have no performance impact.

> +
> +In addition, there might be cases where relatively complex computations must 
> be
> +performed to generate values that are only used as arguments for a trace
> +function. In these cases you can guard such computations to avoid its
> +compilation when the event is disabled:
> +
> +    #include "trace.h"  /* needed for trace event prototype */
> +
> +    void *qemu_vmalloc(size_t size)
> +    {
> +        void *ptr;
> +        size_t align = QEMU_VMALLOC_ALIGN;
> +
> +        if (size < align) {
> +            align = getpagesize();
> +        }
> +        ptr = qemu_memalign(align, size);
> +        if (trace_qemu_vmalloc_enabled) { /* preprocessor macro */

Macros should be uppercase to avoid confusion.

> +            void *complex;
> +            /* some complex computations to produce the 'complex' value */
> +            trace_qemu_vmalloc(size, ptr, complex);
> +        }
> +        return ptr;
> +    }
> diff --git a/scripts/tracetool b/scripts/tracetool
> index 4c9951d..97f9f1b 100755
> --- a/scripts/tracetool
> +++ b/scripts/tracetool
> @@ -519,7 +519,7 @@ linetostap_end_dtrace()
>  # Process stdin by calling begin, line, and end functions for the backend
>  convert()
>  {
> -    local begin process_line end str disable
> +    local begin process_line end str name enabled
>     begin="lineto$1_begin_$backend"
>     process_line="lineto$1_$backend"
>     end="lineto$1_end_$backend"
> @@ -534,8 +534,14 @@ convert()
>         # Process the line.  The nop backend handles disabled lines.
>         if has_property "$str" "disable"; then
>             "lineto$1_nop" "$str"
> +            enabled=0
>         else
>             "$process_line" "$str"
> +            enabled=1

Instead of '1', couldn't this be a function that checks if the trace
point is enabled during run time (from monitor etc.)?

> +        fi
> +        if [ "$1" = "h" ]; then
> +            name=$(get_name "$str")
> +            echo "#define trace_${name}_enabled ${enabled}"
>         fi
>     done
>
>
>
>



reply via email to

[Prev in Thread] Current Thread [Next in Thread]