はじめに
この実験では、Linux カーネルの強力なトレーシングユーティリティである ftrace がシステム上で有効かつアクセス可能かどうかを判断する方法を探ります。まず、ftrace との主要なインターフェースとして機能する /sys/kernel/debug/tracing ディレクトリを調べます。
最初のチェックの後、trace-cmd ツールを使用して ftrace の機能をさらに検証し、利用可能なトレーシングオプションを一覧表示します。最後に、ftrace の設定をより深く理解するために、/proc/sys/kernel ファイルシステム内の関連する設定パラメータを調べます。
ls /sys/kernel/debug/tracing で ftrace の状態を確認する
このステップでは、Linux カーネルに組み込まれた強力なトレーシングユーティリティである ftrace の探索を始めます。ftrace を使用すると、開発者やシステム管理者はカーネルのランタイム動作を理解することができます。
ftrace とやり取りするための主要なインターフェースは、デバッグファイルシステムを通じて行われ、具体的には /sys/kernel/debug/tracing に位置しています。
まず、デバッグファイルシステムがマウントされているか、および tracing ディレクトリが存在するかを確認しましょう。このディレクトリの内容を一覧表示するには、ls コマンドを使用できます。
ターミナルに以下のコマンドを入力し、Enter キーを押してください。
ls /sys/kernel/debug/tracing
ftrace に関連するファイルとディレクトリの一覧が表示されるはずです。正確な出力はカーネルのバージョンと設定によって異なりますが、次のような内容になります。
README events options
available_events free_buffer per_cpu
available_filter_functions function_graph_max_depth printk_formats
available_tracers function_graph_tracer set_event
buffer_size_kb function_profile_dynamic set_filter
buffer_total_size_kb function_trace set_ftrace_filter
current_tracer instances set_ftrace_notrace
dynamic_filter kprobe_events set_graph_function
enabled kprobe_profile set_graph_notrace
error_log max_graph_depth set_tracer
event_sources options snapshot
tracing_cpumask tracing_max_latency tracing_on
tracing_thresh trace trace_clock
trace_marker trace_options trace_pipe
trace_stat
これと同様の出力が表示された場合、システム上で ftrace インターフェースが利用可能であることを意味します。「No such file or directory」のようなエラーが表示された場合は、デバッグファイルシステムがマウントされていないか、カーネルで ftrace が有効になっていないことを示している可能性があります。ただし、LabEx 環境では利用可能であるはずです。
このディレクトリには、ftrace の動作を制御し、トレーシングデータを提供する様々なファイルが含まれています。後のステップでこれらのファイルの一部を探索します。
現時点では、このディレクトリとその内容の存在を確認するだけで、ftrace とやり取りできることが確認できます。
続ける をクリックして次のステップに進んでください。
trace-cmd list で ftrace を確認する
前のステップで、デバッグファイルシステムに ftrace インターフェースが存在することを確認しました。次に、ftrace とやり取りするために trace-cmd というコマンドラインツールを使用しましょう。trace-cmd はユーザー空間のユーティリティで、ftrace の設定とデータ収集のプロセスを簡素化します。
trace-cmd の有用な機能の 1 つは、利用可能なトレーシングイベントとトレーサーを一覧表示することです。これにより、ftrace で監視できる内容を理解することができます。
まず、trace-cmd list を使用して利用可能なトレーサーを確認しましょう。トレーサーは ftrace の異なる動作モードで、カーネルのさまざまな側面をトレースすることができます。
ターミナルに以下のコマンドを入力し、Enter キーを押してください。
trace-cmd list -t
-t オプションは trace-cmd に利用可能なトレーサーを一覧表示するよう指示します。次のような出力が表示されるはずです。
List of available tracers:
blk
function
function_graph
irqsoff
nop
preemptirqsoff
wakeup
wakeup_rt
この出力は、このシステムで利用可能な異なるトレーサーを示しています。たとえば、function は関数呼び出しをトレースし、function_graph は関数呼び出しとその呼び出しグラフをトレースします。
次に、トレース可能な利用可能なイベントを一覧表示しましょう。イベントは、カーネル内の特定のポイントで、トレーシング情報を収集することができます。
以下のコマンドを入力し、Enter キーを押してください。
trace-cmd list -e
-e オプションは trace-cmd に利用可能なイベントを一覧表示するよう指示します。このコマンドは、サブシステム(例:sched、syscalls、ext4)で分類された長いイベントのリストを生成します。出力は次のようになります(一部のみ表示)。
List of available events:
ftrace:
ftrace_buffer_overrun
ftrace_inject_event
ftrace_print_event
kmem:
kmem_cache_alloc
kmem_cache_alloc_node
kmem_cache_free
kmem_cache_free_page
kmem_cache_free_pages
kmem_cache_grow
kmem_cache_shrink
mm_page_alloc
mm_page_alloc_zone_locked
mm_page_free
mm_page_free_batched
mm_page_pcpu_drain
... (many more events)
出力をスクロールすると、トレース可能な膨大な数のイベントを確認できます。これは、ftrace がカーネルの動作に対して提供する詳細な可視性を示しています。
trace-cmd list を使用することで、特定のシステムで ftrace が監視できる内容の概要を把握することができます。
続ける をクリックして次に進んでください。
/proc/sys/kernel 内の ftrace 設定を確認する
/sys/kernel/debug/tracing のデバッグファイルシステムインターフェースに加えて、一部の ftrace 関連設定は /proc/sys/kernel ディレクトリにも存在します。/proc ファイルシステムは、プロセスに関する情報やその他のシステム情報を提供する仮想ファイルシステムです。/proc/sys ディレクトリには、ランタイムでカーネルパラメータを表示および変更できるファイルが含まれています。
/proc/sys/kernel 内の ftrace に関連するいくつかのファイルを確認しましょう。これらのファイルの内容を表示するには、cat コマンドを使用できます。
まず、ftrace_enabled ファイルを確認しましょう。このファイルは、カーネルで ftrace が現在有効になっているかどうかを示します。
ターミナルに以下のコマンドを入力し、Enter キーを押してください。
cat /proc/sys/kernel/ftrace_enabled
次のような出力が表示されるはずです。
1
値が 1 の場合は ftrace が有効で、0 の場合は無効です。
次に、ftrace_dump_on_oops ファイルを見てみましょう。このファイルは、カーネルオープス(カーネルエラー)が発生したときに ftrace バッファをコンソールにダンプするかどうかを制御します。
以下のコマンドを入力し、Enter キーを押してください。
cat /proc/sys/kernel/ftrace_dump_on_oops
出力はおそらく次のようになります。
1
値が 1 の場合は、カーネルオープス時に ftrace バッファがダンプされ、デバッグに役立ちます。
最後に、ftrace_filter_notrace_regex ファイルを確認しましょう。このファイルには、関数トレーシングを使用する際にトレースしない関数をフィルタリングするために使用できる正規表現が含まれています。
以下のコマンドを入力し、Enter キーを押してください。
cat /proc/sys/kernel/ftrace_filter_notrace_regex
出力は、システムの設定に応じて空または正規表現が含まれている場合があります。
/proc/sys/kernel 内のこれらのファイルは、いくつかのグローバルな ftrace 設定を垣間見ることができます。ほとんどの詳細な設定とデータアクセスは /sys/kernel/debug/tracing を通じて行われますが、これらのファイルは ftrace の全体的な状態といくつかの基本的な動作をすばやく確認する方法を提供します。
これで、ftrace とやり取りするための主要なインターフェースであるデバッグファイルシステムと /proc/sys/kernel ディレクトリを探索しました。
続ける をクリックしてこの実験を完了してください。
まとめ
この実験では、Linux システムでカーネルの ftrace ユーティリティが有効かつアクセス可能かどうかを確認する方法を学びました。まず、/sys/kernel/debug/tracing のデバッグファイルシステム内にある主要な ftrace インターフェースを探索しました。ls コマンドを使用してこのディレクトリの内容を一覧表示することで、ftrace 関連のファイルとディレクトリが存在することを確認し、ftrace インターフェースが利用可能であることを検証しました。
この最初のステップで、ftrace を使用するための基本的な要件を確認しました。つまり、デバッグファイルシステムがマウントされ、トレーシングディレクトリが存在している必要があります。ls /sys/kernel/debug/tracing の出力にさまざまな ftrace 設定および制御ファイルが表示されることで、ftrace インフラストラクチャが存在し、さらなる操作が可能であることが視覚的に確認できました。



