思い付いた/思い出したら追記します。時代は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
引数はモジュールに定数として埋め込まれるようで、引数を変えるとスクリプトは再コンパイルされる。同じ引数を与えると、キャッシュが使われる。