* [Qemu-devel] [PATCH 0/2] Add support for SystemTAP and DTrace tracing backends (v5) @ 2010-11-08 19:33 Daniel P. Berrange 2010-11-08 19:33 ` [Qemu-devel] [PATCH 1/2] Add a DTrace tracing backend targetted for SystemTAP compatability Daniel P. Berrange 2010-11-08 19:33 ` [Qemu-devel] [PATCH 2/2] Add support for generating a systemtap tapset static probes Daniel P. Berrange 0 siblings, 2 replies; 22+ messages in thread From: Daniel P. Berrange @ 2010-11-08 19:33 UTC (permalink / raw) To: qemu-devel A repost of the SystemTAP/DTrace patches from http://lists.gnu.org/archive/html/qemu-devel/2010-11/msg00496.html The patch is now split into two pieces. The first patch contains the generic DTrace tracing backend support. The second patch contains additional pieces for SystemTAP to generate a tapset for each of the qemu-system-XXX binaries, to simplify life for admins wanting to use the tracing backend. This addresses the problem in previous versions of the patch where the tapset only worked for /usr/bin/qemu and no other binaries. Unfortunately SystemTAP does not allow for use of wildcards, so it was neccessary to go for a separate tapset file per emulator binary. Changes in v5: - The Makefile merge error is now fixed ^ permalink raw reply [flat|nested] 22+ messages in thread
* [Qemu-devel] [PATCH 1/2] Add a DTrace tracing backend targetted for SystemTAP compatability 2010-11-08 19:33 [Qemu-devel] [PATCH 0/2] Add support for SystemTAP and DTrace tracing backends (v5) Daniel P. Berrange @ 2010-11-08 19:33 ` Daniel P. Berrange 2010-11-16 15:46 ` Anthony Liguori 2010-11-08 19:33 ` [Qemu-devel] [PATCH 2/2] Add support for generating a systemtap tapset static probes Daniel P. Berrange 1 sibling, 1 reply; 22+ messages in thread From: Daniel P. Berrange @ 2010-11-08 19:33 UTC (permalink / raw) To: qemu-devel This introduces a new tracing backend that targets the SystemTAP implementation of DTrace userspace tracing. The core functionality should be applicable and standard across any DTrace implementation on Solaris, OS-X, *BSD, but the Makefile rules will likely need some small additional changes to cope with OS specific build requirements. This backend builds a little differently from the other tracing backends. Specifically there is no 'trace.c' file, because the 'dtrace' command line tool generates a '.o' file directly from the dtrace probe definition file. The probe definition is usually named with a '.d' extension but QEMU uses '.d' files for its external makefile dependancy tracking, so this uses '.dtrace' as the extension for the probe definition file. The 'tracetool' program gains the ability to generate a trace.h file for DTrace, and also to generate the trace.d file containing the dtrace probe definition. Example usage of a dtrace probe in systemtap looks like: probe process("qemu").mark("qemu_malloc") { printf("Malloc %d %p\n", $arg1, $arg2); } * .gitignore: Ignore trace-dtrace.* * Makefile: Extra rules for generating DTrace files * Makefile.obj: Don't build trace.o for DTrace, use trace-dtrace.o generated by 'dtrace' instead * tracetool: Support for generating DTrace data files Signed-off-by: Daniel P. Berrange <berrange@redhat.com> --- .gitignore | 2 + Makefile | 23 +++++++++++ Makefile.objs | 4 ++ configure | 14 ++++++- tracetool | 116 ++++++++++++++++++++++++++++++++++++++++++++++++++++----- 5 files changed, 148 insertions(+), 11 deletions(-) diff --git a/.gitignore b/.gitignore index a43e4d1..3efb4ec 100644 --- a/.gitignore +++ b/.gitignore @@ -4,6 +4,8 @@ config-host.* config-target.* trace.h trace.c +trace-dtrace.h +trace-dtrace.dtrace *-timestamp *-softmmu *-darwin-user diff --git a/Makefile b/Makefile index 02698e9..554ad97 100644 --- a/Makefile +++ b/Makefile @@ -1,6 +1,9 @@ # Makefile for QEMU. GENERATED_HEADERS = config-host.h trace.h qemu-options.def +ifeq ($(TRACE_BACKEND),dtrace) +GENERATED_HEADERS += trace-dtrace.h +endif ifneq ($(wildcard config-host.mak),) # Put the all: rule here so that config-host.mak can contain dependencies. @@ -108,7 +111,11 @@ ui/vnc.o: QEMU_CFLAGS += $(VNC_TLS_CFLAGS) bt-host.o: QEMU_CFLAGS += $(BLUEZ_CFLAGS) +ifeq ($(TRACE_BACKEND),dtrace) +trace.h: trace.h-timestamp trace-dtrace.h +else trace.h: trace.h-timestamp +endif trace.h-timestamp: $(SRC_PATH)/trace-events config-host.mak $(call quiet-command,sh $(SRC_PATH)/tracetool --$(TRACE_BACKEND) -h < $< > $@," GEN trace.h") @cmp -s $@ trace.h || cp $@ trace.h @@ -120,6 +127,20 @@ trace.c-timestamp: $(SRC_PATH)/trace-events config-host.mak trace.o: trace.c $(GENERATED_HEADERS) +trace-dtrace.h: trace-dtrace.dtrace + $(call quiet-command,dtrace -o $@ -h -s $<, " GEN trace-dtrace.h") + +# Normal practice is to name DTrace probe file with a '.d' extension +# but that gets picked up by QEMU's Makefile as an external dependancy +# rule file. So we use '.dtrace' instead +trace-dtrace.dtrace: trace-dtrace.dtrace-timestamp +trace-dtrace.dtrace-timestamp: $(SRC_PATH)/trace-events config-host.mak + $(call quiet-command,sh $(SRC_PATH)/tracetool --$(TRACE_BACKEND) -d < $< > $@," GEN trace-dtrace.dtrace") + @cmp -s $@ trace-dtrace.dtrace || cp $@ trace-dtrace.dtrace + +trace-dtrace.o: trace-dtrace.dtrace $(GENERATED_HEADERS) + $(call quiet-command,dtrace -o $@ -G -s $<, " GEN trace-dtrace.o") + simpletrace.o: simpletrace.c $(GENERATED_HEADERS) version.o: $(SRC_PATH)/version.rc config-host.mak @@ -157,6 +178,8 @@ clean: rm -f slirp/*.o slirp/*.d audio/*.o audio/*.d block/*.o block/*.d net/*.o net/*.d fsdev/*.o fsdev/*.d ui/*.o ui/*.d rm -f qemu-img-cmds.h rm -f trace.c trace.h trace.c-timestamp trace.h-timestamp + rm -f trace-dtrace.dtrace trace-dtrace.dtrace-timestamp + rm -f trace-dtrace.h trace-dtrace.h-timestamp $(MAKE) -C tests clean for d in $(ALL_SUBDIRS) libhw32 libhw64 libuser libdis libdis-user; do \ if test -d $$d; then $(MAKE) -C $$d $@ || exit 1; fi; \ diff --git a/Makefile.objs b/Makefile.objs index faf485e..84fc80e 100644 --- a/Makefile.objs +++ b/Makefile.objs @@ -285,11 +285,15 @@ libdis-$(CONFIG_SPARC_DIS) += sparc-dis.o ###################################################################### # trace +ifeq ($(TRACE_BACKEND),dtrace) +trace-obj-y = trace-dtrace.o +else trace-obj-y = trace.o ifeq ($(TRACE_BACKEND),simple) trace-obj-y += simpletrace.o user-obj-y += qemu-timer-common.o endif +endif vl.o: QEMU_CFLAGS+=$(GPROF_CFLAGS) diff --git a/configure b/configure index 7025d2b..f8dad3e 100755 --- a/configure +++ b/configure @@ -929,7 +929,7 @@ echo " --enable-docs enable documentation build" echo " --disable-docs disable documentation build" echo " --disable-vhost-net disable vhost-net acceleration support" echo " --enable-vhost-net enable vhost-net acceleration support" -echo " --trace-backend=B Trace backend nop simple ust" +echo " --trace-backend=B Trace backend nop simple ust dtrace" echo " --trace-file=NAME Full PATH,NAME of file to store traces" echo " Default:trace-<pid>" echo " --disable-spice disable spice" @@ -2193,6 +2193,18 @@ EOF exit 1 fi fi + +########################################## +# For 'dtrace' backend, test if 'dtrace' command is present +if test "$trace_backend" = "dtrace"; then + if ! has 'dtrace' ; then + echo + echo "Error: dtrace command is not found in PATH $PATH" + echo + exit 1 + fi +fi + ########################################## # End of CC checks # After here, no more $cc or $ld runs diff --git a/tracetool b/tracetool index 7010858..5b6636a 100755 --- a/tracetool +++ b/tracetool @@ -20,10 +20,12 @@ Backends: --nop Tracing disabled --simple Simple built-in backend --ust LTTng User Space Tracing backend + --dtrace DTrace/SystemTAP backend Output formats: -h Generate .h file -c Generate .c file + -d Generate .d file (DTrace only) EOF exit 1 } @@ -46,8 +48,9 @@ get_args() # Get the argument name list of a trace event get_argnames() { - local nfields field name + local nfields field name sep nfields=0 + sep="$2" for field in $(get_args "$1"); do nfields=$((nfields + 1)) @@ -58,7 +61,7 @@ get_argnames() name=${field%,} test "$field" = "$name" && continue - printf "%s" "$name, " + printf "%s%s " $name $sep done # Last argument name @@ -73,7 +76,7 @@ get_argc() { local name argc argc=0 - for name in $(get_argnames "$1"); do + for name in $(get_argnames "$1", ","); do argc=$((argc + 1)) done echo $argc @@ -154,7 +157,7 @@ EOF cast_args_to_uint64_t() { local arg - for arg in $(get_argnames "$1"); do + for arg in $(get_argnames "$1", ","); do printf "%s" "(uint64_t)(uintptr_t)$arg" done } @@ -247,7 +250,7 @@ linetoh_ust() local name args argnames name=$(get_name "$1") args=$(get_args "$1") - argnames=$(get_argnames "$1") + argnames=$(get_argnames "$1", ",") cat <<EOF DECLARE_TRACE(ust_$name, TP_PROTO($args), TP_ARGS($argnames)); @@ -274,7 +277,7 @@ linetoc_ust() local name args argnames fmt name=$(get_name "$1") args=$(get_args "$1") - argnames=$(get_argnames "$1") + argnames=$(get_argnames "$1", ",") fmt=$(get_fmt "$1") cat <<EOF @@ -306,6 +309,87 @@ EOF echo "}" } +linetoh_begin_dtrace() +{ + cat <<EOF +#include "trace-dtrace.h" +EOF +} + +linetoh_dtrace() +{ + local name args argnames state nameupper + name=$(get_name "$1") + args=$(get_args "$1") + argnames=$(get_argnames "$1", ",") + state=$(get_state "$1") + if [ "$state" = "0" ] ; then + name=${name##disable } + fi + + nameupper=`echo $name | tr '[:lower:]' '[:upper:]'` + + # Define an empty function for the trace event + cat <<EOF +static inline void trace_$name($args) { + if (QEMU_${nameupper}_ENABLED()) { + QEMU_${nameupper}($argnames); + } +} +EOF +} + +linetoh_end_dtrace() +{ + return +} + +linetoc_begin_dtrace() +{ + return +} + +linetoc_dtrace() +{ + # No need for function definitions in dtrace backend + return +} + +linetoc_end_dtrace() +{ + return +} + +linetod_begin_dtrace() +{ + cat <<EOF +provider qemu { +EOF +} + +linetod_dtrace() +{ + local name args state + name=$(get_name "$1") + args=$(get_args "$1") + state=$(get_state "$1") + if [ "$state" = "0" ] ; then + name=${name##disable } + fi + + # Define prototype for probe arguments + cat <<EOF + probe $name($args); +EOF +} + +linetod_end_dtrace() +{ + cat <<EOF +}; +EOF +} + # Process stdin by calling begin, line, and end functions for the backend convert() { @@ -324,9 +408,10 @@ convert() disable=${str%%disable *} echo if test -z "$disable"; then - # Pass the disabled state as an arg to lineto$1_simple(). - # For all other cases, call lineto$1_nop() - if [ $backend = "simple" ]; 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 }" @@ -360,9 +445,19 @@ tracetoc() convert c } +tracetod() +{ + if [ $backend != "dtrace" ]; then + echo "DTrace probe generator not applicable to $backend backend" + exit 1 + fi + echo "/* This file is autogenerated by tracetool, do not edit. */" + convert d +} + # Choose backend case "$1" in -"--nop" | "--simple" | "--ust") backend="${1#--}" ;; +"--nop" | "--simple" | "--ust" | "--dtrace") backend="${1#--}" ;; *) usage ;; esac shift @@ -370,6 +465,7 @@ shift case "$1" in "-h") tracetoh ;; "-c") tracetoc ;; +"-d") tracetod ;; "--check-backend") exit 0 ;; # used by ./configure to test for backend *) usage ;; esac -- 1.7.2.3 ^ permalink raw reply related [flat|nested] 22+ messages in thread
* Re: [Qemu-devel] [PATCH 1/2] Add a DTrace tracing backend targetted for SystemTAP compatability 2010-11-08 19:33 ` [Qemu-devel] [PATCH 1/2] Add a DTrace tracing backend targetted for SystemTAP compatability Daniel P. Berrange @ 2010-11-16 15:46 ` Anthony Liguori 2010-11-16 17:43 ` Peter Maydell 2010-11-17 11:35 ` Daniel P. Berrange 0 siblings, 2 replies; 22+ messages in thread From: Anthony Liguori @ 2010-11-16 15:46 UTC (permalink / raw) To: Daniel P. Berrange; +Cc: qemu-devel On 11/08/2010 01:33 PM, Daniel P. Berrange wrote: > This introduces a new tracing backend that targets the SystemTAP > implementation of DTrace userspace tracing. The core functionality > should be applicable and standard across any DTrace implementation > on Solaris, OS-X, *BSD, but the Makefile rules will likely need > some small additional changes to cope with OS specific build > requirements. > > This backend builds a little differently from the other tracing > backends. Specifically there is no 'trace.c' file, because the > 'dtrace' command line tool generates a '.o' file directly from > the dtrace probe definition file. The probe definition is usually > named with a '.d' extension but QEMU uses '.d' files for its > external makefile dependancy tracking, so this uses '.dtrace' as > the extension for the probe definition file. > > The 'tracetool' program gains the ability to generate a trace.h > file for DTrace, and also to generate the trace.d file containing > the dtrace probe definition. > > Example usage of a dtrace probe in systemtap looks like: > > probe process("qemu").mark("qemu_malloc") { > printf("Malloc %d %p\n", $arg1, $arg2); > } > > * .gitignore: Ignore trace-dtrace.* > * Makefile: Extra rules for generating DTrace files > * Makefile.obj: Don't build trace.o for DTrace, use > trace-dtrace.o generated by 'dtrace' instead > * tracetool: Support for generating DTrace data files > > Signed-off-by: Daniel P. Berrange<berrange@redhat.com> > Applied both. Thanks. Regards, Anthony Liguori > --- > .gitignore | 2 + > Makefile | 23 +++++++++++ > Makefile.objs | 4 ++ > configure | 14 ++++++- > tracetool | 116 ++++++++++++++++++++++++++++++++++++++++++++++++++++----- > 5 files changed, 148 insertions(+), 11 deletions(-) > > diff --git a/.gitignore b/.gitignore > index a43e4d1..3efb4ec 100644 > --- a/.gitignore > +++ b/.gitignore > @@ -4,6 +4,8 @@ config-host.* > config-target.* > trace.h > trace.c > +trace-dtrace.h > +trace-dtrace.dtrace > *-timestamp > *-softmmu > *-darwin-user > diff --git a/Makefile b/Makefile > index 02698e9..554ad97 100644 > --- a/Makefile > +++ b/Makefile > @@ -1,6 +1,9 @@ > # Makefile for QEMU. > > GENERATED_HEADERS = config-host.h trace.h qemu-options.def > +ifeq ($(TRACE_BACKEND),dtrace) > +GENERATED_HEADERS += trace-dtrace.h > +endif > > ifneq ($(wildcard config-host.mak),) > # Put the all: rule here so that config-host.mak can contain dependencies. > @@ -108,7 +111,11 @@ ui/vnc.o: QEMU_CFLAGS += $(VNC_TLS_CFLAGS) > > bt-host.o: QEMU_CFLAGS += $(BLUEZ_CFLAGS) > > +ifeq ($(TRACE_BACKEND),dtrace) > +trace.h: trace.h-timestamp trace-dtrace.h > +else > trace.h: trace.h-timestamp > +endif > trace.h-timestamp: $(SRC_PATH)/trace-events config-host.mak > $(call quiet-command,sh $(SRC_PATH)/tracetool --$(TRACE_BACKEND) -h< $< > $@," GEN trace.h") > @cmp -s $@ trace.h || cp $@ trace.h > @@ -120,6 +127,20 @@ trace.c-timestamp: $(SRC_PATH)/trace-events config-host.mak > > trace.o: trace.c $(GENERATED_HEADERS) > > +trace-dtrace.h: trace-dtrace.dtrace > + $(call quiet-command,dtrace -o $@ -h -s $<, " GEN trace-dtrace.h") > + > +# Normal practice is to name DTrace probe file with a '.d' extension > +# but that gets picked up by QEMU's Makefile as an external dependancy > +# rule file. So we use '.dtrace' instead > +trace-dtrace.dtrace: trace-dtrace.dtrace-timestamp > +trace-dtrace.dtrace-timestamp: $(SRC_PATH)/trace-events config-host.mak > + $(call quiet-command,sh $(SRC_PATH)/tracetool --$(TRACE_BACKEND) -d< $< > $@," GEN trace-dtrace.dtrace") > + @cmp -s $@ trace-dtrace.dtrace || cp $@ trace-dtrace.dtrace > + > +trace-dtrace.o: trace-dtrace.dtrace $(GENERATED_HEADERS) > + $(call quiet-command,dtrace -o $@ -G -s $<, " GEN trace-dtrace.o") > + > simpletrace.o: simpletrace.c $(GENERATED_HEADERS) > > version.o: $(SRC_PATH)/version.rc config-host.mak > @@ -157,6 +178,8 @@ clean: > rm -f slirp/*.o slirp/*.d audio/*.o audio/*.d block/*.o block/*.d net/*.o net/*.d fsdev/*.o fsdev/*.d ui/*.o ui/*.d > rm -f qemu-img-cmds.h > rm -f trace.c trace.h trace.c-timestamp trace.h-timestamp > + rm -f trace-dtrace.dtrace trace-dtrace.dtrace-timestamp > + rm -f trace-dtrace.h trace-dtrace.h-timestamp > $(MAKE) -C tests clean > for d in $(ALL_SUBDIRS) libhw32 libhw64 libuser libdis libdis-user; do \ > if test -d $$d; then $(MAKE) -C $$d $@ || exit 1; fi; \ > diff --git a/Makefile.objs b/Makefile.objs > index faf485e..84fc80e 100644 > --- a/Makefile.objs > +++ b/Makefile.objs > @@ -285,11 +285,15 @@ libdis-$(CONFIG_SPARC_DIS) += sparc-dis.o > ###################################################################### > # trace > > +ifeq ($(TRACE_BACKEND),dtrace) > +trace-obj-y = trace-dtrace.o > +else > trace-obj-y = trace.o > ifeq ($(TRACE_BACKEND),simple) > trace-obj-y += simpletrace.o > user-obj-y += qemu-timer-common.o > endif > +endif > > vl.o: QEMU_CFLAGS+=$(GPROF_CFLAGS) > > diff --git a/configure b/configure > index 7025d2b..f8dad3e 100755 > --- a/configure > +++ b/configure > @@ -929,7 +929,7 @@ echo " --enable-docs enable documentation build" > echo " --disable-docs disable documentation build" > echo " --disable-vhost-net disable vhost-net acceleration support" > echo " --enable-vhost-net enable vhost-net acceleration support" > -echo " --trace-backend=B Trace backend nop simple ust" > +echo " --trace-backend=B Trace backend nop simple ust dtrace" > echo " --trace-file=NAME Full PATH,NAME of file to store traces" > echo " Default:trace-<pid>" > echo " --disable-spice disable spice" > @@ -2193,6 +2193,18 @@ EOF > exit 1 > fi > fi > + > +########################################## > +# For 'dtrace' backend, test if 'dtrace' command is present > +if test "$trace_backend" = "dtrace"; then > + if ! has 'dtrace' ; then > + echo > + echo "Error: dtrace command is not found in PATH $PATH" > + echo > + exit 1 > + fi > +fi > + > ########################################## > # End of CC checks > # After here, no more $cc or $ld runs > diff --git a/tracetool b/tracetool > index 7010858..5b6636a 100755 > --- a/tracetool > +++ b/tracetool > @@ -20,10 +20,12 @@ Backends: > --nop Tracing disabled > --simple Simple built-in backend > --ust LTTng User Space Tracing backend > + --dtrace DTrace/SystemTAP backend > > Output formats: > -h Generate .h file > -c Generate .c file > + -d Generate .d file (DTrace only) > EOF > exit 1 > } > @@ -46,8 +48,9 @@ get_args() > # Get the argument name list of a trace event > get_argnames() > { > - local nfields field name > + local nfields field name sep > nfields=0 > + sep="$2" > for field in $(get_args "$1"); do > nfields=$((nfields + 1)) > > @@ -58,7 +61,7 @@ get_argnames() > name=${field%,} > test "$field" = "$name"&& continue > > - printf "%s" "$name, " > + printf "%s%s " $name $sep > done > > # Last argument name > @@ -73,7 +76,7 @@ get_argc() > { > local name argc > argc=0 > - for name in $(get_argnames "$1"); do > + for name in $(get_argnames "$1", ","); do > argc=$((argc + 1)) > done > echo $argc > @@ -154,7 +157,7 @@ EOF > cast_args_to_uint64_t() > { > local arg > - for arg in $(get_argnames "$1"); do > + for arg in $(get_argnames "$1", ","); do > printf "%s" "(uint64_t)(uintptr_t)$arg" > done > } > @@ -247,7 +250,7 @@ linetoh_ust() > local name args argnames > name=$(get_name "$1") > args=$(get_args "$1") > - argnames=$(get_argnames "$1") > + argnames=$(get_argnames "$1", ",") > > cat<<EOF > DECLARE_TRACE(ust_$name, TP_PROTO($args), TP_ARGS($argnames)); > @@ -274,7 +277,7 @@ linetoc_ust() > local name args argnames fmt > name=$(get_name "$1") > args=$(get_args "$1") > - argnames=$(get_argnames "$1") > + argnames=$(get_argnames "$1", ",") > fmt=$(get_fmt "$1") > > cat<<EOF > @@ -306,6 +309,87 @@ EOF > echo "}" > } > > +linetoh_begin_dtrace() > +{ > + cat<<EOF > +#include "trace-dtrace.h" > +EOF > +} > + > +linetoh_dtrace() > +{ > + local name args argnames state nameupper > + name=$(get_name "$1") > + args=$(get_args "$1") > + argnames=$(get_argnames "$1", ",") > + state=$(get_state "$1") > + if [ "$state" = "0" ] ; then > + name=${name##disable } > + fi > + > + nameupper=`echo $name | tr '[:lower:]' '[:upper:]'` > + > + # Define an empty function for the trace event > + cat<<EOF > +static inline void trace_$name($args) { > + if (QEMU_${nameupper}_ENABLED()) { > + QEMU_${nameupper}($argnames); > + } > +} > +EOF > +} > + > +linetoh_end_dtrace() > +{ > + return > +} > + > +linetoc_begin_dtrace() > +{ > + return > +} > + > +linetoc_dtrace() > +{ > + # No need for function definitions in dtrace backend > + return > +} > + > +linetoc_end_dtrace() > +{ > + return > +} > + > +linetod_begin_dtrace() > +{ > + cat<<EOF > +provider qemu { > +EOF > +} > + > +linetod_dtrace() > +{ > + local name args state > + name=$(get_name "$1") > + args=$(get_args "$1") > + state=$(get_state "$1") > + if [ "$state" = "0" ] ; then > + name=${name##disable } > + fi > + > + # Define prototype for probe arguments > + cat<<EOF > + probe $name($args); > +EOF > +} > + > +linetod_end_dtrace() > +{ > + cat<<EOF > +}; > +EOF > +} > + > # Process stdin by calling begin, line, and end functions for the backend > convert() > { > @@ -324,9 +408,10 @@ convert() > disable=${str%%disable *} > echo > if test -z "$disable"; then > - # Pass the disabled state as an arg to lineto$1_simple(). > - # For all other cases, call lineto$1_nop() > - if [ $backend = "simple" ]; 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 }" > @@ -360,9 +445,19 @@ tracetoc() > convert c > } > > +tracetod() > +{ > + if [ $backend != "dtrace" ]; then > + echo "DTrace probe generator not applicable to $backend backend" > + exit 1 > + fi > + echo "/* This file is autogenerated by tracetool, do not edit. */" > + convert d > +} > + > # Choose backend > case "$1" in > -"--nop" | "--simple" | "--ust") backend="${1#--}" ;; > +"--nop" | "--simple" | "--ust" | "--dtrace") backend="${1#--}" ;; > *) usage ;; > esac > shift > @@ -370,6 +465,7 @@ shift > case "$1" in > "-h") tracetoh ;; > "-c") tracetoc ;; > +"-d") tracetod ;; > "--check-backend") exit 0 ;; # used by ./configure to test for backend > *) usage ;; > esac > ^ permalink raw reply [flat|nested] 22+ messages in thread
* Re: [Qemu-devel] [PATCH 1/2] Add a DTrace tracing backend targetted for SystemTAP compatability 2010-11-16 15:46 ` Anthony Liguori @ 2010-11-16 17:43 ` Peter Maydell 2010-11-16 18:10 ` Anthony Liguori 2010-11-17 11:35 ` Daniel P. Berrange 1 sibling, 1 reply; 22+ messages in thread From: Peter Maydell @ 2010-11-16 17:43 UTC (permalink / raw) To: Anthony Liguori; +Cc: qemu-devel On 16 November 2010 15:46, Anthony Liguori <anthony@codemonkey.ws> wrote: > On 11/08/2010 01:33 PM, Daniel P. Berrange wrote: >> This introduces a new tracing backend that targets the SystemTAP >> implementation of DTrace userspace tracing. > Applied both. Thanks. Unfortunately these commits: 2834c3e Add support for generating a systemtap tapset static probes 4addb11 Add a DTrace tracing backend targetted for SystemTAP compatability seem to have broken building on x86: git clone git://git.qemu.org/qemu.git cd qemu ./configure make fails with LINK i386-softmmu/trace /usr/lib/gcc/x86_64-linux-gnu/4.4.5/../../../../lib/crt1.o: In function `_start': (.text+0x20): undefined reference to `main' collect2: ld returned 1 exit status Incidentally, although trace.c is autogenerated, if you delete it and then type make this does not cause it to be regenerated, which seems wrong to me. -- PMM ^ permalink raw reply [flat|nested] 22+ messages in thread
* Re: [Qemu-devel] [PATCH 1/2] Add a DTrace tracing backend targetted for SystemTAP compatability 2010-11-16 17:43 ` Peter Maydell @ 2010-11-16 18:10 ` Anthony Liguori 2010-11-16 18:54 ` Peter Maydell 0 siblings, 1 reply; 22+ messages in thread From: Anthony Liguori @ 2010-11-16 18:10 UTC (permalink / raw) To: Peter Maydell; +Cc: qemu-devel On 11/16/2010 11:43 AM, Peter Maydell wrote: > On 16 November 2010 15:46, Anthony Liguori<anthony@codemonkey.ws> wrote: > >> On 11/08/2010 01:33 PM, Daniel P. Berrange wrote: >> >>> This introduces a new tracing backend that targets the SystemTAP >>> implementation of DTrace userspace tracing. >>> > >> Applied both. Thanks. >> > Unfortunately these commits: > 2834c3e Add support for generating a systemtap tapset static probes > 4addb11 Add a DTrace tracing backend targetted for SystemTAP compatability > What's your configure output? I don't have the right environment to build with systemtap support, but --trace-backend=nop should work regardless. Regards, Anthony Liguori > seem to have broken building on x86: > git clone git://git.qemu.org/qemu.git > cd qemu > ./configure > make > > fails with > LINK i386-softmmu/trace > /usr/lib/gcc/x86_64-linux-gnu/4.4.5/../../../../lib/crt1.o: In > function `_start': > (.text+0x20): undefined reference to `main' > collect2: ld returned 1 exit status > > Incidentally, although trace.c is autogenerated, if you delete it and > then type make this does not cause it to be regenerated, which > seems wrong to me. > > -- PMM > ^ permalink raw reply [flat|nested] 22+ messages in thread
* Re: [Qemu-devel] [PATCH 1/2] Add a DTrace tracing backend targetted for SystemTAP compatability 2010-11-16 18:10 ` Anthony Liguori @ 2010-11-16 18:54 ` Peter Maydell 2010-11-16 18:58 ` Anthony Liguori 2010-11-17 11:36 ` Daniel P. Berrange 0 siblings, 2 replies; 22+ messages in thread From: Peter Maydell @ 2010-11-16 18:54 UTC (permalink / raw) To: Anthony Liguori; +Cc: qemu-devel [-- Attachment #1: Type: text/plain, Size: 2931 bytes --] On 16 November 2010 18:10, Anthony Liguori <anthony@codemonkey.ws> wrote: > On 11/16/2010 11:43 AM, Peter Maydell wrote: >> Unfortunately these commits: >> 2834c3e Add support for generating a systemtap tapset static probes >> 4addb11 Add a DTrace tracing backend targetted for SystemTAP compatability > > What's your configure output? I've attached it; the trace related bits are: Trace backend nop Trace output file trace-<pid> > I don't have the right environment to build with systemtap support, but > --trace-backend=nop should work regardless. I'm using the nop backend, yes. I think the problem is that commit 2834c3e adds a target 'trace:' to the Makefile.target which looks like it's intended to be a phony target. However it isn't marked as such, so make actually tries to create a binary 'trace' by falling back to its default rules (since there's a "trace.c" in the root directory): petmay01@LinaroE102767:~/qemu-test/qemu/i386-softmmu$ make -n trace echo " CC trace.o" && gcc -I/home/petmay01/qemu-test/qemu/slirp -Werror -m64 -I. -I/home/petmay01/qemu-test/qemu -D_FORTIFY_SOURCE=2 -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -Wstrict-prototypes -Wredundant-decls -Wall -Wundef -Wendif-labels -Wwrite-strings -Wmissing-prototypes -fno-strict-aliasing -fstack-protector-all -Wempty-body -Wnested-externs -Wformat-security -Wformat-y2k -Winit-self -Wignored-qualifiers -Wold-style-declaration -Wold-style-definition -Wtype-limits -DHAS_AUDIO -DHAS_AUDIO_CHOICE -I/home/petmay01/qemu-test/qemu/fpu -I/home/petmay01/qemu-test/qemu/tcg -I/home/petmay01/qemu-test/qemu/tcg/i386 -DTARGET_PHYS_ADDR_BITS=32 -I.. -I/home/petmay01/qemu-test/qemu/target-i386 -DNEED_CPU_H -MMD -MP -MT trace.o -MF ./trace.d -O2 -g -c -o trace.o /home/petmay01/qemu-test/qemu/trace.c echo " LINK trace" && gcc -I/home/petmay01/qemu-test/qemu/slirp -Werror -m64 -I. -I/home/petmay01/qemu-test/qemu -D_FORTIFY_SOURCE=2 -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -Wstrict-prototypes -Wredundant-decls -Wall -Wundef -Wendif-labels -Wwrite-strings -Wmissing-prototypes -fno-strict-aliasing -fstack-protector-all -Wempty-body -Wnested-externs -Wformat-security -Wformat-y2k -Winit-self -Wignored-qualifiers -Wold-style-declaration -Wold-style-definition -Wtype-limits -DHAS_AUDIO -DHAS_AUDIO_CHOICE -I/home/petmay01/qemu-test/qemu/fpu -I/home/petmay01/qemu-test/qemu/tcg -I/home/petmay01/qemu-test/qemu/tcg/i386 -DTARGET_PHYS_ADDR_BITS=32 -I.. -I/home/petmay01/qemu-test/qemu/target-i386 -DNEED_CPU_H -O2 -g -Wl,--warn-common -m64 -g -o trace trace.o -lrt -lpthread -lutil -lcurl -lncurses -luuid -lpng -lsasl2 -lgnutls -lSDL -lX11 -laio -lm -lz ...and linking only trace.o into a binary 'trace' fails because trace.c doesn't have a main() (or indeed any functions at all). If I add a ".PHONY: trace" or change the "trace" target name to "tracexyzzy" then this fixes the problem. -- PMM [-- Attachment #2: configure.out --] [-- Type: application/octet-stream, Size: 2468 bytes --] Install prefix /usr/local BIOS directory /usr/local/share/qemu binary directory /usr/local/bin config directory /usr/local/etc Manual directory /usr/local/share/man ELF interp prefix /usr/gnemul/qemu-%M Source path /home/petmay01/qemu-test/qemu C compiler gcc Host C compiler gcc CFLAGS -O2 -g QEMU_CFLAGS -Werror -m64 -I. -I$(SRC_PATH) -D_FORTIFY_SOURCE=2 -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -Wstrict-prototypes -Wredundant-decls -Wall -Wundef -Wendif-labels -Wwrite-strings -Wmissing-prototypes -fno-strict-aliasing -fstack-protector-all -Wempty-body -Wnested-externs -Wformat-security -Wformat-y2k -Winit-self -Wignored-qualifiers -Wold-style-declaration -Wold-style-definition -Wtype-limits LDFLAGS -Wl,--warn-common -m64 -g make make install install host CPU x86_64 host big endian no target list i386-softmmu x86_64-softmmu arm-softmmu cris-softmmu m68k-softmmu microblaze-softmmu mips-softmmu mipsel-softmmu mips64-softmmu mips64el-softmmu ppc-softmmu ppcemb-softmmu ppc64-softmmu sh4-softmmu sh4eb-softmmu sparc-softmmu sparc64-softmmu i386-linux-user x86_64-linux-user alpha-linux-user arm-linux-user armeb-linux-user cris-linux-user m68k-linux-user microblaze-linux-user mips-linux-user mipsel-linux-user ppc-linux-user ppc64-linux-user ppc64abi32-linux-user sh4-linux-user sh4eb-linux-user sparc-linux-user sparc64-linux-user sparc32plus-linux-user tcg debug enabled no Mon debug enabled no gprof enabled no sparse enabled no strip binaries yes profiler no static build no -Werror enabled yes SDL support yes curses support yes curl support yes check support no mingw32 support no Audio drivers oss Extra audio cards ac97 es1370 sb16 hda Block whitelist Mixer emulation no VNC TLS support yes VNC SASL support yes VNC JPEG support no VNC PNG support yes VNC thread no xen support no brlapi support no bluez support no Documentation no NPTL support yes GUEST_BASE yes PIE user targets no vde support no IO thread no Linux AIO support yes ATTR/XATTR support no Install blobs yes KVM support yes fdt support no preadv support yes fdatasync yes madvise yes posix_madvise yes uuid support yes vhost-net support yes Trace backend nop Trace output file trace-<pid> spice support no ^ permalink raw reply [flat|nested] 22+ messages in thread
* Re: [Qemu-devel] [PATCH 1/2] Add a DTrace tracing backend targetted for SystemTAP compatability 2010-11-16 18:54 ` Peter Maydell @ 2010-11-16 18:58 ` Anthony Liguori 2010-11-16 20:07 ` [Qemu-devel] [PATCH] Fix compilation failure with simple trace when srcdir==objdir Peter Maydell 2010-11-16 20:22 ` [Qemu-devel] [PATCH 1/2] Add a DTrace tracing backend targetted for SystemTAP compatability Peter Maydell 2010-11-17 11:36 ` Daniel P. Berrange 1 sibling, 2 replies; 22+ messages in thread From: Anthony Liguori @ 2010-11-16 18:58 UTC (permalink / raw) To: Peter Maydell; +Cc: qemu-devel On 11/16/2010 12:54 PM, Peter Maydell wrote: > On 16 November 2010 18:10, Anthony Liguori<anthony@codemonkey.ws> wrote: > >> On 11/16/2010 11:43 AM, Peter Maydell wrote: >> >>> Unfortunately these commits: >>> 2834c3e Add support for generating a systemtap tapset static probes >>> 4addb11 Add a DTrace tracing backend targetted for SystemTAP compatability >>> >> What's your configure output? >> > I've attached it; the trace related bits are: > Trace backend nop > Trace output file trace-<pid> > > >> I don't have the right environment to build with systemtap support, but >> --trace-backend=nop should work regardless. >> > I'm using the nop backend, yes. > > I think the problem is that commit 2834c3e adds a target 'trace:' to the > Makefile.target which looks like it's intended to be a phony target. However > it isn't marked as such, so make actually tries to create a binary 'trace' > by falling back to its default rules (since there's a "trace.c" in the root > directory): > > petmay01@LinaroE102767:~/qemu-test/qemu/i386-softmmu$ make -n trace > echo " CC trace.o"&& gcc -I/home/petmay01/qemu-test/qemu/slirp > -Werror -m64 -I. -I/home/petmay01/qemu-test/qemu -D_FORTIFY_SOURCE=2 > -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE > -Wstrict-prototypes -Wredundant-decls -Wall -Wundef -Wendif-labels > -Wwrite-strings -Wmissing-prototypes -fno-strict-aliasing > -fstack-protector-all -Wempty-body -Wnested-externs -Wformat-security > -Wformat-y2k -Winit-self -Wignored-qualifiers -Wold-style-declaration > -Wold-style-definition -Wtype-limits -DHAS_AUDIO -DHAS_AUDIO_CHOICE > -I/home/petmay01/qemu-test/qemu/fpu > -I/home/petmay01/qemu-test/qemu/tcg > -I/home/petmay01/qemu-test/qemu/tcg/i386 -DTARGET_PHYS_ADDR_BITS=32 > -I.. -I/home/petmay01/qemu-test/qemu/target-i386 -DNEED_CPU_H -MMD > -MP -MT trace.o -MF ./trace.d -O2 -g -c -o trace.o > /home/petmay01/qemu-test/qemu/trace.c > echo " LINK trace"&& gcc -I/home/petmay01/qemu-test/qemu/slirp > -Werror -m64 -I. -I/home/petmay01/qemu-test/qemu -D_FORTIFY_SOURCE=2 > -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE > -Wstrict-prototypes -Wredundant-decls -Wall -Wundef -Wendif-labels > -Wwrite-strings -Wmissing-prototypes -fno-strict-aliasing > -fstack-protector-all -Wempty-body -Wnested-externs -Wformat-security > -Wformat-y2k -Winit-self -Wignored-qualifiers -Wold-style-declaration > -Wold-style-definition -Wtype-limits -DHAS_AUDIO -DHAS_AUDIO_CHOICE > -I/home/petmay01/qemu-test/qemu/fpu > -I/home/petmay01/qemu-test/qemu/tcg > -I/home/petmay01/qemu-test/qemu/tcg/i386 -DTARGET_PHYS_ADDR_BITS=32 > -I.. -I/home/petmay01/qemu-test/qemu/target-i386 -DNEED_CPU_H -O2 > -g -Wl,--warn-common -m64 -g -o trace trace.o -lrt -lpthread > -lutil -lcurl -lncurses -luuid -lpng -lsasl2 -lgnutls -lSDL > -lX11 -laio -lm -lz > > ...and linking only trace.o into a binary 'trace' fails because > trace.c doesn't have a main() (or indeed any functions at all). > > If I add a ".PHONY: trace" or change the "trace" target > name to "tracexyzzy" then this fixes the problem. > Curious, care to send a patch? I think I'm not seeing this because I build with srcdir != objdir. Regards, Anthony Liguori > -- PMM > ^ permalink raw reply [flat|nested] 22+ messages in thread
* [Qemu-devel] [PATCH] Fix compilation failure with simple trace when srcdir==objdir 2010-11-16 18:58 ` Anthony Liguori @ 2010-11-16 20:07 ` Peter Maydell 2010-11-16 21:12 ` Stefan Hajnoczi 2010-11-16 22:25 ` Anthony Liguori 2010-11-16 20:22 ` [Qemu-devel] [PATCH 1/2] Add a DTrace tracing backend targetted for SystemTAP compatability Peter Maydell 1 sibling, 2 replies; 22+ messages in thread From: Peter Maydell @ 2010-11-16 20:07 UTC (permalink / raw) To: qemu-devel Fix a makefile error that meant that qemu would not compile if the source and object directories were the same. Signed-off-by: Peter Maydell <peter.maydell@linaro.org> --- Makefile.target | 11 +++++------ 1 files changed, 5 insertions(+), 6 deletions(-) diff --git a/Makefile.target b/Makefile.target index a5e6410..652c7d2 100644 --- a/Makefile.target +++ b/Makefile.target @@ -30,6 +30,7 @@ endif endif PROGS=$(QEMU_PROG) +STPFILES= ifndef CONFIG_HAIKU LIBS+=-lm @@ -41,19 +42,17 @@ config-target.h: config-target.h-timestamp config-target.h-timestamp: config-target.mak ifdef CONFIG_SYSTEMTAP_TRACE -trace: $(QEMU_PROG).stp +STPFILES+=$(QEMU_PROG).stp $(QEMU_PROG).stp: $(call quiet-command,sh $(SRC_PATH)/tracetool \ --$(TRACE_BACKEND) \ --bindir $(bindir) \ --target $(TARGET_ARCH) \ - -s < $(SRC_PATH)/trace-events > $(QEMU_PROG).stp," GEN $(QEMU_PROG).stp") -else -trace: + -s < $(SRC_PATH)/trace-events > $@," GEN $@") endif -all: $(PROGS) trace +all: $(PROGS) $(STPFILES) # Dummy command so that make thinks it has done something @true @@ -363,7 +362,7 @@ endif endif ifdef CONFIG_SYSTEMTAP_TRACE $(INSTALL_DIR) "$(DESTDIR)$(datadir)/../systemtap/tapset" - $(INSTALL_DATA) $(QEMU_PROG).stp "$(DESTDIR)$(datadir)/../systemtap/tapset" + $(INSTALL_DATA) $(STPFILES) "$(DESTDIR)$(datadir)/../systemtap/tapset" endif # Include automatically generated dependency files -- 1.7.1 ^ permalink raw reply related [flat|nested] 22+ messages in thread
* Re: [Qemu-devel] [PATCH] Fix compilation failure with simple trace when srcdir==objdir 2010-11-16 20:07 ` [Qemu-devel] [PATCH] Fix compilation failure with simple trace when srcdir==objdir Peter Maydell @ 2010-11-16 21:12 ` Stefan Hajnoczi 2010-11-16 22:25 ` Anthony Liguori 1 sibling, 0 replies; 22+ messages in thread From: Stefan Hajnoczi @ 2010-11-16 21:12 UTC (permalink / raw) To: Peter Maydell; +Cc: qemu-devel On Tue, Nov 16, 2010 at 8:07 PM, Peter Maydell <peter.maydell@linaro.org> wrote: > Fix a makefile error that meant that qemu would not compile if > the source and object directories were the same. > > Signed-off-by: Peter Maydell <peter.maydell@linaro.org> > --- > Makefile.target | 11 +++++------ > 1 files changed, 5 insertions(+), 6 deletions(-) This patch fixes the build for me. Stefan ^ permalink raw reply [flat|nested] 22+ messages in thread
* Re: [Qemu-devel] [PATCH] Fix compilation failure with simple trace when srcdir==objdir 2010-11-16 20:07 ` [Qemu-devel] [PATCH] Fix compilation failure with simple trace when srcdir==objdir Peter Maydell 2010-11-16 21:12 ` Stefan Hajnoczi @ 2010-11-16 22:25 ` Anthony Liguori 1 sibling, 0 replies; 22+ messages in thread From: Anthony Liguori @ 2010-11-16 22:25 UTC (permalink / raw) To: Peter Maydell; +Cc: qemu-devel On 11/16/2010 02:07 PM, Peter Maydell wrote: > Fix a makefile error that meant that qemu would not compile if > the source and object directories were the same. > > Signed-off-by: Peter Maydell<peter.maydell@linaro.org> > Applied. Thanks. Regards, Anthony Liguori > --- > Makefile.target | 11 +++++------ > 1 files changed, 5 insertions(+), 6 deletions(-) > > diff --git a/Makefile.target b/Makefile.target > index a5e6410..652c7d2 100644 > --- a/Makefile.target > +++ b/Makefile.target > @@ -30,6 +30,7 @@ endif > endif > > PROGS=$(QEMU_PROG) > +STPFILES= > > ifndef CONFIG_HAIKU > LIBS+=-lm > @@ -41,19 +42,17 @@ config-target.h: config-target.h-timestamp > config-target.h-timestamp: config-target.mak > > ifdef CONFIG_SYSTEMTAP_TRACE > -trace: $(QEMU_PROG).stp > +STPFILES+=$(QEMU_PROG).stp > > $(QEMU_PROG).stp: > $(call quiet-command,sh $(SRC_PATH)/tracetool \ > --$(TRACE_BACKEND) \ > --bindir $(bindir) \ > --target $(TARGET_ARCH) \ > - -s< $(SRC_PATH)/trace-events> $(QEMU_PROG).stp," GEN $(QEMU_PROG).stp") > -else > -trace: > + -s< $(SRC_PATH)/trace-events> $@," GEN $@") > endif > > -all: $(PROGS) trace > +all: $(PROGS) $(STPFILES) > > # Dummy command so that make thinks it has done something > @true > @@ -363,7 +362,7 @@ endif > endif > ifdef CONFIG_SYSTEMTAP_TRACE > $(INSTALL_DIR) "$(DESTDIR)$(datadir)/../systemtap/tapset" > - $(INSTALL_DATA) $(QEMU_PROG).stp "$(DESTDIR)$(datadir)/../systemtap/tapset" > + $(INSTALL_DATA) $(STPFILES) "$(DESTDIR)$(datadir)/../systemtap/tapset" > endif > > # Include automatically generated dependency files > ^ permalink raw reply [flat|nested] 22+ messages in thread
* Re: [Qemu-devel] [PATCH 1/2] Add a DTrace tracing backend targetted for SystemTAP compatability 2010-11-16 18:58 ` Anthony Liguori 2010-11-16 20:07 ` [Qemu-devel] [PATCH] Fix compilation failure with simple trace when srcdir==objdir Peter Maydell @ 2010-11-16 20:22 ` Peter Maydell 1 sibling, 0 replies; 22+ messages in thread From: Peter Maydell @ 2010-11-16 20:22 UTC (permalink / raw) To: Anthony Liguori; +Cc: qemu-devel On 16 November 2010 18:58, Anthony Liguori <anthony@codemonkey.ws> wrote: > On 11/16/2010 12:54 PM, Peter Maydell wrote: >> If I add a ".PHONY: trace" or change the "trace" target >> name to "tracexyzzy" then this fixes the problem. > > Curious, care to send a patch? I think I'm not seeing this because I build > with srcdir != objdir. Ah, yes, if I build in a different directory to the sources I can build without having to patch the makefiles. (That feature of configure doesn't seem to be documented anywhere, unless I've missed something.) Anyway, patch sent. I opted to tidy up the makefile a little to avoid either an ugly target name or a GNU-makeism. I fiddled configure so I could test the CONFIG_SYSTEMTAP_TRACE bit despite not having systemtap on this machine, but it would be good if a real systemtap user could check it. A couple of oddities I noticed along the way: (1) How do you get configure to enable CONFIG_SYSTEMTAP_TRACE? The condition is: if test "$trace_backend" = "dtrace" -a "$trace_backend_stap" = "yes" ; then echo "CONFIG_SYSTEMTAP_TRACE=y" >> $config_host_mak fi but trace_backend_stap is only set inside code guarded by if test "$trace_backend" = "ust" ... so as far as I can tell the two halves of the -a will never both be true. (2) in Makefile.target, the blank line after the all: line: > all: $(PROGS) $(STPFILES) > > # Dummy command so that make thinks it has done something > @true is I think a bit misleading although it is valid makefile syntax. I suspect it got added by accident. -- PMM ^ permalink raw reply [flat|nested] 22+ messages in thread
* Re: [Qemu-devel] [PATCH 1/2] Add a DTrace tracing backend targetted for SystemTAP compatability 2010-11-16 18:54 ` Peter Maydell 2010-11-16 18:58 ` Anthony Liguori @ 2010-11-17 11:36 ` Daniel P. Berrange 1 sibling, 0 replies; 22+ messages in thread From: Daniel P. Berrange @ 2010-11-17 11:36 UTC (permalink / raw) To: Peter Maydell; +Cc: qemu-devel On Tue, Nov 16, 2010 at 06:54:57PM +0000, Peter Maydell wrote: > On 16 November 2010 18:10, Anthony Liguori <anthony@codemonkey.ws> wrote: > > On 11/16/2010 11:43 AM, Peter Maydell wrote: > >> Unfortunately these commits: > >> 2834c3e Add support for generating a systemtap tapset static probes > >> 4addb11 Add a DTrace tracing backend targetted for SystemTAP compatability > > > > What's your configure output? > > I've attached it; the trace related bits are: > Trace backend nop > Trace output file trace-<pid> > > > I don't have the right environment to build with systemtap support, but > > --trace-backend=nop should work regardless. > > I'm using the nop backend, yes. > > I think the problem is that commit 2834c3e adds a target 'trace:' to the > Makefile.target which looks like it's intended to be a phony target. However > it isn't marked as such, so make actually tries to create a binary 'trace' > by falling back to its default rules (since there's a "trace.c" in the root > directory): This Makefile problem was fixed in the v6 patches I posted on Nov 12th http://lists.gnu.org/archive/html/qemu-devel/2010-11/msg01033.html Unfortunately the v5 patches were applied by mistake. Regards, Daniel -- |: Red Hat, Engineering, London -o- http://people.redhat.com/berrange/ :| |: http://libvirt.org -o- http://virt-manager.org -o- http://deltacloud.org :| |: http://autobuild.org -o- http://search.cpan.org/~danberr/ :| |: GnuPG: 7D3B9505 -o- F3C9 553F A1DA 4AC2 5648 23C1 B3DF F742 7D3B 9505 :| ^ permalink raw reply [flat|nested] 22+ messages in thread
* Re: [Qemu-devel] [PATCH 1/2] Add a DTrace tracing backend targetted for SystemTAP compatability 2010-11-16 15:46 ` Anthony Liguori 2010-11-16 17:43 ` Peter Maydell @ 2010-11-17 11:35 ` Daniel P. Berrange 2010-11-18 0:00 ` Anthony Liguori 1 sibling, 1 reply; 22+ messages in thread From: Daniel P. Berrange @ 2010-11-17 11:35 UTC (permalink / raw) To: Anthony Liguori; +Cc: qemu-devel On Tue, Nov 16, 2010 at 09:46:20AM -0600, Anthony Liguori wrote: > On 11/08/2010 01:33 PM, Daniel P. Berrange wrote: > >This introduces a new tracing backend that targets the SystemTAP > >implementation of DTrace userspace tracing. The core functionality > >should be applicable and standard across any DTrace implementation > >on Solaris, OS-X, *BSD, but the Makefile rules will likely need > >some small additional changes to cope with OS specific build > >requirements. > > > >This backend builds a little differently from the other tracing > >backends. Specifically there is no 'trace.c' file, because the > >'dtrace' command line tool generates a '.o' file directly from > >the dtrace probe definition file. The probe definition is usually > >named with a '.d' extension but QEMU uses '.d' files for its > >external makefile dependancy tracking, so this uses '.dtrace' as > >the extension for the probe definition file. > > > >The 'tracetool' program gains the ability to generate a trace.h > >file for DTrace, and also to generate the trace.d file containing > >the dtrace probe definition. > > > >Example usage of a dtrace probe in systemtap looks like: > > > > probe process("qemu").mark("qemu_malloc") { > > printf("Malloc %d %p\n", $arg1, $arg2); > > } > > > >* .gitignore: Ignore trace-dtrace.* > >* Makefile: Extra rules for generating DTrace files > >* Makefile.obj: Don't build trace.o for DTrace, use > > trace-dtrace.o generated by 'dtrace' instead > >* tracetool: Support for generating DTrace data files > > > >Signed-off-by: Daniel P. Berrange<berrange@redhat.com> > > > > Applied both. Thanks. I'm afraid you have applied an old version of the patches. Please revert these, and apply version 6, from Nov 12th http://lists.gnu.org/archive/html/qemu-devel/2010-11/msg01033.html Regards, Daniel -- |: Red Hat, Engineering, London -o- http://people.redhat.com/berrange/ :| |: http://libvirt.org -o- http://virt-manager.org -o- http://deltacloud.org :| |: http://autobuild.org -o- http://search.cpan.org/~danberr/ :| |: GnuPG: 7D3B9505 -o- F3C9 553F A1DA 4AC2 5648 23C1 B3DF F742 7D3B 9505 :| ^ permalink raw reply [flat|nested] 22+ messages in thread
* Re: [Qemu-devel] [PATCH 1/2] Add a DTrace tracing backend targetted for SystemTAP compatability 2010-11-17 11:35 ` Daniel P. Berrange @ 2010-11-18 0:00 ` Anthony Liguori 2010-11-18 15:58 ` Stefan Hajnoczi 0 siblings, 1 reply; 22+ messages in thread From: Anthony Liguori @ 2010-11-18 0:00 UTC (permalink / raw) To: Daniel P. Berrange; +Cc: qemu-devel On 11/17/2010 05:35 AM, Daniel P. Berrange wrote: > On Tue, Nov 16, 2010 at 09:46:20AM -0600, Anthony Liguori wrote: > >> On 11/08/2010 01:33 PM, Daniel P. Berrange wrote: >> >>> This introduces a new tracing backend that targets the SystemTAP >>> implementation of DTrace userspace tracing. The core functionality >>> should be applicable and standard across any DTrace implementation >>> on Solaris, OS-X, *BSD, but the Makefile rules will likely need >>> some small additional changes to cope with OS specific build >>> requirements. >>> >>> This backend builds a little differently from the other tracing >>> backends. Specifically there is no 'trace.c' file, because the >>> 'dtrace' command line tool generates a '.o' file directly from >>> the dtrace probe definition file. The probe definition is usually >>> named with a '.d' extension but QEMU uses '.d' files for its >>> external makefile dependancy tracking, so this uses '.dtrace' as >>> the extension for the probe definition file. >>> >>> The 'tracetool' program gains the ability to generate a trace.h >>> file for DTrace, and also to generate the trace.d file containing >>> the dtrace probe definition. >>> >>> Example usage of a dtrace probe in systemtap looks like: >>> >>> probe process("qemu").mark("qemu_malloc") { >>> printf("Malloc %d %p\n", $arg1, $arg2); >>> } >>> >>> * .gitignore: Ignore trace-dtrace.* >>> * Makefile: Extra rules for generating DTrace files >>> * Makefile.obj: Don't build trace.o for DTrace, use >>> trace-dtrace.o generated by 'dtrace' instead >>> * tracetool: Support for generating DTrace data files >>> >>> Signed-off-by: Daniel P. Berrange<berrange@redhat.com> >>> >>> >> Applied both. Thanks. >> > > I'm afraid you have applied an old version of the patches. Please > revert these, and apply version 6, from Nov 12th > Sure, sorry about that. But in the future, please indicate the version somewhere in the patch (preferrably the header). Regards, Anthony Liguori > http://lists.gnu.org/archive/html/qemu-devel/2010-11/msg01033.html > > Regards, > Daniel > ^ permalink raw reply [flat|nested] 22+ messages in thread
* Re: [Qemu-devel] [PATCH 1/2] Add a DTrace tracing backend targetted for SystemTAP compatability 2010-11-18 0:00 ` Anthony Liguori @ 2010-11-18 15:58 ` Stefan Hajnoczi 0 siblings, 0 replies; 22+ messages in thread From: Stefan Hajnoczi @ 2010-11-18 15:58 UTC (permalink / raw) To: Anthony Liguori; +Cc: qemu-devel, Prerna Saxena On Thu, Nov 18, 2010 at 12:00 AM, Anthony Liguori <anthony@codemonkey.ws> wrote: >>> Applied both. Thanks. >>> >> >> I'm afraid you have applied an old version of the patches. Please >> revert these, and apply version 6, from Nov 12th >> > > Sure, sorry about that. > > But in the future, please indicate the version somewhere in the patch > (preferrably the header). Here's the changelog from v5 to v6: - Fix handling of probes with no-args in DTrace provider - Generate one tapset per target, for both system and user emulators - Re-write command line arg parsing in tracetool so it doesn't assume a particular ordering of args - Change '-s' to '--stap' in tracetool to avoid confusion - Pass full binary name into tracetool It would be nice to have v6. Is it possible to revert v5 and apply v6 instead? Stefan ^ permalink raw reply [flat|nested] 22+ messages in thread
* [Qemu-devel] [PATCH 2/2] Add support for generating a systemtap tapset static probes 2010-11-08 19:33 [Qemu-devel] [PATCH 0/2] Add support for SystemTAP and DTrace tracing backends (v5) Daniel P. Berrange 2010-11-08 19:33 ` [Qemu-devel] [PATCH 1/2] Add a DTrace tracing backend targetted for SystemTAP compatability Daniel P. Berrange @ 2010-11-08 19:33 ` Daniel P. Berrange 1 sibling, 0 replies; 22+ messages in thread From: Daniel P. Berrange @ 2010-11-08 19:33 UTC (permalink / raw) To: qemu-devel This introduces generation of a qemu.stp/qemu-system-XXX.stp files which provides tapsets with friendly names for static probes & their arguments. Instead of probe process("qemu").mark("qemu_malloc") { printf("Malloc %d %p\n", $arg1, $arg2); } It is now possible todo probe qemu.system.i386.qemu_malloc { printf("Malloc %d %p\n", size, ptr); } There is one tapset defined per target arch. * Makefile: Generate a qemu.stp file for systemtap * tracetool: Support for generating systemtap tapsets Signed-off-by: Daniel P. Berrange <berrange@redhat.com> --- Makefile.target | 19 +++++++++++- configure | 7 ++++ tracetool | 92 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 117 insertions(+), 1 deletions(-) diff --git a/Makefile.target b/Makefile.target index 91e6e74..a5e6410 100644 --- a/Makefile.target +++ b/Makefile.target @@ -40,7 +40,20 @@ kvm.o kvm-all.o vhost.o vhost_net.o: QEMU_CFLAGS+=$(KVM_CFLAGS) config-target.h: config-target.h-timestamp config-target.h-timestamp: config-target.mak -all: $(PROGS) +ifdef CONFIG_SYSTEMTAP_TRACE +trace: $(QEMU_PROG).stp + +$(QEMU_PROG).stp: + $(call quiet-command,sh $(SRC_PATH)/tracetool \ + --$(TRACE_BACKEND) \ + --bindir $(bindir) \ + --target $(TARGET_ARCH) \ + -s < $(SRC_PATH)/trace-events > $(QEMU_PROG).stp," GEN $(QEMU_PROG).stp") +else +trace: +endif + +all: $(PROGS) trace # Dummy command so that make thinks it has done something @true @@ -348,6 +361,10 @@ ifneq ($(STRIP),) $(STRIP) $(patsubst %,"$(DESTDIR)$(bindir)/%",$(PROGS)) endif endif +ifdef CONFIG_SYSTEMTAP_TRACE + $(INSTALL_DIR) "$(DESTDIR)$(datadir)/../systemtap/tapset" + $(INSTALL_DATA) $(QEMU_PROG).stp "$(DESTDIR)$(datadir)/../systemtap/tapset" +endif # Include automatically generated dependency files -include $(wildcard *.d */*.d) diff --git a/configure b/configure index f8dad3e..e560f87 100755 --- a/configure +++ b/configure @@ -2192,6 +2192,10 @@ EOF echo exit 1 fi + trace_backend_stap="no" + if has 'stap' ; then + trace_backend_stap="yes" + fi fi ########################################## @@ -2645,6 +2649,9 @@ fi if test "$trace_backend" = "simple"; then trace_file="\"$trace_file-%u\"" fi +if test "$trace_backend" = "dtrace" -a "$trace_backend_stap" = "yes" ; then + echo "CONFIG_SYSTEMTAP_TRACE=y" >> $config_host_mak +fi echo "CONFIG_TRACE_FILE=$trace_file" >> $config_host_mak echo "TOOLS=$tools" >> $config_host_mak diff --git a/tracetool b/tracetool index 5b6636a..d797ab7 100755 --- a/tracetool +++ b/tracetool @@ -26,6 +26,12 @@ Output formats: -h Generate .h file -c Generate .c file -d Generate .d file (DTrace only) + -s Generate .stp file (DTrace with SystemTAP only) + +Options: + --bindir [bindir] QEMU binary install location + --target [arch] QEMU target architecture + EOF exit 1 } @@ -390,6 +396,54 @@ linetod_end_dtrace() EOF } +linetos_begin_dtrace() +{ + return +} + +linetos_dtrace() +{ + local name args arglist state + name=$(get_name "$1") + args=$(get_args "$1") + arglist=$(get_argnames "$1", "") + state=$(get_state "$1") + if [ "$state" = "0" ] ; then + name=${name##disable } + fi + + if [ "$target" = "i386" ] + then + binary="qemu" + else + binary="qemu-system-$target" + fi + + # Define prototype for probe arguments + cat <<EOF +probe qemu.system.$target.$name = process("$bindir/$binary").mark("$name") +{ +EOF + + i=1 + for arg in $arglist + do + cat <<EOF + $arg = \$arg$i; +EOF + i="$((i+1))" + done + + cat <<EOF +} +EOF +} + +linetos_end_dtrace() +{ + return +} + # Process stdin by calling begin, line, and end functions for the backend convert() { @@ -455,6 +509,24 @@ tracetod() convert d } +tracetos() +{ + if [ $backend != "dtrace" ]; then + echo "SystemTAP tapset generator not applicable to $backend backend" + exit 1 + fi + if [ -z "$target" ]; then + echo "--target is required for SystemTAP tapset generator" + exit 1 + fi + if [ -z "$bindir" ]; then + echo "--bindir is required for SystemTAP tapset generator" + exit 1 + fi + echo "/* This file is autogenerated by tracetool, do not edit. */" + convert s +} + # Choose backend case "$1" in "--nop" | "--simple" | "--ust" | "--dtrace") backend="${1#--}" ;; @@ -462,10 +534,30 @@ case "$1" in esac shift +bindir= +case "$1" in + "--bindir") + bindir=$2 + shift + shift + ;; +esac + +target= +case "$1" in + "--target") + target=$2 + shift + shift + ;; +esac + + case "$1" in "-h") tracetoh ;; "-c") tracetoc ;; "-d") tracetod ;; +"-s") tracetos ;; "--check-backend") exit 0 ;; # used by ./configure to test for backend *) usage ;; esac -- 1.7.2.3 ^ permalink raw reply related [flat|nested] 22+ messages in thread
* [Qemu-devel] Add support for SystemTAP and DTrace tracing backends (v6) @ 2010-11-12 13:20 Daniel P. Berrange 2010-11-12 13:20 ` [Qemu-devel] [PATCH 1/2] Add a DTrace tracing backend targetted for SystemTAP compatability Daniel P. Berrange 0 siblings, 1 reply; 22+ messages in thread From: Daniel P. Berrange @ 2010-11-12 13:20 UTC (permalink / raw) To: qemu-devel An update of the SystemTAP/DTrace patches from http://lists.gnu.org/archive/html/qemu-devel/2010-11/msg00563.html The first patch contains the generic DTrace tracing backend support. The second patch contains additional pieces for SystemTAP to generate a tapset for each of the qemu-system-XXX binaries, to simplify life for admins wanting to use the tracing backend. Changed in v6: - Fix handling of probes with no-args in DTrace provider - Generate one tapset per target, for both system and user emulators - Re-write command line arg parsing in tracetool so it doesn't assume a particular ordering of args - Change '-s' to '--stap' in tracetool to avoid confusion - Pass full binary name into tracetool ^ permalink raw reply [flat|nested] 22+ messages in thread
* [Qemu-devel] [PATCH 1/2] Add a DTrace tracing backend targetted for SystemTAP compatability 2010-11-12 13:20 [Qemu-devel] Add support for SystemTAP and DTrace tracing backends (v6) Daniel P. Berrange @ 2010-11-12 13:20 ` Daniel P. Berrange 2010-11-12 13:30 ` Stefan Hajnoczi 0 siblings, 1 reply; 22+ messages in thread From: Daniel P. Berrange @ 2010-11-12 13:20 UTC (permalink / raw) To: qemu-devel This introduces a new tracing backend that targets the SystemTAP implementation of DTrace userspace tracing. The core functionality should be applicable and standard across any DTrace implementation on Solaris, OS-X, *BSD, but the Makefile rules will likely need some small additional changes to cope with OS specific build requirements. This backend builds a little differently from the other tracing backends. Specifically there is no 'trace.c' file, because the 'dtrace' command line tool generates a '.o' file directly from the dtrace probe definition file. The probe definition is usually named with a '.d' extension but QEMU uses '.d' files for its external makefile dependancy tracking, so this uses '.dtrace' as the extension for the probe definition file. The 'tracetool' program gains the ability to generate a trace.h file for DTrace, and also to generate the trace.d file containing the dtrace probe definition. Example usage of a dtrace probe in systemtap looks like: probe process("qemu").mark("qemu_malloc") { printf("Malloc %d %p\n", $arg1, $arg2); } * .gitignore: Ignore trace-dtrace.* * Makefile: Extra rules for generating DTrace files * Makefile.obj: Don't build trace.o for DTrace, use trace-dtrace.o generated by 'dtrace' instead * tracetool: Support for generating DTrace data files Signed-off-by: Daniel P. Berrange <berrange@redhat.com> --- .gitignore | 2 + Makefile | 23 +++++++++++ Makefile.objs | 4 ++ configure | 14 ++++++- tracetool | 122 ++++++++++++++++++++++++++++++++++++++++++++++++++++----- 5 files changed, 154 insertions(+), 11 deletions(-) diff --git a/.gitignore b/.gitignore index a43e4d1..3efb4ec 100644 --- a/.gitignore +++ b/.gitignore @@ -4,6 +4,8 @@ config-host.* config-target.* trace.h trace.c +trace-dtrace.h +trace-dtrace.dtrace *-timestamp *-softmmu *-darwin-user diff --git a/Makefile b/Makefile index 02698e9..554ad97 100644 --- a/Makefile +++ b/Makefile @@ -1,6 +1,9 @@ # Makefile for QEMU. GENERATED_HEADERS = config-host.h trace.h qemu-options.def +ifeq ($(TRACE_BACKEND),dtrace) +GENERATED_HEADERS += trace-dtrace.h +endif ifneq ($(wildcard config-host.mak),) # Put the all: rule here so that config-host.mak can contain dependencies. @@ -108,7 +111,11 @@ ui/vnc.o: QEMU_CFLAGS += $(VNC_TLS_CFLAGS) bt-host.o: QEMU_CFLAGS += $(BLUEZ_CFLAGS) +ifeq ($(TRACE_BACKEND),dtrace) +trace.h: trace.h-timestamp trace-dtrace.h +else trace.h: trace.h-timestamp +endif trace.h-timestamp: $(SRC_PATH)/trace-events config-host.mak $(call quiet-command,sh $(SRC_PATH)/tracetool --$(TRACE_BACKEND) -h < $< > $@," GEN trace.h") @cmp -s $@ trace.h || cp $@ trace.h @@ -120,6 +127,20 @@ trace.c-timestamp: $(SRC_PATH)/trace-events config-host.mak trace.o: trace.c $(GENERATED_HEADERS) +trace-dtrace.h: trace-dtrace.dtrace + $(call quiet-command,dtrace -o $@ -h -s $<, " GEN trace-dtrace.h") + +# Normal practice is to name DTrace probe file with a '.d' extension +# but that gets picked up by QEMU's Makefile as an external dependancy +# rule file. So we use '.dtrace' instead +trace-dtrace.dtrace: trace-dtrace.dtrace-timestamp +trace-dtrace.dtrace-timestamp: $(SRC_PATH)/trace-events config-host.mak + $(call quiet-command,sh $(SRC_PATH)/tracetool --$(TRACE_BACKEND) -d < $< > $@," GEN trace-dtrace.dtrace") + @cmp -s $@ trace-dtrace.dtrace || cp $@ trace-dtrace.dtrace + +trace-dtrace.o: trace-dtrace.dtrace $(GENERATED_HEADERS) + $(call quiet-command,dtrace -o $@ -G -s $<, " GEN trace-dtrace.o") + simpletrace.o: simpletrace.c $(GENERATED_HEADERS) version.o: $(SRC_PATH)/version.rc config-host.mak @@ -157,6 +178,8 @@ clean: rm -f slirp/*.o slirp/*.d audio/*.o audio/*.d block/*.o block/*.d net/*.o net/*.d fsdev/*.o fsdev/*.d ui/*.o ui/*.d rm -f qemu-img-cmds.h rm -f trace.c trace.h trace.c-timestamp trace.h-timestamp + rm -f trace-dtrace.dtrace trace-dtrace.dtrace-timestamp + rm -f trace-dtrace.h trace-dtrace.h-timestamp $(MAKE) -C tests clean for d in $(ALL_SUBDIRS) libhw32 libhw64 libuser libdis libdis-user; do \ if test -d $$d; then $(MAKE) -C $$d $@ || exit 1; fi; \ diff --git a/Makefile.objs b/Makefile.objs index 15569af..23b17ce 100644 --- a/Makefile.objs +++ b/Makefile.objs @@ -286,11 +286,15 @@ libdis-$(CONFIG_SPARC_DIS) += sparc-dis.o ###################################################################### # trace +ifeq ($(TRACE_BACKEND),dtrace) +trace-obj-y = trace-dtrace.o +else trace-obj-y = trace.o ifeq ($(TRACE_BACKEND),simple) trace-obj-y += simpletrace.o user-obj-y += qemu-timer-common.o endif +endif vl.o: QEMU_CFLAGS+=$(GPROF_CFLAGS) diff --git a/configure b/configure index 7025d2b..f8dad3e 100755 --- a/configure +++ b/configure @@ -929,7 +929,7 @@ echo " --enable-docs enable documentation build" echo " --disable-docs disable documentation build" echo " --disable-vhost-net disable vhost-net acceleration support" echo " --enable-vhost-net enable vhost-net acceleration support" -echo " --trace-backend=B Trace backend nop simple ust" +echo " --trace-backend=B Trace backend nop simple ust dtrace" echo " --trace-file=NAME Full PATH,NAME of file to store traces" echo " Default:trace-<pid>" echo " --disable-spice disable spice" @@ -2193,6 +2193,18 @@ EOF exit 1 fi fi + +########################################## +# For 'dtrace' backend, test if 'dtrace' command is present +if test "$trace_backend" = "dtrace"; then + if ! has 'dtrace' ; then + echo + echo "Error: dtrace command is not found in PATH $PATH" + echo + exit 1 + fi +fi + ########################################## # End of CC checks # After here, no more $cc or $ld runs diff --git a/tracetool b/tracetool index 7010858..1ade103 100755 --- a/tracetool +++ b/tracetool @@ -20,10 +20,12 @@ Backends: --nop Tracing disabled --simple Simple built-in backend --ust LTTng User Space Tracing backend + --dtrace DTrace/SystemTAP backend Output formats: -h Generate .h file -c Generate .c file + -d Generate .d file (DTrace only) EOF exit 1 } @@ -46,8 +48,9 @@ get_args() # Get the argument name list of a trace event get_argnames() { - local nfields field name + local nfields field name sep nfields=0 + sep="$2" for field in $(get_args "$1"); do nfields=$((nfields + 1)) @@ -58,7 +61,7 @@ get_argnames() name=${field%,} test "$field" = "$name" && continue - printf "%s" "$name, " + printf "%s%s " $name $sep done # Last argument name @@ -73,7 +76,7 @@ get_argc() { local name argc argc=0 - for name in $(get_argnames "$1"); do + for name in $(get_argnames "$1", ","); do argc=$((argc + 1)) done echo $argc @@ -154,7 +157,7 @@ EOF cast_args_to_uint64_t() { local arg - for arg in $(get_argnames "$1"); do + for arg in $(get_argnames "$1", ","); do printf "%s" "(uint64_t)(uintptr_t)$arg" done } @@ -247,7 +250,7 @@ linetoh_ust() local name args argnames name=$(get_name "$1") args=$(get_args "$1") - argnames=$(get_argnames "$1") + argnames=$(get_argnames "$1", ",") cat <<EOF DECLARE_TRACE(ust_$name, TP_PROTO($args), TP_ARGS($argnames)); @@ -274,7 +277,7 @@ linetoc_ust() local name args argnames fmt name=$(get_name "$1") args=$(get_args "$1") - argnames=$(get_argnames "$1") + argnames=$(get_argnames "$1", ",") fmt=$(get_fmt "$1") cat <<EOF @@ -306,6 +309,93 @@ EOF echo "}" } +linetoh_begin_dtrace() +{ + cat <<EOF +#include "trace-dtrace.h" +EOF +} + +linetoh_dtrace() +{ + local name args argnames state nameupper + name=$(get_name "$1") + args=$(get_args "$1") + argnames=$(get_argnames "$1", ",") + state=$(get_state "$1") + if [ "$state" = "0" ] ; then + name=${name##disable } + fi + + nameupper=`echo $name | tr '[:lower:]' '[:upper:]'` + + # Define an empty function for the trace event + cat <<EOF +static inline void trace_$name($args) { + if (QEMU_${nameupper}_ENABLED()) { + QEMU_${nameupper}($argnames); + } +} +EOF +} + +linetoh_end_dtrace() +{ + return +} + +linetoc_begin_dtrace() +{ + return +} + +linetoc_dtrace() +{ + # No need for function definitions in dtrace backend + return +} + +linetoc_end_dtrace() +{ + return +} + +linetod_begin_dtrace() +{ + cat <<EOF +provider qemu { +EOF +} + +linetod_dtrace() +{ + local name args state + name=$(get_name "$1") + args=$(get_args "$1") + state=$(get_state "$1") + if [ "$state" = "0" ] ; then + name=${name##disable } + fi + + # DTrace provider syntax expects foo() for empty + # params, not foo(void) + if [ "$args" = "void" ]; then + args="" + fi + + # Define prototype for probe arguments + cat <<EOF + probe $name($args); +EOF +} + +linetod_end_dtrace() +{ + cat <<EOF +}; +EOF +} + # Process stdin by calling begin, line, and end functions for the backend convert() { @@ -324,9 +414,10 @@ convert() disable=${str%%disable *} echo if test -z "$disable"; then - # Pass the disabled state as an arg to lineto$1_simple(). - # For all other cases, call lineto$1_nop() - if [ $backend = "simple" ]; 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 }" @@ -360,9 +451,19 @@ tracetoc() convert c } +tracetod() +{ + if [ $backend != "dtrace" ]; then + echo "DTrace probe generator not applicable to $backend backend" + exit 1 + fi + echo "/* This file is autogenerated by tracetool, do not edit. */" + convert d +} + # Choose backend case "$1" in -"--nop" | "--simple" | "--ust") backend="${1#--}" ;; +"--nop" | "--simple" | "--ust" | "--dtrace") backend="${1#--}" ;; *) usage ;; esac shift @@ -370,6 +471,7 @@ shift case "$1" in "-h") tracetoh ;; "-c") tracetoc ;; +"-d") tracetod ;; "--check-backend") exit 0 ;; # used by ./configure to test for backend *) usage ;; esac -- 1.7.2.3 ^ permalink raw reply related [flat|nested] 22+ messages in thread
* Re: [Qemu-devel] [PATCH 1/2] Add a DTrace tracing backend targetted for SystemTAP compatability 2010-11-12 13:20 ` [Qemu-devel] [PATCH 1/2] Add a DTrace tracing backend targetted for SystemTAP compatability Daniel P. Berrange @ 2010-11-12 13:30 ` Stefan Hajnoczi 0 siblings, 0 replies; 22+ messages in thread From: Stefan Hajnoczi @ 2010-11-12 13:30 UTC (permalink / raw) To: Daniel P. Berrange; +Cc: qemu-devel On Fri, Nov 12, 2010 at 1:20 PM, Daniel P. Berrange <berrange@redhat.com> wrote: > This introduces a new tracing backend that targets the SystemTAP > implementation of DTrace userspace tracing. The core functionality > should be applicable and standard across any DTrace implementation > on Solaris, OS-X, *BSD, but the Makefile rules will likely need > some small additional changes to cope with OS specific build > requirements. > > This backend builds a little differently from the other tracing > backends. Specifically there is no 'trace.c' file, because the > 'dtrace' command line tool generates a '.o' file directly from > the dtrace probe definition file. The probe definition is usually > named with a '.d' extension but QEMU uses '.d' files for its > external makefile dependancy tracking, so this uses '.dtrace' as > the extension for the probe definition file. > > The 'tracetool' program gains the ability to generate a trace.h > file for DTrace, and also to generate the trace.d file containing > the dtrace probe definition. > > Example usage of a dtrace probe in systemtap looks like: > > probe process("qemu").mark("qemu_malloc") { > printf("Malloc %d %p\n", $arg1, $arg2); > } > > * .gitignore: Ignore trace-dtrace.* > * Makefile: Extra rules for generating DTrace files > * Makefile.obj: Don't build trace.o for DTrace, use > trace-dtrace.o generated by 'dtrace' instead > * tracetool: Support for generating DTrace data files > > Signed-off-by: Daniel P. Berrange <berrange@redhat.com> > --- > .gitignore | 2 + > Makefile | 23 +++++++++++ > Makefile.objs | 4 ++ > configure | 14 ++++++- > tracetool | 122 ++++++++++++++++++++++++++++++++++++++++++++++++++++----- > 5 files changed, 154 insertions(+), 11 deletions(-) Reviewed-by: Stefan Hajnoczi <stefanha@linux.vnet.ibm.com> ^ permalink raw reply [flat|nested] 22+ messages in thread
* [Qemu-devel] [PATCH 0/2] Add support for SystemTAP and DTrace tracing backends @ 2010-11-08 11:33 Daniel P. Berrange 2010-11-08 11:33 ` [Qemu-devel] [PATCH 1/2] Add a DTrace tracing backend targetted for SystemTAP compatability Daniel P. Berrange 0 siblings, 1 reply; 22+ messages in thread From: Daniel P. Berrange @ 2010-11-08 11:33 UTC (permalink / raw) To: qemu-devel This is an update of the SystemTAP/DTrace patches previously sent http://lists.gnu.org/archive/html/qemu-devel/2010-10/msg01451.html The patch is now split into two pieces. The first patch contains the generic DTrace tracing backend support. The second patch contains additional pieces for SystemTAP to generate a tapset for each of the qemu-system-XXX binaries, to simplify life for admins wanting to use the tracing backend. This addresses the problem in previous versions of the patch where the tapset only worked for /usr/bin/qemu and no other binaries. Unfortunately SystemTAP does not allow for use of wildcards, so it was neccessary to go for a separate tapset file per emulator binary. Regards, Daniel ^ permalink raw reply [flat|nested] 22+ messages in thread
* [Qemu-devel] [PATCH 1/2] Add a DTrace tracing backend targetted for SystemTAP compatability 2010-11-08 11:33 [Qemu-devel] [PATCH 0/2] Add support for SystemTAP and DTrace tracing backends Daniel P. Berrange @ 2010-11-08 11:33 ` Daniel P. Berrange 2010-11-08 16:52 ` Stefan Hajnoczi 0 siblings, 1 reply; 22+ messages in thread From: Daniel P. Berrange @ 2010-11-08 11:33 UTC (permalink / raw) To: qemu-devel From: Daniel P. Berrange <berrange@redhat.com> This introduces a new tracing backend that targets the SystemTAP implementation of DTrace userspace tracing. The core functionality should be applicable and standard across any DTrace implementation on Solaris, OS-X, *BSD, but the Makefile rules will likely need some small additional changes to cope with OS specific build requirements. This backend builds a little differently from the other tracing backends. Specifically there is no 'trace.c' file, because the 'dtrace' command line tool generates a '.o' file directly from the dtrace probe definition file. The probe definition is usually named with a '.d' extension but QEMU uses '.d' files for its external makefile dependancy tracking, so this uses '.dtrace' as the extension for the probe definition file. The 'tracetool' program gains the ability to generate a trace.h file for DTrace, and also to generate the trace.d file containing the dtrace probe definition. Example usage of a dtrace probe in systemtap looks like: probe process("qemu").mark("qemu_malloc") { printf("Malloc %d %p\n", $arg1, $arg2); } * .gitignore: Ignore trace-dtrace.* * Makefile: Extra rules for generating DTrace files * Makefile.obj: Don't build trace.o for DTrace, use trace-dtrace.o generated by 'dtrace' instead * tracetool: Support for generating DTrace data files Signed-off-by: Daniel P. Berrange <berrange@redhat.com> --- .gitignore | 2 + Makefile | 24 ++++++++++++ Makefile.objs | 4 ++ configure | 14 ++++++- tracetool | 116 ++++++++++++++++++++++++++++++++++++++++++++++++++++----- 5 files changed, 149 insertions(+), 11 deletions(-) diff --git a/.gitignore b/.gitignore index a43e4d1..3efb4ec 100644 --- a/.gitignore +++ b/.gitignore @@ -4,6 +4,8 @@ config-host.* config-target.* trace.h trace.c +trace-dtrace.h +trace-dtrace.dtrace *-timestamp *-softmmu *-darwin-user diff --git a/Makefile b/Makefile index 02698e9..384bf72 100644 --- a/Makefile +++ b/Makefile @@ -1,6 +1,10 @@ # Makefile for QEMU. GENERATED_HEADERS = config-host.h trace.h qemu-options.def +GENERATED_HEADERS = config-host.h trace.h +ifeq ($(TRACE_BACKEND),dtrace) +GENERATED_HEADERS += trace-dtrace.h +endif ifneq ($(wildcard config-host.mak),) # Put the all: rule here so that config-host.mak can contain dependencies. @@ -108,7 +112,11 @@ ui/vnc.o: QEMU_CFLAGS += $(VNC_TLS_CFLAGS) bt-host.o: QEMU_CFLAGS += $(BLUEZ_CFLAGS) +ifeq ($(TRACE_BACKEND),dtrace) +trace.h: trace.h-timestamp trace-dtrace.h +else trace.h: trace.h-timestamp +endif trace.h-timestamp: $(SRC_PATH)/trace-events config-host.mak $(call quiet-command,sh $(SRC_PATH)/tracetool --$(TRACE_BACKEND) -h < $< > $@," GEN trace.h") @cmp -s $@ trace.h || cp $@ trace.h @@ -120,6 +128,20 @@ trace.c-timestamp: $(SRC_PATH)/trace-events config-host.mak trace.o: trace.c $(GENERATED_HEADERS) +trace-dtrace.h: trace-dtrace.dtrace + $(call quiet-command,dtrace -o $@ -h -s $<, " GEN trace-dtrace.h") + +# Normal practice is to name DTrace probe file with a '.d' extension +# but that gets picked up by QEMU's Makefile as an external dependancy +# rule file. So we use '.dtrace' instead +trace-dtrace.dtrace: trace-dtrace.dtrace-timestamp +trace-dtrace.dtrace-timestamp: $(SRC_PATH)/trace-events config-host.mak + $(call quiet-command,sh $(SRC_PATH)/tracetool --$(TRACE_BACKEND) -d < $< > $@," GEN trace-dtrace.dtrace") + @cmp -s $@ trace-dtrace.dtrace || cp $@ trace-dtrace.dtrace + +trace-dtrace.o: trace-dtrace.dtrace $(GENERATED_HEADERS) + $(call quiet-command,dtrace -o $@ -G -s $<, " GEN trace-dtrace.o") + simpletrace.o: simpletrace.c $(GENERATED_HEADERS) version.o: $(SRC_PATH)/version.rc config-host.mak @@ -157,6 +179,8 @@ clean: rm -f slirp/*.o slirp/*.d audio/*.o audio/*.d block/*.o block/*.d net/*.o net/*.d fsdev/*.o fsdev/*.d ui/*.o ui/*.d rm -f qemu-img-cmds.h rm -f trace.c trace.h trace.c-timestamp trace.h-timestamp + rm -f trace-dtrace.dtrace trace-dtrace.dtrace-timestamp + rm -f trace-dtrace.h trace-dtrace.h-timestamp $(MAKE) -C tests clean for d in $(ALL_SUBDIRS) libhw32 libhw64 libuser libdis libdis-user; do \ if test -d $$d; then $(MAKE) -C $$d $@ || exit 1; fi; \ diff --git a/Makefile.objs b/Makefile.objs index faf485e..84fc80e 100644 --- a/Makefile.objs +++ b/Makefile.objs @@ -285,11 +285,15 @@ libdis-$(CONFIG_SPARC_DIS) += sparc-dis.o ###################################################################### # trace +ifeq ($(TRACE_BACKEND),dtrace) +trace-obj-y = trace-dtrace.o +else trace-obj-y = trace.o ifeq ($(TRACE_BACKEND),simple) trace-obj-y += simpletrace.o user-obj-y += qemu-timer-common.o endif +endif vl.o: QEMU_CFLAGS+=$(GPROF_CFLAGS) diff --git a/configure b/configure index 7025d2b..f8dad3e 100755 --- a/configure +++ b/configure @@ -929,7 +929,7 @@ echo " --enable-docs enable documentation build" echo " --disable-docs disable documentation build" echo " --disable-vhost-net disable vhost-net acceleration support" echo " --enable-vhost-net enable vhost-net acceleration support" -echo " --trace-backend=B Trace backend nop simple ust" +echo " --trace-backend=B Trace backend nop simple ust dtrace" echo " --trace-file=NAME Full PATH,NAME of file to store traces" echo " Default:trace-<pid>" echo " --disable-spice disable spice" @@ -2193,6 +2193,18 @@ EOF exit 1 fi fi + +########################################## +# For 'dtrace' backend, test if 'dtrace' command is present +if test "$trace_backend" = "dtrace"; then + if ! has 'dtrace' ; then + echo + echo "Error: dtrace command is not found in PATH $PATH" + echo + exit 1 + fi +fi + ########################################## # End of CC checks # After here, no more $cc or $ld runs diff --git a/tracetool b/tracetool index 7010858..5b6636a 100755 --- a/tracetool +++ b/tracetool @@ -20,10 +20,12 @@ Backends: --nop Tracing disabled --simple Simple built-in backend --ust LTTng User Space Tracing backend + --dtrace DTrace/SystemTAP backend Output formats: -h Generate .h file -c Generate .c file + -d Generate .d file (DTrace only) EOF exit 1 } @@ -46,8 +48,9 @@ get_args() # Get the argument name list of a trace event get_argnames() { - local nfields field name + local nfields field name sep nfields=0 + sep="$2" for field in $(get_args "$1"); do nfields=$((nfields + 1)) @@ -58,7 +61,7 @@ get_argnames() name=${field%,} test "$field" = "$name" && continue - printf "%s" "$name, " + printf "%s%s " $name $sep done # Last argument name @@ -73,7 +76,7 @@ get_argc() { local name argc argc=0 - for name in $(get_argnames "$1"); do + for name in $(get_argnames "$1", ","); do argc=$((argc + 1)) done echo $argc @@ -154,7 +157,7 @@ EOF cast_args_to_uint64_t() { local arg - for arg in $(get_argnames "$1"); do + for arg in $(get_argnames "$1", ","); do printf "%s" "(uint64_t)(uintptr_t)$arg" done } @@ -247,7 +250,7 @@ linetoh_ust() local name args argnames name=$(get_name "$1") args=$(get_args "$1") - argnames=$(get_argnames "$1") + argnames=$(get_argnames "$1", ",") cat <<EOF DECLARE_TRACE(ust_$name, TP_PROTO($args), TP_ARGS($argnames)); @@ -274,7 +277,7 @@ linetoc_ust() local name args argnames fmt name=$(get_name "$1") args=$(get_args "$1") - argnames=$(get_argnames "$1") + argnames=$(get_argnames "$1", ",") fmt=$(get_fmt "$1") cat <<EOF @@ -306,6 +309,87 @@ EOF echo "}" } +linetoh_begin_dtrace() +{ + cat <<EOF +#include "trace-dtrace.h" +EOF +} + +linetoh_dtrace() +{ + local name args argnames state nameupper + name=$(get_name "$1") + args=$(get_args "$1") + argnames=$(get_argnames "$1", ",") + state=$(get_state "$1") + if [ "$state" = "0" ] ; then + name=${name##disable } + fi + + nameupper=`echo $name | tr '[:lower:]' '[:upper:]'` + + # Define an empty function for the trace event + cat <<EOF +static inline void trace_$name($args) { + if (QEMU_${nameupper}_ENABLED()) { + QEMU_${nameupper}($argnames); + } +} +EOF +} + +linetoh_end_dtrace() +{ + return +} + +linetoc_begin_dtrace() +{ + return +} + +linetoc_dtrace() +{ + # No need for function definitions in dtrace backend + return +} + +linetoc_end_dtrace() +{ + return +} + +linetod_begin_dtrace() +{ + cat <<EOF +provider qemu { +EOF +} + +linetod_dtrace() +{ + local name args state + name=$(get_name "$1") + args=$(get_args "$1") + state=$(get_state "$1") + if [ "$state" = "0" ] ; then + name=${name##disable } + fi + + # Define prototype for probe arguments + cat <<EOF + probe $name($args); +EOF +} + +linetod_end_dtrace() +{ + cat <<EOF +}; +EOF +} + # Process stdin by calling begin, line, and end functions for the backend convert() { @@ -324,9 +408,10 @@ convert() disable=${str%%disable *} echo if test -z "$disable"; then - # Pass the disabled state as an arg to lineto$1_simple(). - # For all other cases, call lineto$1_nop() - if [ $backend = "simple" ]; 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 }" @@ -360,9 +445,19 @@ tracetoc() convert c } +tracetod() +{ + if [ $backend != "dtrace" ]; then + echo "DTrace probe generator not applicable to $backend backend" + exit 1 + fi + echo "/* This file is autogenerated by tracetool, do not edit. */" + convert d +} + # Choose backend case "$1" in -"--nop" | "--simple" | "--ust") backend="${1#--}" ;; +"--nop" | "--simple" | "--ust" | "--dtrace") backend="${1#--}" ;; *) usage ;; esac shift @@ -370,6 +465,7 @@ shift case "$1" in "-h") tracetoh ;; "-c") tracetoc ;; +"-d") tracetod ;; "--check-backend") exit 0 ;; # used by ./configure to test for backend *) usage ;; esac -- 1.7.2.3 ^ permalink raw reply related [flat|nested] 22+ messages in thread
* Re: [Qemu-devel] [PATCH 1/2] Add a DTrace tracing backend targetted for SystemTAP compatability 2010-11-08 11:33 ` [Qemu-devel] [PATCH 1/2] Add a DTrace tracing backend targetted for SystemTAP compatability Daniel P. Berrange @ 2010-11-08 16:52 ` Stefan Hajnoczi 2010-11-08 16:57 ` Daniel P. Berrange 0 siblings, 1 reply; 22+ messages in thread From: Stefan Hajnoczi @ 2010-11-08 16:52 UTC (permalink / raw) To: Daniel P. Berrange; +Cc: qemu-devel On Mon, Nov 8, 2010 at 11:33 AM, Daniel P. Berrange <dan@berrange.com> wrote: > diff --git a/Makefile b/Makefile > index 02698e9..384bf72 100644 > --- a/Makefile > +++ b/Makefile > @@ -1,6 +1,10 @@ > # Makefile for QEMU. > > GENERATED_HEADERS = config-host.h trace.h qemu-options.def > +GENERATED_HEADERS = config-host.h trace.h > +ifeq ($(TRACE_BACKEND),dtrace) > +GENERATED_HEADERS += trace-dtrace.h > +endif What happened to qemu-options.def? GENERATED_HEADERS is defined twice, the first line should probably be deleted. Looks good otherwise. Stefan ^ permalink raw reply [flat|nested] 22+ messages in thread
* Re: [Qemu-devel] [PATCH 1/2] Add a DTrace tracing backend targetted for SystemTAP compatability 2010-11-08 16:52 ` Stefan Hajnoczi @ 2010-11-08 16:57 ` Daniel P. Berrange 2010-11-08 19:29 ` Stefan Hajnoczi 0 siblings, 1 reply; 22+ messages in thread From: Daniel P. Berrange @ 2010-11-08 16:57 UTC (permalink / raw) To: Stefan Hajnoczi; +Cc: Daniel P. Berrange, qemu-devel On Mon, Nov 08, 2010 at 04:52:01PM +0000, Stefan Hajnoczi wrote: > On Mon, Nov 8, 2010 at 11:33 AM, Daniel P. Berrange <dan@berrange.com> wrote: > > diff --git a/Makefile b/Makefile > > index 02698e9..384bf72 100644 > > --- a/Makefile > > +++ b/Makefile > > @@ -1,6 +1,10 @@ > > # Makefile for QEMU. > > > > GENERATED_HEADERS = config-host.h trace.h qemu-options.def > > +GENERATED_HEADERS = config-host.h trace.h > > +ifeq ($(TRACE_BACKEND),dtrace) > > +GENERATED_HEADERS += trace-dtrace.h > > +endif > > What happened to qemu-options.def? GENERATED_HEADERS is defined > twice, the first line should probably be deleted. Oh, the loss of qemu-options.def is a rebase/merge error. GENERATED_HEADERS isn't defined twice, because the second line is using += to append to the first definition. Regards, Daniel -- |: Red Hat, Engineering, London -o- http://people.redhat.com/berrange/ :| |: http://libvirt.org -o- http://virt-manager.org -o- http://deltacloud.org :| |: http://autobuild.org -o- http://search.cpan.org/~danberr/ :| |: GnuPG: 7D3B9505 -o- F3C9 553F A1DA 4AC2 5648 23C1 B3DF F742 7D3B 9505 :| ^ permalink raw reply [flat|nested] 22+ messages in thread
* Re: [Qemu-devel] [PATCH 1/2] Add a DTrace tracing backend targetted for SystemTAP compatability 2010-11-08 16:57 ` Daniel P. Berrange @ 2010-11-08 19:29 ` Stefan Hajnoczi 0 siblings, 0 replies; 22+ messages in thread From: Stefan Hajnoczi @ 2010-11-08 19:29 UTC (permalink / raw) To: Daniel P. Berrange; +Cc: Daniel P. Berrange, qemu-devel On Mon, Nov 8, 2010 at 4:57 PM, Daniel P. Berrange <berrange@redhat.com> wrote: > On Mon, Nov 08, 2010 at 04:52:01PM +0000, Stefan Hajnoczi wrote: >> On Mon, Nov 8, 2010 at 11:33 AM, Daniel P. Berrange <dan@berrange.com> wrote: >> > diff --git a/Makefile b/Makefile >> > index 02698e9..384bf72 100644 >> > --- a/Makefile >> > +++ b/Makefile >> > @@ -1,6 +1,10 @@ >> > # Makefile for QEMU. >> > >> > GENERATED_HEADERS = config-host.h trace.h qemu-options.def >> > +GENERATED_HEADERS = config-host.h trace.h >> > +ifeq ($(TRACE_BACKEND),dtrace) >> > +GENERATED_HEADERS += trace-dtrace.h >> > +endif >> >> What happened to qemu-options.def? GENERATED_HEADERS is defined >> twice, the first line should probably be deleted. > > Oh, the loss of qemu-options.def is a rebase/merge error. GENERATED_HEADERS > isn't defined twice, because the second line is using += to append to the > first definition. Ah, it's the merge error I was referring to: @@ -1,6 +1,10 @@ # Makefile for QEMU. GENERATED_HEADERS = config-host.h trace.h qemu-options.def +GENERATED_HEADERS = config-host.h trace.h Stefan ^ permalink raw reply [flat|nested] 22+ messages in thread
end of thread, other threads:[~2010-11-18 15:58 UTC | newest] Thread overview: 22+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2010-11-08 19:33 [Qemu-devel] [PATCH 0/2] Add support for SystemTAP and DTrace tracing backends (v5) Daniel P. Berrange 2010-11-08 19:33 ` [Qemu-devel] [PATCH 1/2] Add a DTrace tracing backend targetted for SystemTAP compatability Daniel P. Berrange 2010-11-16 15:46 ` Anthony Liguori 2010-11-16 17:43 ` Peter Maydell 2010-11-16 18:10 ` Anthony Liguori 2010-11-16 18:54 ` Peter Maydell 2010-11-16 18:58 ` Anthony Liguori 2010-11-16 20:07 ` [Qemu-devel] [PATCH] Fix compilation failure with simple trace when srcdir==objdir Peter Maydell 2010-11-16 21:12 ` Stefan Hajnoczi 2010-11-16 22:25 ` Anthony Liguori 2010-11-16 20:22 ` [Qemu-devel] [PATCH 1/2] Add a DTrace tracing backend targetted for SystemTAP compatability Peter Maydell 2010-11-17 11:36 ` Daniel P. Berrange 2010-11-17 11:35 ` Daniel P. Berrange 2010-11-18 0:00 ` Anthony Liguori 2010-11-18 15:58 ` Stefan Hajnoczi 2010-11-08 19:33 ` [Qemu-devel] [PATCH 2/2] Add support for generating a systemtap tapset static probes Daniel P. Berrange -- strict thread matches above, loose matches on Subject: below -- 2010-11-12 13:20 [Qemu-devel] Add support for SystemTAP and DTrace tracing backends (v6) Daniel P. Berrange 2010-11-12 13:20 ` [Qemu-devel] [PATCH 1/2] Add a DTrace tracing backend targetted for SystemTAP compatability Daniel P. Berrange 2010-11-12 13:30 ` Stefan Hajnoczi 2010-11-08 11:33 [Qemu-devel] [PATCH 0/2] Add support for SystemTAP and DTrace tracing backends Daniel P. Berrange 2010-11-08 11:33 ` [Qemu-devel] [PATCH 1/2] Add a DTrace tracing backend targetted for SystemTAP compatability Daniel P. Berrange 2010-11-08 16:52 ` Stefan Hajnoczi 2010-11-08 16:57 ` Daniel P. Berrange 2010-11-08 19:29 ` Stefan Hajnoczi
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).