* [Qemu-devel] [PATCH 1/7] trace: Provide a per-event status define for conditional compilation
2012-03-12 12:37 [Qemu-devel] [PULL 0/7] Tracing patches Stefan Hajnoczi
@ 2012-03-12 12:37 ` Stefan Hajnoczi
2012-03-12 12:37 ` [Qemu-devel] [PATCH 2/7] tracetool: Omit useless QEMU_*_ENABLED() check Stefan Hajnoczi
` (6 subsequent siblings)
7 siblings, 0 replies; 9+ messages in thread
From: Stefan Hajnoczi @ 2012-03-12 12:37 UTC (permalink / raw)
To: qemu-devel
Cc: Blue Swirl, Anthony Liguori, Lluís Vilanova, Stefan Hajnoczi
From: Lluís Vilanova <vilanova@ac.upc.edu>
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 <vilanova@ac.upc.edu>
Signed-off-by: Stefan Hajnoczi <stefanha@linux.vnet.ibm.com>
---
docs/tracing.txt | 46 ++++++++++++++++++++++++++++++++++++++++------
scripts/tracetool | 9 ++++++++-
2 files changed, 48 insertions(+), 7 deletions(-)
diff --git a/docs/tracing.txt b/docs/tracing.txt
index ea29f2c..a92716f 100644
--- a/docs/tracing.txt
+++ b/docs/tracing.txt
@@ -98,12 +98,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
@@ -234,3 +228,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).
+
+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 use the macro 'TRACE_${EVENT_NAME}_ENABLED' to
+guard such computations and 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 */
+ 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..701b517 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 NAME enabled
begin="lineto$1_begin_$backend"
process_line="lineto$1_$backend"
end="lineto$1_end_$backend"
@@ -534,8 +534,15 @@ 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
+ fi
+ if [ "$1" = "h" ]; then
+ name=$(get_name "$str")
+ NAME=$(echo $name | tr '[:lower:]' '[:upper:]')
+ echo "#define TRACE_${NAME}_ENABLED ${enabled}"
fi
done
--
1.7.9.1
^ permalink raw reply related [flat|nested] 9+ messages in thread
* [Qemu-devel] [PATCH 2/7] tracetool: Omit useless QEMU_*_ENABLED() check
2012-03-12 12:37 [Qemu-devel] [PULL 0/7] Tracing patches Stefan Hajnoczi
2012-03-12 12:37 ` [Qemu-devel] [PATCH 1/7] trace: Provide a per-event status define for conditional compilation Stefan Hajnoczi
@ 2012-03-12 12:37 ` Stefan Hajnoczi
2012-03-12 12:37 ` [Qemu-devel] [PATCH 3/7] trace: make trace_thread_create() use its function arg Stefan Hajnoczi
` (5 subsequent siblings)
7 siblings, 0 replies; 9+ messages in thread
From: Stefan Hajnoczi @ 2012-03-12 12:37 UTC (permalink / raw)
To: qemu-devel; +Cc: Blue Swirl, Anthony Liguori, Stefan Hajnoczi
SystemTap provides a "semaphore" that can optionally be tested before
executing a trace event. The purpose of this mechanism is to skip
expensive tracing code when the trace event is disabled.
For example, some applications may have trace events that format or
convert strings for trace events. This expensive processing should only
be done in the case where the trace event is enabled.
Since QEMU's generated trace events never have such special-purpose
code, there is no reason to add the semaphore check.
Reviewed-by: Masami Hiramatsu <masami.hiramatsu.pt@hitachi.com>
Signed-off-by: Stefan Hajnoczi <stefanha@linux.vnet.ibm.com>
---
scripts/tracetool | 4 +---
1 files changed, 1 insertions(+), 3 deletions(-)
diff --git a/scripts/tracetool b/scripts/tracetool
index 701b517..65bd0a1 100755
--- a/scripts/tracetool
+++ b/scripts/tracetool
@@ -415,9 +415,7 @@ linetoh_dtrace()
# Define an empty function for the trace event
cat <<EOF
static inline void trace_$name($args) {
- if (QEMU_${nameupper}_ENABLED()) {
- QEMU_${nameupper}($argnames);
- }
+ QEMU_${nameupper}($argnames);
}
EOF
}
--
1.7.9.1
^ permalink raw reply related [flat|nested] 9+ messages in thread
* [Qemu-devel] [PATCH 3/7] trace: make trace_thread_create() use its function arg
2012-03-12 12:37 [Qemu-devel] [PULL 0/7] Tracing patches Stefan Hajnoczi
2012-03-12 12:37 ` [Qemu-devel] [PATCH 1/7] trace: Provide a per-event status define for conditional compilation Stefan Hajnoczi
2012-03-12 12:37 ` [Qemu-devel] [PATCH 2/7] tracetool: Omit useless QEMU_*_ENABLED() check Stefan Hajnoczi
@ 2012-03-12 12:37 ` Stefan Hajnoczi
2012-03-12 12:37 ` [Qemu-devel] [PATCH 4/7] docs: correct ./configure line in tracing.txt Stefan Hajnoczi
` (4 subsequent siblings)
7 siblings, 0 replies; 9+ messages in thread
From: Stefan Hajnoczi @ 2012-03-12 12:37 UTC (permalink / raw)
To: qemu-devel; +Cc: Blue Swirl, Anthony Liguori, Stefan Hajnoczi, Jun Koi
From: Jun Koi <junkoi2004@gmail.com>
This patch makes trace_thread_create() to use its function arg to
initialize thread. The other choice is to make this a function to use
void arg, but i prefer this way.
Signed-off-by: Jun Koi <junkoi2004@gmail.com>
Signed-off-by: Stefan Hajnoczi <stefanha@linux.vnet.ibm.com>
---
trace/simple.c | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)
diff --git a/trace/simple.c b/trace/simple.c
index bbc9930..33ae486 100644
--- a/trace/simple.c
+++ b/trace/simple.c
@@ -363,7 +363,7 @@ static GThread *trace_thread_create(GThreadFunc fn)
sigfillset(&set);
pthread_sigmask(SIG_SETMASK, &set, &oldset);
#endif
- thread = g_thread_create(writeout_thread, NULL, FALSE, NULL);
+ thread = g_thread_create(fn, NULL, FALSE, NULL);
#ifndef _WIN32
pthread_sigmask(SIG_SETMASK, &oldset, NULL);
#endif
--
1.7.9.1
^ permalink raw reply related [flat|nested] 9+ messages in thread
* [Qemu-devel] [PATCH 4/7] docs: correct ./configure line in tracing.txt
2012-03-12 12:37 [Qemu-devel] [PULL 0/7] Tracing patches Stefan Hajnoczi
` (2 preceding siblings ...)
2012-03-12 12:37 ` [Qemu-devel] [PATCH 3/7] trace: make trace_thread_create() use its function arg Stefan Hajnoczi
@ 2012-03-12 12:37 ` Stefan Hajnoczi
2012-03-12 12:38 ` [Qemu-devel] [PATCH 5/7] maintainers: Add docs/tracing.txt to Tracing Stefan Hajnoczi
` (3 subsequent siblings)
7 siblings, 0 replies; 9+ messages in thread
From: Stefan Hajnoczi @ 2012-03-12 12:37 UTC (permalink / raw)
To: qemu-devel; +Cc: Blue Swirl, Anthony Liguori, Stefan Hajnoczi, Jun Koi
From: Jun Koi <junkoi2004@gmail.com>
This patch corrects the configure's trace option in docs/tracing.txt.
Signed-off-by: Jun Koi <junkoi2004@gmail.com>
Signed-off-by: Stefan Hajnoczi <stefanha@linux.vnet.ibm.com>
---
docs/tracing.txt | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)
diff --git a/docs/tracing.txt b/docs/tracing.txt
index a92716f..c541133 100644
--- a/docs/tracing.txt
+++ b/docs/tracing.txt
@@ -9,7 +9,7 @@ for debugging, profiling, and observing execution.
1. Build with the 'simple' trace backend:
- ./configure --trace-backend=simple
+ ./configure --enable-trace-backend=simple
make
2. Create a file with the events you want to trace:
--
1.7.9.1
^ permalink raw reply related [flat|nested] 9+ messages in thread
* [Qemu-devel] [PATCH 5/7] maintainers: Add docs/tracing.txt to Tracing
2012-03-12 12:37 [Qemu-devel] [PULL 0/7] Tracing patches Stefan Hajnoczi
` (3 preceding siblings ...)
2012-03-12 12:37 ` [Qemu-devel] [PATCH 4/7] docs: correct ./configure line in tracing.txt Stefan Hajnoczi
@ 2012-03-12 12:38 ` Stefan Hajnoczi
2012-03-12 12:38 ` [Qemu-devel] [PATCH 6/7] console: add some trace events Stefan Hajnoczi
` (2 subsequent siblings)
7 siblings, 0 replies; 9+ messages in thread
From: Stefan Hajnoczi @ 2012-03-12 12:38 UTC (permalink / raw)
To: qemu-devel
Cc: Blue Swirl, Peter Maydell, Anthony Liguori, Andreas Färber,
Stefan Hajnoczi
From: Andreas Färber <afaerber@suse.de>
The topic of whether and by whom docs/tracing.txt is maintained was
brought up. It currently does not have an official maintainer.
Add it to the tracing section so that Stefan gets cc'ed on patches.
Signed-off-by: Andreas Färber <afaerber@suse.de>
Acked-by: Stefan Hajnoczi <stefanha@linux.vnet.ibm.com>
Cc: Peter Maydell <peter.maydell@linaro.org>
Signed-off-by: Stefan Hajnoczi <stefanha@linux.vnet.ibm.com>
---
MAINTAINERS | 1 +
1 files changed, 1 insertions(+), 0 deletions(-)
diff --git a/MAINTAINERS b/MAINTAINERS
index d249947..f83d07c2 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -548,6 +548,7 @@ Tracing
M: Stefan Hajnoczi <stefanha@linux.vnet.ibm.com>
S: Maintained
F: trace/
+F: docs/tracing.txt
T: git://github.com/stefanha/qemu.git tracing
Checkpatch
--
1.7.9.1
^ permalink raw reply related [flat|nested] 9+ messages in thread
* [Qemu-devel] [PATCH 6/7] console: add some trace events
2012-03-12 12:37 [Qemu-devel] [PULL 0/7] Tracing patches Stefan Hajnoczi
` (4 preceding siblings ...)
2012-03-12 12:38 ` [Qemu-devel] [PATCH 5/7] maintainers: Add docs/tracing.txt to Tracing Stefan Hajnoczi
@ 2012-03-12 12:38 ` Stefan Hajnoczi
2012-03-12 12:38 ` [Qemu-devel] [PATCH 7/7] vga: add trace event for ppm_save Stefan Hajnoczi
2012-03-13 2:22 ` [Qemu-devel] [PULL 0/7] Tracing patches Anthony Liguori
7 siblings, 0 replies; 9+ messages in thread
From: Stefan Hajnoczi @ 2012-03-12 12:38 UTC (permalink / raw)
To: qemu-devel; +Cc: Blue Swirl, Anthony Liguori, Alon Levy, Stefan Hajnoczi
From: Alon Levy <alevy@redhat.com>
Signed-off-by: Alon Levy <alevy@redhat.com>
Signed-off-by: Stefan Hajnoczi <stefanha@linux.vnet.ibm.com>
---
console.h | 3 +++
trace-events | 4 ++++
2 files changed, 7 insertions(+), 0 deletions(-)
diff --git a/console.h b/console.h
index a95b581..4334db5 100644
--- a/console.h
+++ b/console.h
@@ -5,6 +5,7 @@
#include "qdict.h"
#include "notify.h"
#include "monitor.h"
+#include "trace.h"
/* keyboard/mouse support */
@@ -202,11 +203,13 @@ static inline DisplaySurface* qemu_create_displaysurface(DisplayState *ds, int w
static inline DisplaySurface* qemu_resize_displaysurface(DisplayState *ds, int width, int height)
{
+ trace_displaysurface_resize(ds, ds->surface, width, height);
return ds->allocator->resize_displaysurface(ds->surface, width, height);
}
static inline void qemu_free_displaysurface(DisplayState *ds)
{
+ trace_displaysurface_free(ds, ds->surface);
ds->allocator->free_displaysurface(ds->surface);
}
diff --git a/trace-events b/trace-events
index c5d0f0f..94c4a6f 100644
--- a/trace-events
+++ b/trace-events
@@ -658,3 +658,7 @@ dma_aio_cancel(void *dbs) "dbs=%p"
dma_complete(void *dbs, int ret, void *cb) "dbs=%p ret=%d cb=%p"
dma_bdrv_cb(void *dbs, int ret) "dbs=%p ret=%d"
dma_map_wait(void *dbs) "dbs=%p"
+
+# console.h
+displaysurface_free(void *display_state, void *display_surface) "state=%p surface=%p"
+displaysurface_resize(void *display_state, void *display_surface, int width, int height) "state=%p surface=%p %dx%d"
--
1.7.9.1
^ permalink raw reply related [flat|nested] 9+ messages in thread
* [Qemu-devel] [PATCH 7/7] vga: add trace event for ppm_save
2012-03-12 12:37 [Qemu-devel] [PULL 0/7] Tracing patches Stefan Hajnoczi
` (5 preceding siblings ...)
2012-03-12 12:38 ` [Qemu-devel] [PATCH 6/7] console: add some trace events Stefan Hajnoczi
@ 2012-03-12 12:38 ` Stefan Hajnoczi
2012-03-13 2:22 ` [Qemu-devel] [PULL 0/7] Tracing patches Anthony Liguori
7 siblings, 0 replies; 9+ messages in thread
From: Stefan Hajnoczi @ 2012-03-12 12:38 UTC (permalink / raw)
To: qemu-devel; +Cc: Blue Swirl, Anthony Liguori, Alon Levy, Stefan Hajnoczi
From: Alon Levy <alevy@redhat.com>
Signed-off-by: Alon Levy <alevy@redhat.com>
Signed-off-by: Stefan Hajnoczi <stefanha@linux.vnet.ibm.com>
---
hw/vga.c | 2 ++
trace-events | 3 +++
2 files changed, 5 insertions(+), 0 deletions(-)
diff --git a/hw/vga.c b/hw/vga.c
index 5994f43..6dc98f6 100644
--- a/hw/vga.c
+++ b/hw/vga.c
@@ -30,6 +30,7 @@
#include "pixel_ops.h"
#include "qemu-timer.h"
#include "xen.h"
+#include "trace.h"
//#define DEBUG_VGA
//#define DEBUG_VGA_MEM
@@ -2372,6 +2373,7 @@ int ppm_save(const char *filename, struct DisplaySurface *ds)
int ret;
char *linebuf, *pbuf;
+ trace_ppm_save(filename, ds);
f = fopen(filename, "wb");
if (!f)
return -1;
diff --git a/trace-events b/trace-events
index 94c4a6f..dfe28ed 100644
--- a/trace-events
+++ b/trace-events
@@ -662,3 +662,6 @@ dma_map_wait(void *dbs) "dbs=%p"
# console.h
displaysurface_free(void *display_state, void *display_surface) "state=%p surface=%p"
displaysurface_resize(void *display_state, void *display_surface, int width, int height) "state=%p surface=%p %dx%d"
+
+# vga.c
+ppm_save(const char *filename, void *display_surface) "%s surface=%p"
--
1.7.9.1
^ permalink raw reply related [flat|nested] 9+ messages in thread
* Re: [Qemu-devel] [PULL 0/7] Tracing patches
2012-03-12 12:37 [Qemu-devel] [PULL 0/7] Tracing patches Stefan Hajnoczi
` (6 preceding siblings ...)
2012-03-12 12:38 ` [Qemu-devel] [PATCH 7/7] vga: add trace event for ppm_save Stefan Hajnoczi
@ 2012-03-13 2:22 ` Anthony Liguori
7 siblings, 0 replies; 9+ messages in thread
From: Anthony Liguori @ 2012-03-13 2:22 UTC (permalink / raw)
To: Stefan Hajnoczi; +Cc: Blue Swirl, qemu-devel
On 03/12/2012 07:37 AM, Stefan Hajnoczi wrote:
> First round of tracing patches. I should have sent these out a long time ago.
> Once these are out of the way I can review and handle bigger patches from Lluís
> and Harsh.
>
> The following changes since commit a348f108842fb928563865c9918642900cd0d477:
>
> Add missing const attributes for MemoryRegionOps (2012-03-11 11:40:15 +0000)
>
> are available in the git repository at:
>
> git://github.com/stefanha/qemu.git tracing
>
> for you to fetch changes up to 727500181a2b2470a676e021205d170ede23beb7:
>
> vga: add trace event for ppm_save (2012-03-12 10:30:27 +0000)
>
> ----------------------------------------------------------------
> Alon Levy (2):
> console: add some trace events
> vga: add trace event for ppm_save
>
> Andreas Färber (1):
> maintainers: Add docs/tracing.txt to Tracing
>
> Jun Koi (2):
> trace: make trace_thread_create() use its function arg
> docs: correct ./configure line in tracing.txt
>
> Lluís Vilanova (1):
> trace: Provide a per-event status define for conditional compilation
>
> Stefan Hajnoczi (1):
> tracetool: Omit useless QEMU_*_ENABLED() check
Pulled. Thanks.
Regards,
Anthony Liguori
>
> MAINTAINERS | 1 +
> console.h | 3 +++
> docs/tracing.txt | 48 +++++++++++++++++++++++++++++++++++++++++-------
> hw/vga.c | 2 ++
> scripts/tracetool | 13 +++++++++----
> trace-events | 7 +++++++
> trace/simple.c | 2 +-
> 7 files changed, 64 insertions(+), 12 deletions(-)
>
^ permalink raw reply [flat|nested] 9+ messages in thread