Front page | perl.perl5.porters |
Postings from January 2011
[perl #82922] Making Use of Dtrace Probe Points on Linux
From:
Lukas Berk
Date:
January 27, 2011 14:28
Subject:
[perl #82922] Making Use of Dtrace Probe Points on Linux
Message ID:
rt-3.6.HEAD-20807-1296153726-24.82922-75-0@perl.org
# New Ticket Created by Lukas Berk
# Please include the string: [perl #82922]
# in the subject line of all future correspondence about this issue.
# <URL: http://rt.perl.org/rt3/Ticket/Display.html?id=82922 >
This is a bug report for perl from lberk@redhat.com,
generated with the help of perlbug 1.39 running under perl 5.12.3.
-----------------------------------------------------------------
[Please describe your issue here]
In Perl 5.12 dtrace/systemtap probe points have been enabled.
These probe points allow for better diagnostics and tracing of perl
scripts.
My patch includes a tapset that enables systemtap to utilize these probe
points on the linux platform, and an example systemtap script.
Adding these files to the source will allow distibutions to install the
files in their corresponding tapset directory, if they so choose.
Changes were tested on the Fedora build of perl, both on 64 bit and 32
bit
spins with no regressions. Both the tapset and example script worked as
expected.
diff --git a/perl-example.stp b/perl-example.stp
new file mode 100644
index 0000000..6a77b20
--- /dev/null
+++ b/perl-example.stp
@@ -0,0 +1,19 @@
+/*
+ Example of the perl systemtap tapset shows a nested view of perl
subroutine
+ calls and returns across the whole system.
+
+ To run:
+ stap perl-example.stp (for all perl processes)
+ For specific perl process:
+ stap perl-example.stp -c COMMAND
+*/
+
+probe perl.sub.call
+{
+ printf("%s => sub: %s, filename: %s, line: %d\n", thread_indent(1),
sub, filename, lineno)
+}
+
+probe perl.sub.return
+{
+ printf("%s <= sub: %s, filename: %s, line: %d\n",
thread_indent(-1), sub, filename, lineno)
+}
diff --git a/perl.stp b/perl.stp
new file mode 100755
index 0000000..38122d2
--- /dev/null
+++ b/perl.stp
@@ -0,0 +1,26 @@
+ /*
+ This probe will fire when the perl script enters a subroutine.
+ */
+
+probe perl.sub.call = process("LIBRARY_PATH").mark("sub__entry")
+{
+
+ sub = user_string($arg1)
+ filename = user_string($arg2)
+ lineno = $arg3
+
+}
+
+/*
+ This probe will fire when the return from a subroutine has been
+ hit.
+ */
+
+probe perl.sub.return = process("LIBRARY_PATH").mark("sub__return")
+{
+
+ sub = user_string($arg1)
+ filename = user_string($arg2)
+ lineno = $arg3
+
+}
[Please do not change anything below this line]
-----------------------------------------------------------------
---
Flags:
category=install
severity=wishlist
---
This perlbug was built using Perl 5.12.3 in the Fedora build system.
It is being executed now by Perl 5.12.3 - Tue Jan 25 10:43:01 EST 2011.
Site configuration information for perl 5.12.3:
Configured by Red Hat, Inc. at Tue Jan 25 10:43:01 EST 2011.
Summary of my perl5 (revision 5 version 12 subversion 3) configuration:
Platform:
osname=linux, osvers=2.6.38-0.rc2.git0.1.fc15.x86_64,
archname=x86_64-linux-thread-multi
uname='linux fed-raw-64 2.6.38-0.rc2.git0.1.fc15.x86_64 #1 smp sat
jan 22 19:02:39 utc 2011 x86_64 x86_64 x86_64 gnu
+linux '
config_args='-des -Doptimize=-O2 -g -pipe -Wall
-Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-b
+uffer-size=4 -m64 -mtune=generic -Dccdlflags=-Wl,--enable-new-dtags
-DDEBUGGING=-g -Dversion=5.12.3
+-Dmyhostname=localhost -Dperladmin=root@localhost -Dcc=gcc -Dcf_by=Red
Hat, Inc. -Dprefix=/usr -Dvendorprefix=/usr
+-Dsiteprefix=/usr/local -Dsitelib=/usr/local/share/perl5
-Dsitearch=/usr/local/lib64/perl5 -Dprivlib=/usr/share/perl5
+-Dvendorlib=/usr/share/perl5/vendor_perl -Darchlib=/usr/lib64/perl5
-Dvendorarch=/usr/lib64/perl5/vendor_perl
+-Darchname=x86_64-linux-thread-multi -Dlibpth=/usr/local/lib64 /lib64
/usr/lib64 -Duseshrplib -Dusethreads
+-Duseithreads -Dusedtrace=/usr/bin/dtrace -Duselargefiles
-Dd_semctl_semun -Di_db -Ui_ndbm -Di_gdbm -Di_shadow
+-Di_syslog -Dman3ext=3pm -Duseperlio -Dinstallusrbinperl=n
-Ubincompat5005 -Uversiononly -Dpager=/usr/bin/less -isr
+-Dd_gethostent_r_proto -Ud_endhostent_r_proto -Ud_sethostent_r_proto
-Ud_endprotoent_r_proto -Ud_setprotoent_r_proto
+-Ud_endservent_r_proto -Ud_setservent_r_proto -Dscriptdir=/usr/bin'
hint=recommended, useposix=true, d_sigaction=define
useithreads=define, usemultiplicity=define
useperlio=define, d_sfio=undef, uselargefiles=define, usesocks=undef
use64bitint=define, use64bitall=define, uselongdouble=undef
usemymalloc=n, bincompat5005=undef
Compiler:
cc='gcc', ccflags ='-D_REENTRANT -D_GNU_SOURCE -fno-strict-aliasing
-pipe -fstack-protector -I/usr/local/include -D_
+LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64',
optimize='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions
-fstack-protector --param=ssp-buffer-size=4 -m64 -
+mtune=generic',
cppflags='-D_REENTRANT -D_GNU_SOURCE -fno-strict-aliasing -pipe
-fstack-protector -I/usr/local/include'
ccversion='', gccversion='4.6.0 20110122 (Red Hat 4.6.0-0.3)',
gccosandvers=''
intsize=4, longsize=8, ptrsize=8, doublesize=8, byteorder=12345678
d_longlong=define, longlongsize=8, d_longdbl=define, longdblsize=16
ivtype='long', ivsize=8, nvtype='double', nvsize=8, Off_t='off_t',
lseeksize=8
alignbytes=8, prototype=define
Linker and Libraries:
ld='gcc', ldflags =' -fstack-protector'
libpth=/usr/local/lib64 /lib64 /usr/lib64
libs=-lresolv -lnsl -lgdbm -ldb -ldl -lm -lcrypt -lutil -lpthread
-lc -lgdbm_compat
perllibs=-lresolv -lnsl -ldl -lm -lcrypt -lutil -lpthread -lc
libc=, so=so, useshrplib=true, libperl=libperl.so
gnulibc_version='2.12.90'
Dynamic Linking:
dlsrc=dl_dlopen.xs, dlext=so, d_dlsymun=undef,
ccdlflags='-Wl,--enable-new-dtags -Wl,-rpath,/usr/lib64/perl5/CORE'
cccdlflags='-fPIC', lddlflags='-shared -O2 -g -pipe -Wall
-Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --p
+aram=ssp-buffer-size=4 -m64 -mtune=generic'
Locally applied patches:
Locally applied patches:
---
@INC for perl 5.12.3:
/usr/local/lib64/perl5
/usr/local/share/perl5
/usr/lib64/perl5/vendor_perl
/usr/share/perl5/vendor_perl
/usr/lib64/perl5
/usr/share/perl5
.
---
Environment for perl 5.12.3:
HOME=/home/lberk
LANG=en_US.UTF-8
LANGUAGE (unset)
LD_LIBRARY_PATH (unset)
LOGDIR (unset)
PATH=/usr/lib64/qt-3.3/bin:/usr/lib64/ccache:/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/lber
+k/bin
PERL_BADLANG (unset)
SHELL=/bin/bash
-
[perl #82922] Making Use of Dtrace Probe Points on Linux
by Lukas Berk