第 29 章 使用 ftrace 追踪延迟


ftrace 工具是 RHEL for Real Time 内核提供的诊断工具之一。ftrace 可以被开发人员用来分析和调试用户空间外发生的延迟和性能问题。ftrace 工具具有各种选项,允许您以不同的方式使用实用程序。它可用于跟踪上下文切换,测量高优先级任务启动所需的时间、中断的长度被禁用,或者列出给定期间执行的所有内核功能。

一些 ftrace tracers (如功能 tracer)可能会导致大量数据生成,这可能会将 trace 日志分析转换为耗时的任务。但是,您可以指示 tracer 仅在应用程序到达关键代码路径时开始和结束。

先决条件

  • 有管理员特权。

29.1. 使用 ftrace 工具来跟踪延迟

您可以使用 ftrace 工具跟踪延迟。

流程

  1. 查看系统上可用的 tracer。

    # cat /sys/kernel/debug/tracing/available_tracers
    function_graph wakeup_rt wakeup preemptirqsoff preemptoff irqsoff function nop
    Copy to Clipboard Toggle word wrap

    ftrace 的用户界面是 debugfs 中的一系列文件。

    ftrace 文件也位于 /sys/kernel/debug/tracing/ 目录中。

  2. 移到 /sys/kernel/debug/tracing/ 目录。

    # cd /sys/kernel/debug/tracing
    Copy to Clipboard Toggle word wrap

    此目录中的文件只能由 root 用户修改,因为启用追踪可能会影响系统性能。

  3. 启动追踪会话:

    1. /sys/kernel/debug/tracing/available_tracers 中的可用 tracer 列表中选择要使用的 tracer。
    2. 将选择器的名称插入到 /sys/kernel/debug/tracing/current_tracer 中。

      # echo preemptoff > /sys/kernel/debug/tracing/current_tracer
      Copy to Clipboard Toggle word wrap
      注意

      如果您将单个 '>' 与 echo 命令搭配使用,它将覆盖文件中的任何现有值。如果要将值附加到文件,请使用 '>>'。

  4. function-trace 选项很有用,因为使用 wakeup_rtpreemptirqsoff 的追踪延迟,因此自动启用 函数追踪 (这可能会增加开销)。

    检查是否启用了 functionfunction_graph tracing:

    # cat /sys/kernel/debug/tracing/options/function-trace
    1
    Copy to Clipboard Toggle word wrap
    • 1 表示启用了 functionfunction_graph tracing。
    • 0 表示禁用 functionfunction_graph tracing。
  5. 默认情况下启用 functionfunction_graph tracing。要打开或关闭函数和 function _graph tracing,请将适当的值传给 /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
    Copy to Clipboard Toggle word wrap
    重要

    使用 echo 命令时,请确保在值和 > 字符之间放置一个空格字符。 在 shell 提示符下,使用 0& gt ;、1 & gt; 和 2> (没有空格字符)指的是标准输入、标准输出和标准错误。错误地使用它们可能会导致意外的追踪输出。

  6. 通过更改 /debugfs/tracing/ 目录中各种文件的值来调整 tracer 的详细信息和参数。

    例如:

    irqsoffpreemptoffpreempirqsoffwakeup tracer 持续监控延迟。当它们记录大于 tracing_max_latency 中记录的延迟时,会记录该延迟的 trace,tracing_max_latency 会更新为新的最长时间。这样,trace _max_latency 始终显示记录最高的延迟,因为它是上次重置的。

    • 要重置最大延迟,请在 tracing_max_latency 文件中回显 0

      # echo 0 > /sys/kernel/debug/tracing/tracing_max_latency
      Copy to Clipboard Toggle word wrap
    • 要查看大于集合数量的延迟,以微秒为单位回显量:

      # echo 200 > /sys/kernel/debug/tracing/tracing_max_latency
      Copy to Clipboard Toggle word wrap

      当设置追踪阈值时,它会覆盖最大延迟设置。当记录大于阈值的延迟时,无论最大延迟是什么,都会记录它。查看 trace 文件时,只会显示最后记录的延迟。

    • 要设置阈值,请回显必须记录延迟的微秒数:

      # echo 200 > /sys/kernel/debug/tracing/tracing_thresh
      Copy to Clipboard Toggle word wrap
  7. 查看追踪日志:

    # cat /sys/kernel/debug/tracing/trace
    Copy to Clipboard Toggle word wrap
  8. 要存储 trace 日志,请将它们复制到另一个文件中:

    # cat /sys/kernel/debug/tracing/trace > /tmp/lat_trace_log
    Copy to Clipboard Toggle word wrap
  9. 查看要追踪的功能:

    # cat /sys/kernel/debug/tracing/set_ftrace_filter
    Copy to Clipboard Toggle word wrap
  10. 通过编辑 /sys/kernel/debug/tracing/set_ftrace_filter 中的设置来过滤要追踪的功能。如果在文件中没有指定过滤器,则会跟踪所有功能。
  11. 要更改过滤器设置,请回显要追踪的功能的名称。过滤器允许在搜索词的开头或结尾使用 '*' 通配符。

    例如,请参阅 ftrace 示例

Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2026 Red Hat
返回顶部