如何检查 Linux 内核 ftrace 是否启用

LinuxLinuxBeginner
立即练习

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

简介

在这个实验中,你将探索如何确定 Linux 内核强大的跟踪工具 ftrace 是否在你的系统上启用并可访问。你将首先检查 /sys/kernel/debug/tracing 目录,该目录是与 ftrace 进行交互的主要接口。

在完成初步检查后,你将使用 trace-cmd 工具进一步验证 ftrace 的功能,并列出可用的跟踪选项。最后,你将检查 /proc/sys/kernel 文件系统中的相关配置参数,以更深入地了解 ftrace 的设置。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL linux(("Linux")) -.-> linux/SystemInformationandMonitoringGroup(["System Information and Monitoring"]) linux(("Linux")) -.-> linux/BasicSystemCommandsGroup(["Basic System Commands"]) linux(("Linux")) -.-> linux/BasicFileOperationsGroup(["Basic File Operations"]) 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 状态

在这一步中,你将开始探索 ftrace,它是 Linux 内核内置的一个强大的跟踪工具。ftrace 能让开发者和系统管理员了解内核的运行时行为。

ftrace 交互的主要接口是通过调试文件系统,具体位于 /sys/kernel/debug/tracing

首先,你要检查调试文件系统是否已挂载,以及 tracing 目录是否存在。你可以使用 ls 命令列出该目录的内容。

在终端中输入以下命令并按回车键:

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 接口。现在,你将使用一个名为 trace-cmd 的命令行工具与 ftrace 进行交互。trace-cmd 是一个用户空间实用工具,它简化了配置 ftrace 并从中收集数据的过程。

trace-cmd 的一个实用功能是列出可用的跟踪事件和跟踪器。这有助于你了解可以使用 ftrace 监控哪些内容。

你可以使用 trace-cmd list 来查看可用的跟踪器。跟踪器是 ftrace 的不同操作模式,允许你跟踪内核的不同方面。

在终端中输入以下命令并按回车键:

trace-cmd list -t

-t 选项告诉 trace-cmd 列出可用的跟踪器。你应该会看到类似以下的输出:

List of available tracers:
 blk
 function
 function_graph
 irqsoff
 nop
 preemptirqsoff
 wakeup
 wakeup_rt

此输出显示了该系统上可用的不同跟踪器。例如,function 跟踪函数调用,而 function_graph 跟踪函数调用及其调用图。

接下来,你可以列出可跟踪的可用事件。事件是内核中可以收集跟踪信息的特定点。

输入以下命令并按回车键:

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 当前是否在内核中启用。

在终端中输入以下命令并按回车键:

cat /proc/sys/kernel/ftrace_enabled

你应该会看到如下输出:

1

值为 1 表示 ftrace 已启用,值为 0 表示已禁用。

接下来,你可以查看 ftrace_dump_on_oops 文件。这个文件控制当内核出现 oops(内核错误)时,ftrace 缓冲区是否会转储到控制台。

输入以下命令并按回车键:

cat /proc/sys/kernel/ftrace_dump_on_oops

输出可能如下:

1

值为 1 表示在内核出现 oops 时会转储 ftrace 缓冲区,这有助于调试。

最后,你可以检查 ftrace_filter_notrace_regex 文件。这个文件包含一个正则表达式,用于在使用函数跟踪时过滤哪些函数 被跟踪。

输入以下命令并按回车键:

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 基础设施已存在并可进行进一步交互。