perf probeで引数とかもログ取れる?と思って確認したらできることが分かったのでその辺のめも。
例えばlong do_sys_open(int dfd, const char __user *filename, int flags, umode_t mode)の引数を記録するのはこんな感じ。filename引数は文字列として扱うようにstringで指定。後は整数値なので特になし。登録が完了するとこうやって記録しろってコマンドラインを表示してくれるので実行する。
[root@saga masami]# perf probe 'do_sys_open filename:string flags mode' Added new event: probe:do_sys_open (on do_sys_open with filename:string flags mode) You can now use it in all perf tools, such as: perf record -e probe:do_sys_open -aR sleep 1 [root@saga masami]# perf record -e probe:do_sys_open -aR sleep 10
登録されているprobeの一覧は-lオプションで見れる。
[root@saga masami]# perf probe -l probe:do_sys_open (on do_sys_open@fs/open.c with filename_string flags mode)
ログを見るのにperf reportではなくてperf scriptでcatコマンドだけに絞りつつ、見るフィールドをcomm、time、event、trace(ここではfilname_string=からの部分)で表示してみる。
[root@saga masami]# perf script -f time,comm,event,trace -c cat 'trace' not valid for hardware events. Ignoring. 'trace' not valid for software events. Ignoring. 'trace' not valid for unknown events. Ignoring. cat 5527.132267: probe:do_sys_open: (ffffffff811d3000) filename_string="/etc/ld.so.cache" flags=557056 mode=0x1 cat 5527.132289: probe:do_sys_open: (ffffffff811d3000) filename_string="/usr/lib/libc.so.6" flags=557056 mode=0x8130 cat 5527.132498: probe:do_sys_open: (ffffffff811d3000) filename_string="/usr/lib/locale/locale-archive" flags=557056 mode=0x0 cat 5527.132543: probe:do_sys_open: (ffffffff811d3000) filename_string="a.c" flags=32768 mode=0x0 cat 5529.039551: probe:do_sys_open: (ffffffff811d3000) filename_string="/etc/ld.so.cache" flags=557056 mode=0x1 cat 5529.039604: probe:do_sys_open: (ffffffff811d3000) filename_string="/usr/lib/libc.so.6" flags=557056 mode=0xe130 cat 5529.040124: probe:do_sys_open: (ffffffff811d3000) filename_string="" flags=557056 mode=0x0 cat 5529.040250: probe:do_sys_open: (ffffffff811d3000) filename_string="b.c" flags=32768 mode=0x0 cat 5529.040329: probe:do_sys_open: (ffffffff811d3000) filename_string="/usr/share/locale/locale.alias" flags=557056 mode=0x1b6 cat 5529.040459: probe:do_sys_open: (ffffffff811d3000) filename_string="/usr/share/locale/en_US.UTF8/LC_MESSAGES/libc.mo" flags=32768 mode=0x1 cat 5529.040478: probe:do_sys_open: (ffffffff811d3000) filename_string="/usr/share/locale/en_US.utf8/LC_MESSAGES/libc.mo" flags=32768 mode=0xa1a0 cat 5529.040493: probe:do_sys_open: (ffffffff811d3000) filename_string="/usr/share/locale/en_US/LC_MESSAGES/libc.mo" flags=32768 mode=0xb270 cat 5529.040509: probe:do_sys_open: (ffffffff811d3000) filename_string="/usr/share/locale/en.UTF8/LC_MESSAGES/libc.mo" flags=32768 mode=0xb3a0 cat 5529.040524: probe:do_sys_open: (ffffffff811d3000) filename_string="/usr/share/locale/en.utf8/LC_MESSAGES/libc.mo" flags=32768 mode=0xb1e0 cat 5529.040539: probe:do_sys_open: (ffffffff811d3000) filename_string="/usr/share/locale/en/LC_MESSAGES/libc.mo" flags=32768 mode=0xb310
参考にしたのはLinux perf ExamplesのExamplesです。 上記ページにあるとおり、probeの内容によってはCONFIG_DEBUG_INFO=yにする必要があります。fedoraとかだとdebug用のパッケージを入れれば良いかと思います。
アンダースタンディング コンピュテーション―単純な機械から不可能なプログラムまで
- 作者: Tom Stuart,笹田耕一(監訳),笹井崇司
- 出版社/メーカー: オライリージャパン
- 発売日: 2014/09/18
- メディア: 大型本
- この商品を含むブログ (7件) を見る