Red Hat Training

A Red Hat training course is available for RHEL 8

40.2. SystemTap での関数呼び出しのトレース

para-callgraph.stp SystemTap スクリプトを使用して、関数呼び出しと関数戻りを追跡できます。

前提条件

手順

  • para-callgraph.stp スクリプトを実行します。
# stap --example para-callgraph.stp 'argument1' 'argument2'

para-callgraph.stp スクリプトは、コマンドライン引数を 2 つ取ります。

  1. その開始または終了が追跡対象となっている関数の名前。
  2. オプションのトリガー関数。スレッド単位でのトレースを有効または無効にします。trigger function が終了していなければ、各スレッドにおける追跡は継続されます。

以下の例を考慮してください。

# stap -wv --example para-callgraph.stp 'kernel.function("*@fs/proc.c*")' 'kernel.function("vfs_read")' -c "cat /proc/sys/vm/* || true"

ここでは、以下のようになります。

  • -w : 警告を表示しません。
  • -v : 起動したカーネルの出力を表示します。
  • -c コマンド : コマンドの実行中に関数呼び出しを数えるように SystemTap に指示します (この例では /bin/true)。

この出力は、以下のようになります。

[...]
   267 gnome-terminal(2921): <-do_sync_read return=0xfffffffffffffff5
   269 gnome-terminal(2921):<-vfs_read return=0xfffffffffffffff5
     0 gnome-terminal(2921):->fput file=0xffff880111eebbc0
     2 gnome-terminal(2921):<-fput
     0 gnome-terminal(2921):->fget_light fd=0x3 fput_needed=0xffff88010544df54
     3 gnome-terminal(2921):<-fget_light return=0xffff8801116ce980
     0 gnome-terminal(2921):->vfs_read file=0xffff8801116ce980 buf=0xc86504 count=0x1000 pos=0xffff88010544df48
     4 gnome-terminal(2921): ->rw_verify_area read_write=0x0 file=0xffff8801116ce980 ppos=0xffff88010544df48 count=0x1000
     7 gnome-terminal(2921): <-rw_verify_area return=0x1000
    12 gnome-terminal(2921): ->do_sync_read filp=0xffff8801116ce980 buf=0xc86504 len=0x1000 ppos=0xffff88010544df48
    15 gnome-terminal(2921): <-do_sync_read return=0xfffffffffffffff5
    18 gnome-terminal(2921):<-vfs_read return=0xfffffffffffffff5
     0 gnome-terminal(2921):->fput file=0xffff8801116ce980