0

ftraceを使用して perf_event_openをトレースしたいのですが、available_filter_function に表示されません。実際には、モジュールにロードされている関数のみが表示されているようです。

非モジュール関数のデフォルトのブラックリストはありますか? 必要な機能を追加するには?

4

1 に答える 1

2

Steven Rostedt による 2010 年 1 月 20 日の記事「Ftrace 関数トレーサーの秘密」にいくつかの情報があります: https://lwn.net/Articles/370423/

フィルター ファイルに追加できる関数の一覧がファイルに表示されavailable_filter_functionsます。この関数のリストは、mcount前述の保存された呼び出し元のリストから派生したものです。

ファイルにリストされている関数のセットは、カーネル コンパイル オプションによって異なります (/boot/config* または /proc/config.gz でそれらを確認し、質問に結果を追加してください)。

CONFIG_FUNCTION_TRACER
CONFIG_DYNAMIC_FTRACE
CONFIG_FUNCTION_GRAPH_TRACER

mcount についての詳細は、シリーズの以前の記事に記載されています: https://lwn.net/Articles/365835/ Ftrace を使用したカーネルのデバッグ - パート 1、2009 年 12 月、Steven Rostedt:

Ftrace の最も強力なトレーサーの 1 つは関数トレーサーです。gcc の -pg オプションを使用して、カーネル内のすべての関数が特別な関数「mcount()」を呼び出すようにします。CONFIG_DYNAMIC_FTRACE が構成されている場合、呼び出しはブート時に NOP に変換され、システムを 100% のパフォーマンスで実行し続けます。コンパイル中に mcount() 呼び出しサイトが記録されます。

/sys/kernel/debug/tracing/events/syscalls/sys_enter_perf_event_open/ のファイルも確認できますか?

syscall は関数としてではなく、イベントとして ftrace で利用できます (opensourceforu.com/2010/12/kernel-tracing-with-ftrace-part-2/ の例):

trace-cmd record -e syscalls ls  ##Initiate tracing on the syscall 'ls'
##(A file called trace.dat gets created in the current directory.)
trace-cmd report                 ## displays the report from trace.dat

私にとっては、へのtrace-cmd record -e syscalls perf stat ls -d .呼び出しをキャッチしますperf_event_open

于 2016-06-27T02:51:07.840 に答える