最新のSystemtapのインストール方法

今日はSystemtapの最新版を、ソースコードからインストールする方法(FedoraUbuntu)について説明します。

Ubuntu

身も蓋もない言い方をすれば、Wikiを参照してください。

Fedora

Fedoraでは、必要なパッケージが少し違います。gitはとりあえず入れるとして、以下のパッケージをインストールします。

  • elfutils-devel
  • sqlite-devel(オプショナル)
  • latex2html(オプショナル)

インストール後、gitでソースコード取得後、普通にコンパイル・インストールします。

$ git clone git://sources.redhat.com/git/systemtap.git
$ cd systemtap
$ ./configure
$ make
$ make install

Systemtapの開発は今でも進んでいて、新機能の取り込みなども続いています。特に、0.6系では安定化を図った改善が多く、0.7系では使いやすさを求めた改善が多く含まれています。バージョン毎に追加された新機能は、NEWSファイルに記録されています。

0.7以降で追加された便利な機能には、以下のようなものがあります。

ローカル変数の説明付き自動展開

 $$parms,$$locals,$$vars,$$returnという特殊変数を使うと、プローブ箇所の関数の引数やローカル変数、戻り値などに、自動的に展開し、名前付きで文字列化します。これは例えば、あるファイルに含まれるすべての関数の呼び出しをトレースするのに便利です。

$ stap -e 'probe kernel.function("*@kernel/fork.c").call {printf("%s (%s)\n", probefunc(), $$parms)}'
do_fork (clone_flags=0x1200011 stack_start=0xbfe96838 regs=0xdf901fb8 stack_size=0x0 parent_tidptr=0x0 child_tidptr=0xffffffffb7c4d768 )
copy_process (clone_flags=0x1200011 stack_start=0xbfe96838 regs=0xdf901fb8 stack_size=0x0 child_tidptr=0xffffffffb7c4d768 pid=0x0 )
copy_files (clone_flags=0x1200011 tsk=0xf517c000 )
dup_fd (oldf=0xdfd4c780 errorp=0xdf901f08 )
__copy_fs_struct (old=0xdfb70cc0 )
mm_init (mm=0xf65f2540 )
mm_alloc ()
mm_init (mm=0xf51788c0 )
...

ユーザ空間プログラムトレースの試験的なサポート

 まだ一部のプラットフォームでしか対応していない機能ですが、カーネルに加えてユーザ空間のプログラムにプローブを挿入する機能がマージされ始めました。おそらく、CentOS5.2などでしか実行できないとは思います。ユーザ空間のプログラムとカーネル空間のプログラムの両方を、同じ一つのスクリプトでトレース処理を記述することで、ある問題がカーネルとユーザアプリのどちらで発生しているかを迅速に調べることができるようになると期待されています。

相対行番号指定や、範囲行番号指定のサポート

 これまで、.statementによる行番号単位でのプローブポイントの指定はサポートされていましたが、この指定はファイル内の行番号を指定するものでした。この機能を使えば、ある関数の先頭から数えて何行目、と言った指定や、あるファイルの何行目から何行目まで、という指定が可能になりました。