第 34 章 使用 ftrace 进行追踪延迟


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

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

先决条件

  • 管理员特权。

34.1. 使用 ftrace 程序跟踪延迟

您可以使用 ftrace 程序跟踪延迟。

流程

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

    # cat /sys/kernel/debug/tracing/available_tracers
    function_graph wakeup_rt wakeup preemptirqsoff preemptoff irqsoff function nop

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

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

  2. 进入 /sys/kernel/debug/tracing/ 目录。

    # cd /sys/kernel/debug/tracing

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

  3. 要启动追踪会话:

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

      # echo preemptoff > /sys/kernel/debug/tracing/current_tracer
      注意

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

  4. function-trace 选项很有用,因为使用 wakeup_rt 的追踪延迟、抢占irqsoff 等等,因此会自动启用 功能追踪,这可能会导致开销增加。

    检查是否启用了 functionfunction_graph tracing:

    # cat /sys/kernel/debug/tracing/options/function-trace
    1
    • 1 表示已启用 函数function_graph tracing。
    • 0 表示禁用 函数function_graph tracing。
  5. 默认情况下启用 functionfunction_graph tracing。要打开 函数 和功能 _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
    重要

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

  6. 通过更改 /debugfs/tracing/ 目录中不同文件的权限来调整 tracers 的详细信息和参数。

    例如:

    irqsoff、emoffpreempirqsoffwakeup tracers 持续监控延迟。当它们记录大于 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
  7. 查看 trace 日志:

    # cat /sys/kernel/debug/tracing/trace
  8. 要存储 trace 日志,将其复制到另一个文件中:

    # cat /sys/kernel/debug/tracing/trace > /tmp/lat_trace_log
  9. 查看正在追踪的功能:

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

    例如,请参阅 ftrace 示例

Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

Theme

© 2026 Red Hat
返回顶部