dtrace で特定の関数が呼ばれた時のコールスタックを取得2017年10月04日 21時04分47秒

スワップの実装に大きな変更があったのと、元からの興味により sys/vm/swappager.c を覗いている。

swp_pager_meta_build がいつ呼ばれるか興味があったので、久しぶりに dtrace を使ってみることにした。stack と言う関数がある。

# dtrace -n 'fbt::swp_pager_meta_build:entry{ stack() }'
dtrace: description 'fbt::swp_pager_meta_build:entry' matched 1 probe
dtrace: buffer size lowered to 6m


  0  20744       swp_pager_meta_build:entry
              kernel`swap_pager_putpages+0x266
              kernel`vm_pageout_cluster+0x4e4
              kernel`vm_pageout_laundry_worker+0x9c0
              kernel`fork_exit+0x6a
              kernel`0xc10a1b20

カーネル内では関数ポインタを設定して、あちこちに飛ぶことも多いので一部のコールスタックは、見た目程明らかではない。この出力は、11-STABLE で、11.1-RELEASE とは既にかなり異なっている。

しかし、若干これらの関数を覗いてみたところ、一部が抜けているように見える。これから、動作を探りながら dtrace の実験もしてみたい。