Linux でカーネル ftrace が有効かどうかを確認する方法

LinuxLinuxBeginner
今すぐ練習

💡 このチュートリアルは英語版からAIによって翻訳されています。原文を確認するには、 ここをクリックしてください

はじめに

この実験では、Linux カーネルの強力なトレーシングユーティリティである ftrace がシステム上で有効かつアクセス可能かどうかを判断する方法を探ります。まず、ftrace との主要なインターフェースとして機能する /sys/kernel/debug/tracing ディレクトリを調べます。

最初のチェックの後、trace-cmd ツールを使用して ftrace の機能をさらに検証し、利用可能なトレーシングオプションを一覧表示します。最後に、ftrace の設定をより深く理解するために、/proc/sys/kernel ファイルシステム内の関連する設定パラメータを調べます。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL linux(("Linux")) -.-> linux/BasicSystemCommandsGroup(["Basic System Commands"]) linux(("Linux")) -.-> linux/BasicFileOperationsGroup(["Basic File Operations"]) linux(("Linux")) -.-> linux/SystemInformationandMonitoringGroup(["System Information and Monitoring"]) linux/BasicSystemCommandsGroup -.-> linux/echo("Text Display") linux/BasicFileOperationsGroup -.-> linux/ls("Content Listing") linux/BasicFileOperationsGroup -.-> linux/cat("File Concatenating") linux/SystemInformationandMonitoringGroup -.-> linux/ps("Process Displaying") subgraph Lab Skills linux/echo -.-> lab-558792{{"Linux でカーネル ftrace が有効かどうかを確認する方法"}} linux/ls -.-> lab-558792{{"Linux でカーネル ftrace が有効かどうかを確認する方法"}} linux/cat -.-> lab-558792{{"Linux でカーネル ftrace が有効かどうかを確認する方法"}} linux/ps -.-> lab-558792{{"Linux でカーネル ftrace が有効かどうかを確認する方法"}} end

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 に利用可能なイベントを一覧表示するよう指示します。このコマンドは、サブシステム(例:schedsyscallsext4)で分類された長いイベントのリストを生成します。出力は次のようになります(一部のみ表示)。

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 インフラストラクチャが存在し、さらなる操作が可能であることが視覚的に確認できました。