qemu-devel
[Top][All Lists]
Advanced

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

Re: [Qemu-devel] [PATCH v2 1/2] trace: add TRACE_<event>_BACKEND_DSTATE(


From: Daniel P. Berrange
Subject: Re: [Qemu-devel] [PATCH v2 1/2] trace: add TRACE_<event>_BACKEND_DSTATE()
Date: Mon, 31 Jul 2017 16:16:39 +0100
User-agent: Mutt/1.8.3 (2017-05-23)

On Mon, Jul 31, 2017 at 03:07:17PM +0100, Stefan Hajnoczi wrote:
> QEMU keeps track of trace event enabled/disabled state and provides
> monitor commands to inspect and modify the "dstate".  SystemTap and
> LTTng UST maintain independent enabled/disabled states for each trace
> event, the other backends rely on QEMU dstate.
> 
> Introduce a new per-event macro that combines backend-specific dstate
> like this:
> 
>   #define TRACE_MY_EVENT_BACKEND_DSTATE() ( \
>       QEMU_MY_EVENT_ENABLED() || /* SystemTap */ \
>       tracepoint_enabled(qemu, my_event) /* LTTng UST */ || \
>       false)
> 
> This will be used to extend trace_event_get_state() in the next patch.
> 
> Signed-off-by: Stefan Hajnoczi <address@hidden>


> diff --git a/scripts/tracetool/backend/dtrace.py 
> b/scripts/tracetool/backend/dtrace.py
> index c6812b70a2..17f902cc62 100644
> --- a/scripts/tracetool/backend/dtrace.py
> +++ b/scripts/tracetool/backend/dtrace.py
> @@ -44,8 +44,20 @@ def generate_h_begin(events, group):
>      out('#include "%s"' % header,
>          '')
>  
> +    # SystemTap defines <provider>_<name>_ENABLED() but other DTrace
> +    # implementations might not.
> +    for e in events:
> +        out('#ifndef QEMU_%(uppername)s_ENABLED',
> +            '#define QEMU_%(uppername)s_ENABLED() false',
> +            '#endif',
> +            uppername=e.name.upper())


IIUC, this means that on other DTrace impls, any trace points guarded by
QEMU_*_ENABLED() will never run, even if DTrace probes are set. Having
some trace points silently never run makes it pretty useless IMHO.

IOW, you need the opposite, #define it to true. The probe will still
only be executed if DTrace has enabled it, but you'll have to take the
hit of evaluating the probe arguments regardless. Not as optimized
performance-wise, but functionally correct at least.

>  
>  def generate_h(event, group):
>      out('    QEMU_%(uppername)s(%(argnames)s);',
>          uppername=event.name.upper(),
>          argnames=", ".join(event.args.names()))
> +
> +
> +def generate_h_backend_dstate(event, group):
> +    out('    QEMU_%(uppername)s_ENABLED() || \\',
> +        uppername=event.name.upper())

Regards,
Daniel
-- 
|: https://berrange.com      -o-    https://www.flickr.com/photos/dberrange :|
|: https://libvirt.org         -o-            https://fstop138.berrange.com :|
|: https://entangle-photo.org    -o-    https://www.instagram.com/dberrange :|



reply via email to

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