第 34 章 使用 ftrace 进行追踪延迟
ftrace 程序是 RHEL for Real Time 内核提供的诊断工具之一。开发人员可使用 ftrace 来分析和调试用户空间之外出现的延迟和性能问题。ftrace 实用程序有多种选项,可让您以多种不同方式使用 实用程序。它可用于跟踪上下文切换、测量高优先级任务所需时间、禁用时间中断或者列出给定期间执行的所有内核功能。
一些 ftrace tracer(如功能 tracer)可能会产生超过大量数据,这会将 trace 日志分析转化为耗时的任务。但是,您可以指示 tracer 仅在应用程序到达关键代码路径时开始和结束。
先决条件
- 管理员特权。
34.1. 使用 ftrace 程序跟踪延迟 复制链接链接已复制到粘贴板!
您可以使用 ftrace 程序跟踪延迟。
流程
查看系统中可用的 tracer。
# cat /sys/kernel/debug/tracing/available_tracers function_graph wakeup_rt wakeup preemptirqsoff preemptoff irqsoff function nopftrace的用户界面是debugfs中的一系列文件。ftrace文件也位于/sys/kernel/debug/tracing/目录中。进入
/sys/kernel/debug/tracing/目录。# cd /sys/kernel/debug/tracing此目录中的文件只能由 root 用户修改,因为启用追踪可能会影响系统的性能。
要启动追踪会话:
-
从
/sys/kernel/debug/tracing/available_tracers中的可用 tracers 列表中选择要使用的 tracer。 将选择器的名称插入到
/sys/kernel/debug/tracing/current_tracer中。# echo preemptoff > /sys/kernel/debug/tracing/current_tracer注意如果您将单个 '>' 与 echo 命令搭配使用,它将覆盖文件中任何现有的值。如果要将值附加到文件中,请使用 '>>'。
-
从
function-trace 选项很有用,因为使用
wakeup_rt的追踪延迟、抢占irqsoff等等,因此会自动启用功能追踪,这可能会导致开销增加。检查是否启用了
function和function_graphtracing:# cat /sys/kernel/debug/tracing/options/function-trace 1-
值
1表示已启用函数和function_graphtracing。 -
值
0表示禁用函数和function_graphtracing。
-
值
默认情况下启用
function和function_graphtracing。要打开函数和功能_graphtracing,请回显到/sys/kernel/debug/tracing/options/function-trace文件的适当值。# echo 0 > /sys/kernel/debug/tracing/options/function-trace # echo 1 > /sys/kernel/debug/tracing/options/function-trace重要在使用
echo命令时,请确保在值和 > 字符之间放置一个空格。在 shell 提示符中,使用0>、1> 和 2>(不带空格字符)引用标准输入、标准输出和标准错误。错误地使用它们可能会导致意外的 trace 输出。通过更改
/debugfs/tracing/目录中不同文件的权限来调整 tracers 的详细信息和参数。例如:
irqsoff、emoff、preempirqsoff和wakeuptracers 持续监控延迟。当它们记录大于tracing_max_latency中记录的延迟时,会记录该延迟的追踪,并将tracing_max_latency更新为新的最大时间。这样,tracing_max_latency始终显示自上次重置以来记录的最大延迟。要重置最大延迟,在
tracing_max_latency文件中回显0:# echo 0 > /sys/kernel/debug/tracing/tracing_max_latency要只看到大于集合数量的延迟,请调用微秒内的数量:
# echo 200 > /sys/kernel/debug/tracing/tracing_max_latency当设置追踪阈值时,它会覆盖最大延迟设置。记录延迟超过阈值时,无论最大延迟如何记录它。查看 trace 文件时,仅显示最后记录的延迟。
要设置阈值,请回显上面必须记录延迟的微秒数:
# echo 200 > /sys/kernel/debug/tracing/tracing_thresh
查看 trace 日志:
# cat /sys/kernel/debug/tracing/trace要存储 trace 日志,将其复制到另一个文件中:
# cat /sys/kernel/debug/tracing/trace > /tmp/lat_trace_log查看正在追踪的功能:
# cat /sys/kernel/debug/tracing/set_ftrace_filter-
通过编辑
/sys/kernel/debug/tracing/set_ftrace_filter中的设置来过滤正在追踪的功能。如果没有在 文件中指定过滤器,则会跟踪所有功能。 要更改过滤器设置,请调用要跟踪的功能的名称。过滤器允许在搜索词的开头或结尾使用 '*' wildcard。
例如,请参阅 ftrace 示例。