Patchwork [RFC] Add a stp file for usage from build directory

login
register
mail settings
Submitter Alon Levy
Date May 28, 2013, 12:33 p.m.
Message ID <1369744385.31959.7.camel@localhost>
Download mbox | patch
Permalink /patch/246856/
State New
Headers show

Comments

Alon Levy - May 28, 2013, 12:33 p.m.
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):



> 
> Paolo
> 
>
Paolo Bonzini - May 28, 2013, 12:37 p.m.
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 0000000..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 0000000..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
>>
>>
> 
>
Alon Levy - May 28, 2013, 1:25 p.m.
> 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 0000000..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 0000000..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
> >>
> >>
> > 
> > 
> 
> 
>
Alon Levy - May 28, 2013, 1:57 p.m.
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 0000000..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 0000000..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
> > >>
> > >>
> > > 
> > > 
> > 
> > 
> > 
>
Paolo Bonzini - May 28, 2013, 2:17 p.m.
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 0000000..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 0000000..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
>>>>>
>>>>>
>>>>
>>>>
>>>
>>>
>>>
>>
> 
>

Patch

diff --git a/scripts/stap-qxl-generic b/scripts/stap-qxl-generic
new file mode 100755
index 0000000..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 0000000..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]))
+       }
+}