Linux
kernel
systemtap

systemtap小ネタ

思い付いた/思い出したら追記します。時代はeBPFなのかも知れないけれど、old typeなのでまだまだsystemtapでがんばります。


begin/endプローブ

beginは、スクリプト起動時に実行される。stapコマンド起動時に-vオプションを忘れると、いつスクリプトの実行が開始されたか分からないので、私はいつもbeginでprintfを実行するようにしている。

endは終了時に実行される。Ctrl-Cで止めたときも実行されるので、統計を溜めておいて適当な時間後にCtrl-Cを押して結果を表示する、という使い方ができる。

probe begin {

printf("Script starting\n");
}

probe end {
printf("Result: %d\n", counter);
}


コマンドライン引数

stapコマンド起動時に引数を与えられる。第1引数は\$1、第2引数は\$2、...。@1、@2という形式で書くと、文字列扱い。


arg.stp

probe begin{

printf("1st arg: %d\n", $1);
printf("2nd arg: %s\n", @2);
}

実行例

$ sudo stap arg.stp 1 2

1st arg: 1
2nd arg: 2

引数はモジュールに定数として埋め込まれるようで、引数を変えるとスクリプトは再コンパイルされる。同じ引数を与えると、キャッシュが使われる。