* perf user SDT markers
@ 2015-04-12 2:13 Brendan Gregg
2015-04-12 20:05 ` Brendan Gregg
0 siblings, 1 reply; 5+ messages in thread
From: Brendan Gregg @ 2015-04-12 2:13 UTC (permalink / raw)
To: linux-perf-use., hemant
G'Day,
I was just trying Hemant Kumar's user SDT patch
(http://lwn.net/Articles/618956/); anyone else tried it recently? I
applied it to 4.0.0-rc6, and it creates instrumentation, but doesn't
record the probes.
This works (it finds the Node.js probes):
# ./perf sdt-cache --dump
/home/bgregg-testtest/node-standard/out/Release/node:
%node:net__server__connection
%node:net__stream__end
%node:net__socket__read
%node:net__socket__write
%node:http__server__request
%node:http__server__response
%node:http__client__request
%node:http__client__response
%node:gc__done
%node:gc__start
But I can't "perf list" or record them:
# ./perf record -e '%node:http__server__request' -aR
invalid or unsupported event: '%node:http__server__request'
Run 'perf list' for a list of valid events
[...]
stap works:
# /root/systemtap-2.8/bin/stap -e 'probe
process("/home/bgregg-testtest/node-standard/out/Release/node").mark("http__server__request")
{ println("hit"); }'
hit
hit
Brendan
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: perf user SDT markers
2015-04-12 2:13 perf user SDT markers Brendan Gregg
@ 2015-04-12 20:05 ` Brendan Gregg
2015-04-13 9:27 ` Hemant Kumar
0 siblings, 1 reply; 5+ messages in thread
From: Brendan Gregg @ 2015-04-12 20:05 UTC (permalink / raw)
To: linux-perf-use., hemant
On Sat, Apr 11, 2015 at 7:13 PM, Brendan Gregg
<brendan.d.gregg@gmail.com> wrote:
> G'Day,
>
> I was just trying Hemant Kumar's user SDT patch
> (http://lwn.net/Articles/618956/); anyone else tried it recently? I
> applied it to 4.0.0-rc6, and it creates instrumentation, but doesn't
> record the probes.
>
> This works (it finds the Node.js probes):
>
> # ./perf sdt-cache --dump
> /home/bgregg-testtest/node-standard/out/Release/node:
> %node:net__server__connection
> %node:net__stream__end
> %node:net__socket__read
> %node:net__socket__write
> %node:http__server__request
> %node:http__server__response
> %node:http__client__request
> %node:http__client__response
> %node:gc__done
> %node:gc__start
>
> But I can't "perf list" or record them:
>
> # ./perf record -e '%node:http__server__request' -aR
> invalid or unsupported event: '%node:http__server__request'
> Run 'perf list' for a list of valid events
> [...]
>
> stap works:
>
> # /root/systemtap-2.8/bin/stap -e 'probe
> process("/home/bgregg-testtest/node-standard/out/Release/node").mark("http__server__request")
> { println("hit"); }'
> hit
> hit
>
> Brendan
Some more digging... So a simple C program with a DTRACE_PROBE1()
works, where the marker ends up being "%tick:loop":
# ./perf record -e '%tick:loop' -a -g
[...]
^C
[ perf record: Woken up 1 times to write data ]
[ perf record: Captured and wrote 0.334 MB perf.data (2 samples) ]
But the %node markers don't work (eg, "%node:gc__start"). Maybe the
presence of underscores is breaking it? By adding some debug
statements, I dug this message out of yyparse(), which was failing:
yyparse() yymsgbuf: syntax error, unexpected PE_NAME, expecting $end
Brendan
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: perf user SDT markers
2015-04-12 20:05 ` Brendan Gregg
@ 2015-04-13 9:27 ` Hemant Kumar
2015-04-13 17:19 ` Brendan Gregg
0 siblings, 1 reply; 5+ messages in thread
From: Hemant Kumar @ 2015-04-13 9:27 UTC (permalink / raw)
To: Brendan Gregg; +Cc: linux-perf-use.
Hi Brendan,
On 04/13/2015 01:35 AM, Brendan Gregg wrote:
> On Sat, Apr 11, 2015 at 7:13 PM, Brendan Gregg
> <brendan.d.gregg@gmail.com> wrote:
>> G'Day,
>>
>> I was just trying Hemant Kumar's user SDT patch
>> (http://lwn.net/Articles/618956/); anyone else tried it recently? I
>> applied it to 4.0.0-rc6, and it creates instrumentation, but doesn't
>> record the probes.
>>
>> This works (it finds the Node.js probes):
>>
>> # ./perf sdt-cache --dump
>> /home/bgregg-testtest/node-standard/out/Release/node:
>> %node:net__server__connection
>> %node:net__stream__end
>> %node:net__socket__read
>> %node:net__socket__write
>> %node:http__server__request
>> %node:http__server__response
>> %node:http__client__request
>> %node:http__client__response
>> %node:gc__done
>> %node:gc__start
>>
>> But I can't "perf list" or record them:
>>
>> # ./perf record -e '%node:http__server__request' -aR
>> invalid or unsupported event: '%node:http__server__request'
>> Run 'perf list' for a list of valid events
>> [...]
>>
>> stap works:
>>
>> # /root/systemtap-2.8/bin/stap -e 'probe
>> process("/home/bgregg-testtest/node-standard/out/Release/node").mark("http__server__request")
>> { println("hit"); }'
>> hit
>> hit
>>
>> Brendan
> Some more digging... So a simple C program with a DTRACE_PROBE1()
> works, where the marker ends up being "%tick:loop":
>
> # ./perf record -e '%tick:loop' -a -g
> [...]
> ^C
> [ perf record: Woken up 1 times to write data ]
> [ perf record: Captured and wrote 0.334 MB perf.data (2 samples) ]
>
> But the %node markers don't work (eg, "%node:gc__start"). Maybe the
> presence of underscores is breaking it? By adding some debug
> statements, I dug this message out of yyparse(), which was failing:
>
> yyparse() yymsgbuf: syntax error, unexpected PE_NAME, expecting $end
I rebased and tried the patches with perf for the latest tip:
# ./perf sdt-cache --add /lib64/libc.so.6
8 events added for /lib64/libc.so.6
# ./perf sdt-cache --dump
/usr/lib64/libc-2.16.so:
%libc:setjmp
%libc:longjmp
%libc:longjmp_target
%libc:lll_futex_wake
%libc:lll_lock_wait_private
%libc:longjmp
%libc:longjmp_target
%libc:lll_futex_wake
# ./perf record -e %libc:longjmp_target -aR sleep 1
[ perf record: Woken up 1 times to write data ]
[ perf record: Captured and wrote 0.286 MB perf.data ]
Its able to probe and record on %libc:longjmp_target with an underscore.
Also, can you please point me to the node.js with SDT markers you are
using and can you dump me the readelf -n /path/to/node.js o/p?
--
Thanks,
Hemant Kumar
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: perf user SDT markers
2015-04-13 9:27 ` Hemant Kumar
@ 2015-04-13 17:19 ` Brendan Gregg
2015-04-14 10:25 ` Hemant Kumar
0 siblings, 1 reply; 5+ messages in thread
From: Brendan Gregg @ 2015-04-13 17:19 UTC (permalink / raw)
To: Hemant Kumar; +Cc: linux-perf-use.
G'Day Hemant,
Thanks for testing; here's how I compiled node.js:
# apt-get install -y systemtap-sdt-dev # provides "dtrace"
# git clone --depth 1 https://github.com/joyent/node
# cd node
# ./configure --with-dtrace
# make
node readelf:
# readelf -n node
Notes at offset 0x00000254 with length 0x00000020:
Owner Data size Description
GNU 0x00000010 NT_GNU_ABI_TAG (ABI version tag)
OS: Linux, ABI: 2.6.24
Notes at offset 0x00000274 with length 0x00000024:
Owner Data size Description
GNU 0x00000014 NT_GNU_BUILD_ID (unique build ID bitstring)
Build ID: 85dd5ef00ffde124f220b94c8a2b552d9274a89f
Notes at offset 0x00c45fd8 with length 0x000004e4:
Owner Data size Description
stapsdt 0x0000003c NT_STAPSDT (SystemTap probe descriptors)
Provider: node
Name: gc__start
Location: 0x0000000000bf7894, Base: 0x0000000000f252de, Semaphore:
0x0000000001245fa8
Arguments: 4@%esi 4@%edx 8@%rdi
stapsdt 0x0000003a NT_STAPSDT (SystemTap probe descriptors)
Provider: node
Name: gcstart
Location: 0x0000000000bf7895, Base: 0x0000000000f252de, Semaphore:
0x0000000001245faa
Arguments: 4@%esi 4@%edx 8@%rdi
stapsdt 0x0000003b NT_STAPSDT (SystemTap probe descriptors)
Provider: node
Name: gc__done
Location: 0x0000000000bf78a4, Base: 0x0000000000f252de, Semaphore:
0x0000000001245fac
Arguments: 4@%esi 4@%edx 8@%rdi
stapsdt 0x0000005c NT_STAPSDT (SystemTap probe descriptors)
[...etc...]
(the "gcstart" probe is one I added to test the underscore theory.)
Here's also the event files:
# ls /sys/kernel/debug/tracing/events/node/
enable gc__start_11 gc__start_2 gcstart_5 http__server__request
filter gcstart_1_1 gcstart_2 gc__start_6 http__server__request_1
gcstart gc__start_12 gc__start_3 gcstart_6 http__server__request_2
gc__start gc__start_13 gcstart_3 gc__start_7 http__server__request_3
gc__start_1 gc__start_14 gc__start_4 gcstart_7 http__server__request_4
gcstart_1 gc__start_15 gcstart_4 gc__start_8 net__server__connection
gc__start_10 gc__start_16 gc__start_5 gc__start_9 net__server__connection_1
This is after several iterations of --add and --del. Something seems
to be going wrong there. Thanks,
Brendan
On Mon, Apr 13, 2015 at 2:27 AM, Hemant Kumar <hemant@linux.vnet.ibm.com> wrote:
> Hi Brendan,
>
>
> On 04/13/2015 01:35 AM, Brendan Gregg wrote:
>>
>> On Sat, Apr 11, 2015 at 7:13 PM, Brendan Gregg
>> <brendan.d.gregg@gmail.com> wrote:
>>>
>>> G'Day,
>>>
>>> I was just trying Hemant Kumar's user SDT patch
>>> (http://lwn.net/Articles/618956/); anyone else tried it recently? I
>>> applied it to 4.0.0-rc6, and it creates instrumentation, but doesn't
>>> record the probes.
>>>
>>> This works (it finds the Node.js probes):
>>>
>>> # ./perf sdt-cache --dump
>>> /home/bgregg-testtest/node-standard/out/Release/node:
>>> %node:net__server__connection
>>> %node:net__stream__end
>>> %node:net__socket__read
>>> %node:net__socket__write
>>> %node:http__server__request
>>> %node:http__server__response
>>> %node:http__client__request
>>> %node:http__client__response
>>> %node:gc__done
>>> %node:gc__start
>>>
>>> But I can't "perf list" or record them:
>>>
>>> # ./perf record -e '%node:http__server__request' -aR
>>> invalid or unsupported event: '%node:http__server__request'
>>> Run 'perf list' for a list of valid events
>>> [...]
>>>
>>> stap works:
>>>
>>> # /root/systemtap-2.8/bin/stap -e 'probe
>>>
>>> process("/home/bgregg-testtest/node-standard/out/Release/node").mark("http__server__request")
>>> { println("hit"); }'
>>> hit
>>> hit
>>>
>>> Brendan
>>
>> Some more digging... So a simple C program with a DTRACE_PROBE1()
>> works, where the marker ends up being "%tick:loop":
>>
>> # ./perf record -e '%tick:loop' -a -g
>> [...]
>> ^C
>> [ perf record: Woken up 1 times to write data ]
>> [ perf record: Captured and wrote 0.334 MB perf.data (2 samples) ]
>>
>> But the %node markers don't work (eg, "%node:gc__start"). Maybe the
>> presence of underscores is breaking it? By adding some debug
>> statements, I dug this message out of yyparse(), which was failing:
>>
>> yyparse() yymsgbuf: syntax error, unexpected PE_NAME, expecting $end
>
>
> I rebased and tried the patches with perf for the latest tip:
>
> # ./perf sdt-cache --add /lib64/libc.so.6
> 8 events added for /lib64/libc.so.6
>
> # ./perf sdt-cache --dump
> /usr/lib64/libc-2.16.so:
> %libc:setjmp
> %libc:longjmp
> %libc:longjmp_target
> %libc:lll_futex_wake
> %libc:lll_lock_wait_private
> %libc:longjmp
> %libc:longjmp_target
> %libc:lll_futex_wake
>
>
> # ./perf record -e %libc:longjmp_target -aR sleep 1
> [ perf record: Woken up 1 times to write data ]
> [ perf record: Captured and wrote 0.286 MB perf.data ]
>
> Its able to probe and record on %libc:longjmp_target with an underscore.
>
> Also, can you please point me to the node.js with SDT markers you are using
> and can you dump me the readelf -n /path/to/node.js o/p?
>
> --
> Thanks,
> Hemant Kumar
>
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: perf user SDT markers
2015-04-13 17:19 ` Brendan Gregg
@ 2015-04-14 10:25 ` Hemant Kumar
0 siblings, 0 replies; 5+ messages in thread
From: Hemant Kumar @ 2015-04-14 10:25 UTC (permalink / raw)
To: Brendan Gregg; +Cc: linux-perf-use.
Hi Brendan,
Thanks for the data.
On 04/13/2015 10:49 PM, Brendan Gregg wrote:
> G'Day Hemant,
>
> Thanks for testing; here's how I compiled node.js:
>
> # apt-get install -y systemtap-sdt-dev # provides "dtrace"
> # git clone --depth 1 https://github.com/joyent/node
> # cd node
> # ./configure --with-dtrace
> # make
Thanks, I was able to see the error in my case too.
Will look into this as to why its failing to record on these using perf
record -e "%node:gc__done", even after it creates an entry into the
uprobe_events file :
# cat /sys/kernel/debug/tracing/uprobe_events
p:node/gc__done /home/hemant/node/out/Release/node:0x000000000081d354
> node readelf:
>
> # readelf -n node
>
> Notes at offset 0x00000254 with length 0x00000020:
> Owner Data size Description
> GNU 0x00000010 NT_GNU_ABI_TAG (ABI version tag)
> OS: Linux, ABI: 2.6.24
>
> Notes at offset 0x00000274 with length 0x00000024:
> Owner Data size Description
> GNU 0x00000014 NT_GNU_BUILD_ID (unique build ID bitstring)
> Build ID: 85dd5ef00ffde124f220b94c8a2b552d9274a89f
>
> Notes at offset 0x00c45fd8 with length 0x000004e4:
> Owner Data size Description
> stapsdt 0x0000003c NT_STAPSDT (SystemTap probe descriptors)
> Provider: node
> Name: gc__start
> Location: 0x0000000000bf7894, Base: 0x0000000000f252de, Semaphore:
> 0x0000000001245fa8
> Arguments: 4@%esi 4@%edx 8@%rdi
> stapsdt 0x0000003a NT_STAPSDT (SystemTap probe descriptors)
> Provider: node
> Name: gcstart
> Location: 0x0000000000bf7895, Base: 0x0000000000f252de, Semaphore:
> 0x0000000001245faa
> Arguments: 4@%esi 4@%edx 8@%rdi
> stapsdt 0x0000003b NT_STAPSDT (SystemTap probe descriptors)
> Provider: node
> Name: gc__done
> Location: 0x0000000000bf78a4, Base: 0x0000000000f252de, Semaphore:
> 0x0000000001245fac
> Arguments: 4@%esi 4@%edx 8@%rdi
> stapsdt 0x0000005c NT_STAPSDT (SystemTap probe descriptors)
> [...etc...]
>
> (the "gcstart" probe is one I added to test the underscore theory.)
On a separate issue, all the SDT markers here are using semaphore. And
there is no support for markers with semaphores currently. Here is some
old discussion on this:
https://sourceware.org/ml/systemtap/2013-q3/msg00236.html
We need to discuss this issue in more detail and find out a way to
support those too.
So, even if the error wasn't being shown with the current patchset, perf
wouldn't record any hit on the markers.
> Here's also the event files:
>
> # ls /sys/kernel/debug/tracing/events/node/
> enable gc__start_11 gc__start_2 gcstart_5 http__server__request
> filter gcstart_1_1 gcstart_2 gc__start_6 http__server__request_1
> gcstart gc__start_12 gc__start_3 gcstart_6 http__server__request_2
> gc__start gc__start_13 gcstart_3 gc__start_7 http__server__request_3
> gc__start_1 gc__start_14 gc__start_4 gcstart_7 http__server__request_4
> gcstart_1 gc__start_15 gcstart_4 gc__start_8 net__server__connection
> gc__start_10 gc__start_16 gc__start_5 gc__start_9 net__server__connection_1
>
> This is after several iterations of --add and --del. Something seems
> to be going wrong there. Thanks,
This is because perf is able to make an entry into the uprobe_events
file, but since its throwing an error just after this, its not deleting
that entry from the uprobe_events (which will delete the corresponding
events from /sys/kernel/debug/tracing/events/node too).
Will certainly look into this.
> [SNIP]
> --
> To unsubscribe from this list: send the line "unsubscribe linux-perf-users" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at http://vger.kernel.org/majordomo-info.html
>
--
Thanks,
Hemant Kumar
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2015-04-14 10:26 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2015-04-12 2:13 perf user SDT markers Brendan Gregg
2015-04-12 20:05 ` Brendan Gregg
2015-04-13 9:27 ` Hemant Kumar
2015-04-13 17:19 ` Brendan Gregg
2015-04-14 10:25 ` Hemant Kumar
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.