ftraceを試してみました

確認してみたら、Linuxカーネルのトレーサ「ftace」が使える状態になっていたので、ftraceを支援するコマンド「trace-cmd」もインストールして試してみました。


◆ 2015/09/06 追記
ftraceの使い方について、以下の記事でまとめ直しました。

確認

まず、既にdebugfsがマウント済みであるか否かを確認します。

$ ls /sys/kernel/debug/

ここで、「そのような名前のファイルやディレクトリは無い」といった内容のエラーメッセージが表示された場合は、debugfsがマウントされていませんので、

$ sudo mount -t debugfs none /sys/kernel/debug

のようにマウントします。


そして、以下の場所にあるファイルを確認してください。

  • /sys/kernel/debug/tracing/available_tracers

こちらのファイルに、「function」、「function_graph」の2つが記述されていれば、ftraceが使用可能な状態です。


そうでない場合は、Linuxカーネルでのftraceの設定とLinuxカーネルの再構築を行う必要があります。
本記事で参考にしている

や、UbuntuなどのDebian系のディストリビューションにおいてmake-kpkgでDEBパッケージを作成する方法については、

  • 以前の記事(id:cupnes:20110226:1298713968)

も参考に作業を行ってください。


また、ftraceが有効であるかどうかを確認します。

$ cat /proc/sys/kernel/ftrace_enabled
1

この様に、「/proc/sys/kernel/ftrace_enabled」に「1」が設定されていれば、ftraceは有効化されています。
そうでない場合は、

$ sudo sysctl kernel.ftrace_enabled=1

や、

$ sudo echo 1 > /proc/sys/kernel/ftrace_enabled

などで有効化の設定を行ってください。

trace-cmdのインストール

トレースログの作成、閲覧といった作業は、「trace-cmd」というコマンドを用いて行うのが便利な様です。


trace-cmdはソースコードで公開されています。以下の様にビルド・インストールを行います。

$ git clone git://git.kernel.org/pub/scm/linux/kernel/git/rostedt/trace-cmd.git
$ cd trace-cmd/
$ make
$ sudo make install

trace-cmdを試す

の受け売りですが、
「lsコマンド」についてトレースログを取得する場合には、以下の様にコマンドを実行します。

$ sudo trace-cmd record -p function_graph ls


すると、カレントディレクトリに「trace.dat」というバイナリ形式のファイルが作成されます。
これを閲覧するために、以下の様なコマンドを実行します。

$ trace-cmd report | lv    # ページャは「lv」でなくとも「less」でも何でも構いません