develooper 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




nntp.perl.org: Perl Programming lists via nntp and http.
Comments to Ask Bjørn Hansen at ask@perl.org | Group listing | About