カーネル内で閉じたトレーサ「ftrace」を使えるようにする
Linux のトレーサと言えば幾つかありますが、@IT の記事「3月版 トレーサ関連に大きな進展、ftraceがデファクトに?」にある ftrace が便利そうです。今回は CentOS 5.5 x86_64 で ftrace が使える環境を用意してみます。id:tasukuchan の trace-cmdを使って、Linux Kernelのイベントログを簡単に取得する を参考にさせて頂きました。
カーネルの再コンパイル(ftrace の有効化)¶
以前に書いた記事 を参考に、ftrace を有効化したカーネルをコンパイルします。現状のカーネルは以下の通りです。
1 2 |
|
上述の過去記事通り、カーネルをコンパイルします。現時点ではカーネル 2.6.37 がリリースされていますが、以前にコンパイル&動作させた実績のあるカーネル 2.6.36.1 を使いました(カーネル 2.6.37 でも試したのですが、Linux 自体が起動しなくなってしまいました。別の機会にトラブルシューティングしてみます)。
1 2 3 4 5 |
|
"make oldconfig" は全て「ENTER」で進みます。
1 |
|
"make menuconfig" します。以下のようなエラーが出る場合は ncurses-devel を追加インストールします。
1 2 3 4 5 6 7 8 9 10 11 |
|
メニューから下記を選択して有効化します。
- [General setup]
- [enable deprecated sysfs features to support old userspace tools] にチェック
- [Networking support]
- [Networking options]
- [Network packet filtering framework (NetFilter)]
- [Core Netfilter Configuration] の中のすべての項目
- [IP: Netfilter Configuration] の中のすべての項目
- [IPv6: Netfilter Configuration] の中のすべての項目
- [IP virtual server support] の中のすべての項目
- [Network packet filtering framework (NetFilter)]
- [Networking options]
- [Kernel hacking]
- [Tracers]
- [Kernel Function Tracer]
- [Trace syscalls]
- [Tracers]
カーネルをコンパイル&インストールします。
1 2 3 |
|
/boot/grub/grub.conf に下記を追記します。
1 2 3 4 |
|
再起動します。
1 |
|
再起動後、カーネルのバージョンを確認します。
1 2 |
|
ftrace を利用出来る状態にする¶
ftrace は debugfs 上のエントリーを参照したり、更新したりしますので、まず debugfs をマウントします。
1 |
|
現在、有効なトレーサの一覧は "/sys/kernel/debug/tracing/available_tracers" で確認出来ます。下記の例では "function" と "function_graph" が表示されており、ftrace が有効化されていることが分かります。
1 2 |
|
trace-cmd のインストール¶
上述の通り、ftrace の操作は debugfs 経由で行いますが、この操作を支援してくれる「trace-cmd」というツールがあります。trace-cmd は git.kernel.org で公開されており、以下の手順でインストールが可能です。
1 2 3 4 |
|
これから使い込んでみたいと思います。