Re: [Qemu-devel] [RFC] Add a stp file for usage from build directory

2013-05-28 Thread Alon Levy
On Mon, 2013-05-27 at 08:32 +0200, Paolo Bonzini wrote:
 Il 27/05/2013 04:19, Alon Levy ha scritto:
  For systemtap the location of the process being tapped is crucial, so
  the existing stp file requires installation to use. A new file providing
  qemu.local prefixed probes lets scripts run without an install step.
  
  Signed-off-by: Alon Levy al...@redhat.com
  ---
  
   Makefile.target | 13 -
   1 file changed, 12 insertions(+), 1 deletion(-)
  
  diff --git a/Makefile.target b/Makefile.target
  index ce4391f..5d176e2 100644
  --- a/Makefile.target
  +++ b/Makefile.target
  @@ -35,7 +35,7 @@ config-target.h: config-target.h-timestamp
   config-target.h-timestamp: config-target.mak
   
   ifdef CONFIG_TRACE_SYSTEMTAP
  -stap: $(QEMU_PROG).stp
  +stap: $(QEMU_PROG).stp $(QEMU_PROG).local.stp
   
   ifdef CONFIG_USER_ONLY
   TARGET_TYPE=user
  @@ -51,6 +51,17 @@ $(QEMU_PROG).stp: $(SRC_PATH)/trace-events
  --target-arch=$(TARGET_ARCH) \
  --target-type=$(TARGET_TYPE) \
   $  $@,  GEN   $(TARGET_DIR)$(QEMU_PROG).stp)
  +
  +$(QEMU_PROG).local.stp: $(SRC_PATH)/trace-events
  +   $(call quiet-command,$(TRACETOOL) \
  +   --format=stap \
  +   --backend=$(TRACE_BACKEND) \
  +   --binary=$(SRC_PATH)/$(TARGET_DIR)$(QEMU_PROG) \
 
 This is not the build directory for out-of-tree builds.

I'll fix that.

 
  +   --probe-prefix=qemu.local \
 
 Why change the prefix?

It was one way to verify I was using the correct file. I'll change it
back.

But in general does it make sense for you to have this in addition to
the existing stp file?

 
 Paolo
 
  +   --target-arch=$(TARGET_ARCH) \
  +   --target-type=$(TARGET_TYPE) \
  +$  $@,  GEN   $(TARGET_DIR)$(QEMU_PROG).local.stp)
  +
   else
   stap:
   endif
  
 
 





Re: [Qemu-devel] [RFC] Add a stp file for usage from build directory

2013-05-28 Thread Paolo Bonzini
Il 28/05/2013 14:09, Alon Levy ha scritto:
 +   --probe-prefix=qemu.local \

 Why change the prefix?
 
 It was one way to verify I was using the correct file. I'll change it
 back.
 
 But in general does it make sense for you to have this in addition to
 the existing stp file?

I think it does (with the same prefix so that you can share the
scripts).  But I'm not sure how you'd use it. :)  Can you show an
example and also put it in the commit message?

Paolo




Re: [Qemu-devel] [RFC] Add a stp file for usage from build directory

2013-05-28 Thread Alon Levy
On Tue, 2013-05-28 at 14:18 +0200, Paolo Bonzini wrote:
 Il 28/05/2013 14:09, Alon Levy ha scritto:
  + --probe-prefix=qemu.local \
 
  Why change the prefix?
  
  It was one way to verify I was using the correct file. I'll change it
  back.
  
  But in general does it make sense for you to have this in addition to
  the existing stp file?
 
 I think it does (with the same prefix so that you can share the
 scripts).  But I'm not sure how you'd use it. :)  Can you show an
 example and also put it in the commit message?

I though it would be useful to have a bunch of scripts for developers. I
have the following (didn't fix yet to use the same prefix):

diff --git a/scripts/stap-qxl-generic b/scripts/stap-qxl-generic
new file mode 100755
index 000..1c21911
--- /dev/null
+++ b/scripts/stap-qxl-generic
@@ -0,0 +1,4 @@
+#!/bin/bash -x
+STP=$0.stp
+ROOT=`dirname $0`/../
+sudo stap -v -I $ROOT/x86_64-softmmu $STP
diff --git a/scripts/stap-qxl-generic.stp b/scripts/stap-qxl-generic.stp
new file mode 100644
index 000..e201e69
--- /dev/null
+++ b/scripts/stap-qxl-generic.stp
@@ -0,0 +1,24 @@
+probe begin { printf(starting qxl generic probe\n) }
+
+global call, threads
+
+probe qemu.local.qxl* {
+//printf(%d: %s: %s\n, tid(), pp(), $$vars)
+//print_ubacktrace()
+call[tid(), probefunc()]  1
+threads[tid()]  1
+}
+
+probe timer.s(%( $#  0 %? $1 %: 5 %)) {
+   ansi_clear_screen()
+printf(%10s %45s %s\n, TID, , HITS);
+foreach([t] in threads-) {
+printf(%10d %45s %d\n, t, , @count(threads[t]));
+}
+   printf(%10s %45s %s\n,
+   TID, CALL, HITS)
+   foreach([tid, name] in call-) {
+   printf(%10d %45s %d\n, tid, name,
+   @count(call[tid, name]))
+   }
+}


 
 Paolo
 
 





Re: [Qemu-devel] [RFC] Add a stp file for usage from build directory

2013-05-28 Thread Paolo Bonzini
Il 28/05/2013 14:33, Alon Levy ha scritto:
 On Tue, 2013-05-28 at 14:18 +0200, Paolo Bonzini wrote:
 Il 28/05/2013 14:09, Alon Levy ha scritto:
 + --probe-prefix=qemu.local \

 Why change the prefix?

 It was one way to verify I was using the correct file. I'll change it
 back.

 But in general does it make sense for you to have this in addition to
 the existing stp file?

 I think it does (with the same prefix so that you can share the
 scripts).  But I'm not sure how you'd use it. :)  Can you show an
 example and also put it in the commit message?
 
 I though it would be useful to have a bunch of scripts for developers. I
 have the following (didn't fix yet to use the same prefix):

Ok, so it's just a matter of using the -I option to stap.  That's the
bit that has to be in the commit message.

Thanks!

Paolo

 diff --git a/scripts/stap-qxl-generic b/scripts/stap-qxl-generic
 new file mode 100755
 index 000..1c21911
 --- /dev/null
 +++ b/scripts/stap-qxl-generic
 @@ -0,0 +1,4 @@
 +#!/bin/bash -x
 +STP=$0.stp
 +ROOT=`dirname $0`/../
 +sudo stap -v -I $ROOT/x86_64-softmmu $STP
 diff --git a/scripts/stap-qxl-generic.stp b/scripts/stap-qxl-generic.stp
 new file mode 100644
 index 000..e201e69
 --- /dev/null
 +++ b/scripts/stap-qxl-generic.stp
 @@ -0,0 +1,24 @@
 +probe begin { printf(starting qxl generic probe\n) }
 +
 +global call, threads
 +
 +probe qemu.local.qxl* {
 +//printf(%d: %s: %s\n, tid(), pp(), $$vars)
 +//print_ubacktrace()
 +call[tid(), probefunc()]  1
 +threads[tid()]  1
 +}
 +
 +probe timer.s(%( $#  0 %? $1 %: 5 %)) {
 +   ansi_clear_screen()
 +printf(%10s %45s %s\n, TID, , HITS);
 +foreach([t] in threads-) {
 +printf(%10d %45s %d\n, t, , @count(threads[t]));
 +}
 +   printf(%10s %45s %s\n,
 +   TID, CALL, HITS)
 +   foreach([tid, name] in call-) {
 +   printf(%10d %45s %d\n, tid, name,
 +   @count(call[tid, name]))
 +   }
 +}
 
 

 Paolo


 
 




Re: [Qemu-devel] [RFC] Add a stp file for usage from build directory

2013-05-28 Thread Alon Levy
 Il 28/05/2013 14:33, Alon Levy ha scritto:
  On Tue, 2013-05-28 at 14:18 +0200, Paolo Bonzini wrote:
  Il 28/05/2013 14:09, Alon Levy ha scritto:
  +   --probe-prefix=qemu.local \
 
  Why change the prefix?
 
  It was one way to verify I was using the correct file. I'll change it
  back.
 
  But in general does it make sense for you to have this in addition to
  the existing stp file?
 
  I think it does (with the same prefix so that you can share the
  scripts).  But I'm not sure how you'd use it. :)  Can you show an
  example and also put it in the commit message?
  
  I though it would be useful to have a bunch of scripts for developers. I
  have the following (didn't fix yet to use the same prefix):
 
 Ok, so it's just a matter of using the -I option to stap.  That's the
 bit that has to be in the commit message.

Yes. Note that you add a directory, not a file. The only sure way to notice 
which hooks were used I found is looking at the generated c file.

 
 Thanks!
 
 Paolo
 
  diff --git a/scripts/stap-qxl-generic b/scripts/stap-qxl-generic
  new file mode 100755
  index 000..1c21911
  --- /dev/null
  +++ b/scripts/stap-qxl-generic
  @@ -0,0 +1,4 @@
  +#!/bin/bash -x
  +STP=$0.stp
  +ROOT=`dirname $0`/../
  +sudo stap -v -I $ROOT/x86_64-softmmu $STP
  diff --git a/scripts/stap-qxl-generic.stp b/scripts/stap-qxl-generic.stp
  new file mode 100644
  index 000..e201e69
  --- /dev/null
  +++ b/scripts/stap-qxl-generic.stp
  @@ -0,0 +1,24 @@
  +probe begin { printf(starting qxl generic probe\n) }
  +
  +global call, threads
  +
  +probe qemu.local.qxl* {
  +//printf(%d: %s: %s\n, tid(), pp(), $$vars)
  +//print_ubacktrace()
  +call[tid(), probefunc()]  1
  +threads[tid()]  1
  +}
  +
  +probe timer.s(%( $#  0 %? $1 %: 5 %)) {
  +   ansi_clear_screen()
  +printf(%10s %45s %s\n, TID, , HITS);
  +foreach([t] in threads-) {
  +printf(%10d %45s %d\n, t, , @count(threads[t]));
  +}
  +   printf(%10s %45s %s\n,
  +   TID, CALL, HITS)
  +   foreach([tid, name] in call-) {
  +   printf(%10d %45s %d\n, tid, name,
  +   @count(call[tid, name]))
  +   }
  +}
  
  
 
  Paolo
 
 
  
  
 
 
 



Re: [Qemu-devel] [RFC] Add a stp file for usage from build directory

2013-05-28 Thread Alon Levy
On Tue, 2013-05-28 at 09:25 -0400, Alon Levy wrote:
  Il 28/05/2013 14:33, Alon Levy ha scritto:
   On Tue, 2013-05-28 at 14:18 +0200, Paolo Bonzini wrote:
   Il 28/05/2013 14:09, Alon Levy ha scritto:
   + --probe-prefix=qemu.local \
  
   Why change the prefix?

Actually the problem is having two stp files (qemu-system-x86_64.stp 
qemu-system-x86_64.local.stp) in the same directory providing the same
probes is not workable with stap. In pass 2 it doesn't have any specific
order of going through the directory. Solutions
1. have a different prefix
2. introduce another subdirectory
x86_64-softmmu/local.stp/qemu-system-x86_64.stp

  
   It was one way to verify I was using the correct file. I'll change it
   back.
  
   But in general does it make sense for you to have this in addition to
   the existing stp file?
  
   I think it does (with the same prefix so that you can share the
   scripts).  But I'm not sure how you'd use it. :)  Can you show an
   example and also put it in the commit message?
   
   I though it would be useful to have a bunch of scripts for developers. I
   have the following (didn't fix yet to use the same prefix):
  
  Ok, so it's just a matter of using the -I option to stap.  That's the
  bit that has to be in the commit message.
 
 Yes. Note that you add a directory, not a file. The only sure way to notice 
 which hooks were used I found is looking at the generated c file.
 
  
  Thanks!
  
  Paolo
  
   diff --git a/scripts/stap-qxl-generic b/scripts/stap-qxl-generic
   new file mode 100755
   index 000..1c21911
   --- /dev/null
   +++ b/scripts/stap-qxl-generic
   @@ -0,0 +1,4 @@
   +#!/bin/bash -x
   +STP=$0.stp
   +ROOT=`dirname $0`/../
   +sudo stap -v -I $ROOT/x86_64-softmmu $STP
   diff --git a/scripts/stap-qxl-generic.stp b/scripts/stap-qxl-generic.stp
   new file mode 100644
   index 000..e201e69
   --- /dev/null
   +++ b/scripts/stap-qxl-generic.stp
   @@ -0,0 +1,24 @@
   +probe begin { printf(starting qxl generic probe\n) }
   +
   +global call, threads
   +
   +probe qemu.local.qxl* {
   +//printf(%d: %s: %s\n, tid(), pp(), $$vars)
   +//print_ubacktrace()
   +call[tid(), probefunc()]  1
   +threads[tid()]  1
   +}
   +
   +probe timer.s(%( $#  0 %? $1 %: 5 %)) {
   +   ansi_clear_screen()
   +printf(%10s %45s %s\n, TID, , HITS);
   +foreach([t] in threads-) {
   +printf(%10d %45s %d\n, t, , @count(threads[t]));
   +}
   +   printf(%10s %45s %s\n,
   +   TID, CALL, HITS)
   +   foreach([tid, name] in call-) {
   +   printf(%10d %45s %d\n, tid, name,
   +   @count(call[tid, name]))
   +   }
   +}
   
   
  
   Paolo
  
  
   
   
  
  
  
 





Re: [Qemu-devel] [RFC] Add a stp file for usage from build directory

2013-05-28 Thread Paolo Bonzini
Il 28/05/2013 15:57, Alon Levy ha scritto:
 On Tue, 2013-05-28 at 09:25 -0400, Alon Levy wrote:
 Il 28/05/2013 14:33, Alon Levy ha scritto:
 On Tue, 2013-05-28 at 14:18 +0200, Paolo Bonzini wrote:
 Il 28/05/2013 14:09, Alon Levy ha scritto:
 +  --probe-prefix=qemu.local \

 Why change the prefix?
 
 Actually the problem is having two stp files (qemu-system-x86_64.stp 
 qemu-system-x86_64.local.stp) in the same directory providing the same
 probes is not workable with stap. In pass 2 it doesn't have any specific
 order of going through the directory. Solutions
 1. have a different prefix
 2. introduce another subdirectory
 x86_64-softmmu/local.stp/qemu-system-x86_64.stp

Ah... that's a bit ugly.  What about changing the name of the
installed .stp file, for example
x86_64-softmmu/qemu-system-x86_64.stp-installed and renaming it at make
install time?  The local file instead is built as
x86_64-softmmu/qemu-system-x86_64.stp and is the only one that -I finds.

Paolo

 

 It was one way to verify I was using the correct file. I'll change it
 back.

 But in general does it make sense for you to have this in addition to
 the existing stp file?

 I think it does (with the same prefix so that you can share the
 scripts).  But I'm not sure how you'd use it. :)  Can you show an
 example and also put it in the commit message?

 I though it would be useful to have a bunch of scripts for developers. I
 have the following (didn't fix yet to use the same prefix):

 Ok, so it's just a matter of using the -I option to stap.  That's the
 bit that has to be in the commit message.

 Yes. Note that you add a directory, not a file. The only sure way to notice 
 which hooks were used I found is looking at the generated c file.


 Thanks!

 Paolo

 diff --git a/scripts/stap-qxl-generic b/scripts/stap-qxl-generic
 new file mode 100755
 index 000..1c21911
 --- /dev/null
 +++ b/scripts/stap-qxl-generic
 @@ -0,0 +1,4 @@
 +#!/bin/bash -x
 +STP=$0.stp
 +ROOT=`dirname $0`/../
 +sudo stap -v -I $ROOT/x86_64-softmmu $STP
 diff --git a/scripts/stap-qxl-generic.stp b/scripts/stap-qxl-generic.stp
 new file mode 100644
 index 000..e201e69
 --- /dev/null
 +++ b/scripts/stap-qxl-generic.stp
 @@ -0,0 +1,24 @@
 +probe begin { printf(starting qxl generic probe\n) }
 +
 +global call, threads
 +
 +probe qemu.local.qxl* {
 +//printf(%d: %s: %s\n, tid(), pp(), $$vars)
 +//print_ubacktrace()
 +call[tid(), probefunc()]  1
 +threads[tid()]  1
 +}
 +
 +probe timer.s(%( $#  0 %? $1 %: 5 %)) {
 +   ansi_clear_screen()
 +printf(%10s %45s %s\n, TID, , HITS);
 +foreach([t] in threads-) {
 +printf(%10d %45s %d\n, t, , @count(threads[t]));
 +}
 +   printf(%10s %45s %s\n,
 +   TID, CALL, HITS)
 +   foreach([tid, name] in call-) {
 +   printf(%10d %45s %d\n, tid, name,
 +   @count(call[tid, name]))
 +   }
 +}



 Paolo








 
 




Re: [Qemu-devel] [RFC] Add a stp file for usage from build directory

2013-05-28 Thread Stefan Hajnoczi
On Tue, May 28, 2013 at 08:09:55AM -0400, Alon Levy wrote:
 On Mon, 2013-05-27 at 08:32 +0200, Paolo Bonzini wrote:
  Il 27/05/2013 04:19, Alon Levy ha scritto:
   For systemtap the location of the process being tapped is crucial, so
   the existing stp file requires installation to use. A new file providing
   qemu.local prefixed probes lets scripts run without an install step.
   
   Signed-off-by: Alon Levy al...@redhat.com
   ---
   
Makefile.target | 13 -
1 file changed, 12 insertions(+), 1 deletion(-)
   
   diff --git a/Makefile.target b/Makefile.target
   index ce4391f..5d176e2 100644
   --- a/Makefile.target
   +++ b/Makefile.target
   @@ -35,7 +35,7 @@ config-target.h: config-target.h-timestamp
config-target.h-timestamp: config-target.mak

ifdef CONFIG_TRACE_SYSTEMTAP
   -stap: $(QEMU_PROG).stp
   +stap: $(QEMU_PROG).stp $(QEMU_PROG).local.stp

ifdef CONFIG_USER_ONLY
TARGET_TYPE=user
   @@ -51,6 +51,17 @@ $(QEMU_PROG).stp: $(SRC_PATH)/trace-events
 --target-arch=$(TARGET_ARCH) \
 --target-type=$(TARGET_TYPE) \
  $  $@,  GEN   $(TARGET_DIR)$(QEMU_PROG).stp)
   +
   +$(QEMU_PROG).local.stp: $(SRC_PATH)/trace-events
   + $(call quiet-command,$(TRACETOOL) \
   + --format=stap \
   + --backend=$(TRACE_BACKEND) \
   + --binary=$(SRC_PATH)/$(TARGET_DIR)$(QEMU_PROG) \
  
  This is not the build directory for out-of-tree builds.
 
 I'll fix that.
 
  
   + --probe-prefix=qemu.local \
  
  Why change the prefix?
 
 It was one way to verify I was using the correct file. I'll change it
 back.
 
 But in general does it make sense for you to have this in addition to
 the existing stp file?

Yes, I think it makes sense.

Stefan



Re: [Qemu-devel] [RFC] Add a stp file for usage from build directory

2013-05-27 Thread Paolo Bonzini
Il 27/05/2013 04:19, Alon Levy ha scritto:
 For systemtap the location of the process being tapped is crucial, so
 the existing stp file requires installation to use. A new file providing
 qemu.local prefixed probes lets scripts run without an install step.
 
 Signed-off-by: Alon Levy al...@redhat.com
 ---
 
  Makefile.target | 13 -
  1 file changed, 12 insertions(+), 1 deletion(-)
 
 diff --git a/Makefile.target b/Makefile.target
 index ce4391f..5d176e2 100644
 --- a/Makefile.target
 +++ b/Makefile.target
 @@ -35,7 +35,7 @@ config-target.h: config-target.h-timestamp
  config-target.h-timestamp: config-target.mak
  
  ifdef CONFIG_TRACE_SYSTEMTAP
 -stap: $(QEMU_PROG).stp
 +stap: $(QEMU_PROG).stp $(QEMU_PROG).local.stp
  
  ifdef CONFIG_USER_ONLY
  TARGET_TYPE=user
 @@ -51,6 +51,17 @@ $(QEMU_PROG).stp: $(SRC_PATH)/trace-events
   --target-arch=$(TARGET_ARCH) \
   --target-type=$(TARGET_TYPE) \
$  $@,  GEN   $(TARGET_DIR)$(QEMU_PROG).stp)
 +
 +$(QEMU_PROG).local.stp: $(SRC_PATH)/trace-events
 + $(call quiet-command,$(TRACETOOL) \
 + --format=stap \
 + --backend=$(TRACE_BACKEND) \
 + --binary=$(SRC_PATH)/$(TARGET_DIR)$(QEMU_PROG) \

This is not the build directory for out-of-tree builds.

 + --probe-prefix=qemu.local \

Why change the prefix?

Paolo

 + --target-arch=$(TARGET_ARCH) \
 + --target-type=$(TARGET_TYPE) \
 +  $  $@,  GEN   $(TARGET_DIR)$(QEMU_PROG).local.stp)
 +
  else
  stap:
  endif