カーネル内で閉じたトレーサ「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 |  | 
これから使い込んでみたいと思います。