Hi Brendan,

On 04/13/2015 01:35 AM, Brendan Gregg wrote:
On Sat, Apr 11, 2015 at 7:13 PM, Brendan Gregg
<[email protected]> 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

--
To unsubscribe from this list: send the line "unsubscribe linux-perf-users" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to