オレの劣化が止まらない このページをアンテナに追加 RSSフィード

2010-03-27

[][][] perl 5.10.1 でdtrace環境構築

#dtraceday 記念。

perl と dtrace についてですが、perl5.8.8はSunの人からpatchが公開されていました。

最新バージョンの perl5.10.1(releaseから、半年以上経ってますが) ではpatchなしでコンパイルオプションを指定することで利用可能です。

(そのまま取り込んだ感じ?http://blogs.sun.com/alanbur/date/20050909

ただ、Makefile内の依存関係にバグがあるので(既にチケット切られててパッチがある?)

少し手直しがいります。

そのままコンパイルすると、以下のように miniperl作るのにperldtrace.o がないと言われます。

$ make
...
/usr/bin/cc -L/usr/lib -L/usr/ccs/lib -L/opt/sunstudio12.1/prod/lib -L/lib -L/usr/local/lib -o miniperl \
      gv.o toke.o perly.o pad.o regcomp.o dump.o util.o mg.o reentr.o mro.o hv.o av.o run.o pp_hot.o sv.o pp.o scope.o pp_ctl.o pp_sys.o doop.o doio.o regexec.o utf8.o taint.o deb.o universal.o xsutils.o globals.o perlio.o perlapi.o numeric.o mathoms.o locale.o pp_pack.o pp_sort.o  \
    miniperlmain.o opmini.o perlmini.o -lsocket -lnsl -ldl -lm -lpthread -lc
Undefined                       first referenced
 symbol                             in file
__dtrace_perl___sub__entry          pp_hot.o
__dtraceenabled_perl___sub__return  pp_hot.o
__dtraceenabled_perl___sub__entry   pp_hot.o
__dtrace_perl___sub__return         pp_hot.o
ld: fatal: symbol referencing errors. No output written to miniperl
 *** Error code 1
make: Fatal error: Command failed for target `miniperl'

ということで、以下の手順でmakeします。

$ wget http://www.cpan.org/src/perl-5.10.1.tar.gz
$ gzip -cd perl-5.10.1.tar.gz | tar xf -
$ cd perl-5.10.1
$ chmod 755 Makefile.SH   # 書き込み権限をつけてます。
$ vi Makefile.SH

○変更前

...
mini_obj =  $(obj1) $(obj2) $(obj3) $(ARCHOBJS)
ndt_obj = $(obj0) $(obj1) $(obj2) $(obj3) $(ARCHOBJS)
obj = $(ndt_obj) $(DTRACE_O)
...

○変更後

...
mini_obj =  $(obj1) $(obj2) $(obj3) $(ARCHOBJS) $(DTRACE_O)
ndt_obj = $(obj1) $(obj2) $(obj3) $(ARCHOBJS)
obj = $(obj0) $(ndt_obj) $(DTRACE_O)
...


以下は/usr/local以下にインストールする場合です。

ポイントは、"-Dusedtrace" になります。

$ ./Configure -des -Dcc=/usr/bin/cc -Dusethreads -Dprefix=/usr/local \
 -Duse64bitint -Duseshrplib -Dusedtrace
$ make
/usr/sbin/dtrace -h -s perldtrace.d -o perldtrace.h
...
$ make test
...
t/x2p/s2p.....................................................ok
All tests successful.
u=2.21  s=1.45  cu=279.20  cs=22.38  scripts=1665  tests=234334
$ pfexec make install

こんな感じに perlプロバイダが見えるようになるので使えているはずです。

$ perl -e 'sleep 60' &
[4] 22551
$ pfexec dtrace -l |grep -i perl
65296  perl22511        libperl.so                      Perl_pp_sort sub-entry
65297  perl22511        libperl.so                   Perl_pp_dbstate sub-entry
65298  perl22511        libperl.so                  Perl_pp_entersub sub-entry
65299  perl22511        libperl.so                      Perl_pp_last sub-return
65300  perl22511        libperl.so                    Perl_pp_return sub-return
65301  perl22511        libperl.so                     Perl_dounwind sub-return
65302  perl22511        libperl.so                Perl_pp_leavesublv sub-return
65303  perl22511        libperl.so                  Perl_pp_leavesub sub-return
65346  perl22551        libperl.so                      Perl_pp_sort sub-entry
65347  perl22551        libperl.so                   Perl_pp_dbstate sub-entry
65348  perl22551        libperl.so                  Perl_pp_entersub sub-entry
65349  perl22551        libperl.so                      Perl_pp_last sub-return
65350  perl22551        libperl.so                    Perl_pp_return sub-return
65351  perl22551        libperl.so                     Perl_dounwind sub-return
65352  perl22551        libperl.so                Perl_pp_leavesublv sub-return
65353  perl22551        libperl.so                  Perl_pp_leavesub sub-return
$

kohju1kohju1 2010/03/29 02:09 おお!すごい。参考にさせて頂きます。

D-Traceが有効になった、Perlは、なんでパッケージがないのでしょうね・・・

やっぱりcontribに入るように考えるべきかもしれませんね。

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証

Connection: close