qemu-devel
[Top][All Lists]
Advanced

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

Re: [Qemu-devel] [PATCH 00/14] trace: Add static tracing to QEMU


From: Anthony Liguori
Subject: Re: [Qemu-devel] [PATCH 00/14] trace: Add static tracing to QEMU
Date: Sun, 22 Aug 2010 16:47:41 -0500
User-agent: Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.1.11) Gecko/20100713 Lightning/1.0b1 Thunderbird/3.0.6

On 08/12/2010 05:36 AM, Stefan Hajnoczi wrote:
This patch series adds static tracing to QEMU.  It can be used to instrument
QEMU code by means of lightweight logging called trace events.

Prerna and I are now posting the entire patch series with a serious eye towards
checking we meet users' and developers' tracing needs and with the goal of
getting this functionality merged into qemu.git.

Tracing infrastructure allows debugging, performance analysis, and observation
to be performed.  Right now there are ad-hoc logging calls in some source files
which require rebuilding QEMU with certain #defines and perform poorly.  This
patch series introduces a single tracing infrastructure which is easy to use
and can replace ad-hoc techniques.

Two key points:

1. The trace-events file contains the set of defined trace events which can be
    called from a source file.  For example, trace-events has:

     qemu_malloc(size_t size, void *ptr) "size %zu ptr %p"

    and qemu-malloc.c uses this trace event like this:

     #include "trace.h"  /* needed for trace event prototype */

     void *qemu_malloc(size_t size)
     {
         void *ptr;
         if (!size&&  !allow_zero_malloc()) {
             abort();
         }
         ptr = oom_check(malloc(size ? size : 1));
         trace_qemu_malloc(size, ptr);  /*<-- trace event */
         return ptr;
     }

2. The built-in 'simple' trace backend writes binary traces to
    /tmp/trace-<pid>.  They can be pretty-printed like this:

     ./simpletrace.py trace-events /tmp/trace-*

    Although you can also try LTTng Userspace Tracer ('ust' trace backend), the
    'simple' trace backend provides commands within the QEMU monitor to
    enable/disable trace events at runtime.  It is easy to use and should serve
    as a good default trace backend.

    The 'simple' trace backend's limitation is that it isn't thread-safe and can
    therefore only trace correctly when the QEMU global mutex is held.

For full documentation, see:
http://repo.or.cz/w/qemu/stefanha.git/blob_plain/8d9f8f62d5af986fab6636770450f57fbd0d8b66:/docs/tracing.txt

The git branch is here:
http://repo.or.cz/w/qemu/stefanha.git/shortlog/refs/heads/tracing

This turned out very nice.  Good work!

Regards,

Anthony Liguori

Stefan







reply via email to

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