简介
在这个实验中,你将探索如何确定 Linux 内核强大的跟踪工具 ftrace
是否在你的系统上启用并可访问。你将首先检查 /sys/kernel/debug/tracing
目录,该目录是与 ftrace
进行交互的主要接口。
在完成初步检查后,你将使用 trace-cmd
工具进一步验证 ftrace
的功能,并列出可用的跟踪选项。最后,你将检查 /proc/sys/kernel
文件系统中的相关配置参数,以更深入地了解 ftrace
的设置。
在这个实验中,你将探索如何确定 Linux 内核强大的跟踪工具 ftrace
是否在你的系统上启用并可访问。你将首先检查 /sys/kernel/debug/tracing
目录,该目录是与 ftrace
进行交互的主要接口。
在完成初步检查后,你将使用 trace-cmd
工具进一步验证 ftrace
的功能,并列出可用的跟踪选项。最后,你将检查 /proc/sys/kernel
文件系统中的相关配置参数,以更深入地了解 ftrace
的设置。
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
列出可用的事件。此命令将生成一个很长的事件列表,按子系统进行分类(例如,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
当前是否在内核中启用。
在终端中输入以下命令并按回车键:
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 基础设施已存在并可进行进一步交互。