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