/proc/kallsyms でトレースポイントを確認する
前のステップでは、トレーシングファイルシステムと trace-cmd
ユーティリティを使ってトレースポイントを一覧表示する方法を学びました。今度は、トレースポイントの情報を確認する別の方法、つまり /proc/kallsyms
ファイルを調べてみましょう。
/proc/kallsyms
ファイルには、関数や変数を含むすべてのエクスポートされたカーネルシンボルのアドレスと名前が含まれています。トレースポイントもこのファイル内でシンボルとして表されます。
cat
や grep
などのコマンドを使って、/proc/kallsyms
内のトレースポイントシンボルを検索することができます。トレースポイントシンボルは通常、命名規則に従っており、多くの場合 tracepoint
または _tracepoint
が含まれています。
/proc/kallsyms
内でトレースポイントに関連するシンボルを探してみましょう。cat
を使ってファイルを読み取り、その出力を grep
にパイプして、「tracepoint」という単語を含む行を検索します。
次のコマンドを入力して Enter キーを押します。
cat /proc/kallsyms | grep tracepoint
このコマンドは、/proc/kallsyms
から「tracepoint」という文字列を含む行を表示します。次のような出力が表示されます。
...
ffffffffXXXXXXXX R __tracepoint_module_load
ffffffffXXXXXXXX R __tracepoint_module_free
ffffffffXXXXXXXX R __tracepoint_module_get
ffffffffXXXXXXXX R __tracepoint_module_put
ffffffffXXXXXXXX R __tracepoint_module_request_module
ffffffffXXXXXXXX R __tracepoint_module_module_init
ffffffffXXXXXXXX R __tracepoint_module_module_exit
ffffffffXXXXXXXX R __tracepoint_module_module_request
ffffffffXXXXXXXX R __tracepoint_module_module_autoload
ffffffffXXXXXXXX R __tracepoint_module_module_kset_reg
ffffffffXXXXXXXX R __tracepoint_module_module_kset_unreg
...
XXXXXXXX
は 16 進数のアドレスを表しており、システムによって異なります。重要なのはシンボル名で、多くの場合 __tracepoint_
で始まり、その後にサブシステムとイベント名が続きます。
これにより、トレースポイントが実際にカーネルのシンボルテーブル内でシンボルとして表され、/proc/kallsyms
を通じてアクセスできることが確認されます。/sys/kernel/debug/tracing
や trace-cmd
はトレースポイントの管理と表示により使いやすいインターフェースを提供しますが、トレースポイントがカーネルシンボルとして存在することを理解することは、高度なカーネルトレーシングの概念を理解する上で基本的です。
これで、Linux システム上のトレースポイントを識別して調査する 3 つの異なる方法を学びました。
Continue をクリックしてこの実験を完了しましょう。