6.5. ftrace

ftrace フレームワークはユーザーにいくつかのトレース機能を提供します。これは SystemTap のインターフェースよりも非常にシンプルなインターフェースでアクセス可能です。このフレームワークは、debugfs ファイルシステムにある仮想ファイルのセットを使用します。これらのファイルは、特定のトレーサーを有効にします。ftrace 機能トレーサーは、カーネルで呼び出された各機能をリアルタイムで出力します。ftrace フレームワーク内の他のトレーサーは、ウェイクアップ待ち時間やタスクスイッチ、カーネルイベントなどの分析にも使用できます。
また、ftrace に新たなトレーサーを追加し、カーネルイベントの分析用に柔軟性のあるソリューションとすることもできます。ftrace フレームワークは、ユーザースペースの外で発生する待ち時間やパフォーマンスの問題のデバッグや分析に便利です。本ガイド内で説明している他のプロファイラーと違い、ftrace カーネルのビルドイン機能です。

6.5.1. ftrace の使用方法

Red Hat Enterprise Linux 6 のカーネルには、CONFIG_FTRACE=y オプションが設定されています。このオプションは、ftrace が必要とするインターフェースを提供します。ftrace を使用するには、以下の方法で debugfs ファイルシステムをマウントします。
mount -t debugfs nodev /sys/kernel/debug
ftrace ユーティリティーはすべて、/sys/kernel/debug/tracing/ にあります。/sys/kernel/debug/tracing/available_tracers ファイルで自分のカーネルでどのトレーサーが利用可能か確認してください。
cat /sys/kernel/debug/tracing/available_tracers
power wakeup irqsoff function sysprof sched_switch initcall nop
特定のトレーサーを使用するには、そのトレーサーを /sys/kernel/debug/tracing/current_tracer に書き込みます。たとえば、wakeup は、優先順位の最も高いタスクをタスクのウェイクアップ後にスケジュールするのにかかる最大時間を追跡・記録します。これを使用するには、以下のコマンドを実行します。
echo wakeup > /sys/kernel/debug/tracing/current_tracer
トレースを開始または停止するには、/sys/kernel/debug/tracing/tracing_on に以下のように書き込みます。
echo 1 > /sys/kernel/debug/tracing/tracing_on (追跡を有効化)
echo 0 > /sys/kernel/debug/tracing/tracing_on (追跡を無効化)
追跡結果は以下のファイルで確認できます。
/sys/kernel/debug/tracing/trace
このファイルには、ヒューマンリーダブルな追跡出力が含まれています。
/sys/kernel/debug/tracing/trace_pipe
このファイルには /sys/kernel/debug/tracing/trace と同じ出力が含まれていますが、これはコマンドにパイプ処理されることになっています。/sys/kernel/debug/tracing/trace とは異なり、このファイルからの読み取りは出力を消費します。