• linux之perf(8)annotate标注


    Linux之perf(8)annotate标注

    Author:Onceday Date:2023年10月12日

    漫漫长路,才刚刚开始…

    全系列文章请查看专栏: Perf性能分析_Once_day的博客-CSDN博客

    注:该文档内容采用了GPT4.0生成的回答,部分文本准确率可能存在问题

    参考文档:

    1. 概述

    perf-annotate命令用于读取perf.data文件(由perf record命令创建)并显示注释后的代码。

    该命令读取输入文件并显示注释后的代码版本。如果目标文件具有调试符号,则源代码将与汇编代码一起显示。

    如果对象中没有调试信息,则会显示注释后的汇编。

    假设你已经使用perf record命令创建了一个perf.data文件,你可以使用perf annotate命令来查看注释的代码:

    perf annotate -i perf.data
    
    • 1

    在这个例子中,perf annotate将从perf.data文件中读取数据,然后显示注释后的代码。

    如果你想查看特定符号的注释代码,你可以在命令后面添加符号名。

    perf annotate -i perf.data symbol_name
    
    • 1

    在这个例子中,perf annotate将只显示与symbol_name符号相关的注释代码。

    标注汇编指令和源码等功能需要可执行文件携带符号,以及当前环境下存在可执行的obidump/addr2line等工具文件

    2.选项描述
    2.1 选项概览
    选项描述
    -i, --input=[file]输入文件名。(默认为:perf.data,除非标准输入是一个管道)
    -d, --dsos=[dso[,dso…]]只考虑这些动态共享对象(DSOs)中的符号
    -s, --symbol=[symbol]要注释的符号
    -f, --force不进行所有权验证
    -v, --verbose更详细地显示信息(示例如符号地址等)
    -q, --quiet不显示任何警告或消息(抑制-v)
    -n, --show-nr-samples显示每个符号的样本数量
    -D, --dump-raw-trace以ASCII格式转储原始跟踪
    -k, --vmlinux=[file]vmlinux文件的路径
    –ignore-vmlinux忽略vmlinux文件
    –itrace用于解码指令跟踪数据的选项
    -m, --modules加载模块符号。警告:仅与-k和LIVE内核一起使用
    -l, --print-line打印匹配的源代码行(可能比较慢)
    -P, --full-paths不缩短显示的路径名
    –stdio使用stdio接口
    –stdio2使用非交互的stdio2接口,使用TUI格式
    –stdio-color=[mode]始终,从不或自动,允许通过命令行配置颜色输出,除了通过"color.ui" .perfconfig。使用–stdio-color always即使在重定向到管道或文件时也生成颜色。仅使用–stdio-color等同于使用always.
    –tui使用TUI接口。使用–tui需要tty,如果没有,如当管道到其他命令时,将使用stdio接口。此接口从居中的行开始,TAB/UNTAB在更多样本的行中循环。
    –gtk使用GTK接口
    -C, --cpu=[cpu]只报告提供的CPU列表的样本。可以提供多个CPU,作为没有空格的逗号分隔列表:0,1。CPU范围用-指定:0-2。默认报告所有CPU上的样本
    –asm-raw显示汇编指令的原始指令编码
    –show-total-period显示总周期数的列
    –source将源代码与汇编代码交错。默认启用,使用–no-source禁用
    –symfs=[directory]查找相对于此目录的带有符号的文件
    -M, --disassembler-style=为objdump设置反汇编样式
    –addr2line=[path]addr2line二进制文件的路径
    –objdump=[path]objdump二进制文件的路径
    –prefix=PREFIX, --prefix-strip=N从可执行文件中的源文件路径名中删除前N个条目并添加PREFIX。这允许显示在具有不同文件系统布局的系统上编译的源代码
    –skip-missing跳过无法注释的符号
    –group一起显示事件组信息
    –demangle将符号名称解析为人类可读形式。默认启用,使用–no-demangle禁用
    –demangle-kernel将内核符号名称解析为人类可读形式(用于C++内核)
    –percent-type从以下选择中设置注释百分比类型:global-period, local-period, global-hits, local-hits.local/global关键字设置百分比是否在函数范围(本地)或整个数据(全局)中计算。period/hits关键字设置百分比计算的基础 - 样本期间或样本数量(命中)。
    –percent-limit在stdio或stdio2上不显示功能,这些功能的开销在该百分比以下(默认:0)。注意,这是关于要显示的函数的选择,而不是函数内的行
    2.2 解码指令跟踪数据

    --itrace:用于解码指令跟踪数据的选项,包括:

    • i:合成指令事件
    • y:合成周期事件
    • b:合成分支事件(对于Arm SPE,为分支未命中)
    • c:合成分支事件(仅调用)
    • r:合成分支事件(仅返回)
    • x:合成事务事件
    • w:合成ptwrite事件
    • p:合成功耗事件(包括Intel PT的PSB事件)
    • o:合成由于使用aux-output而记录的其他事件(参见perf record)
    • I:合成中断或类似的(异步)事件(例如,Intel PT事件跟踪)
    • e:合成错误事件
    • d:创建调试日志
    • f:合成一级缓存事件
    • m:合成最后一级缓存事件
    • M:合成内存事件
    • t:合成TLB事件
    • a:合成远程访问事件
    • g:合成调用链(与i或x一起使用)
    • G:在现有事件记录上合成调用链
    • l:合成最后一次分支条目(与i或x一起使用)
    • L:在现有事件记录上合成最后一次分支条目
    • s:跳过初始数量的事件
    • q:更快(较少详细)的解码
    • A:近似IPC
    • Z:首选忽略时间戳(所谓的“无时间”解码)

    默认情况下,所有事件都是默认的,即与--itrace=iybxwpe相同,但对于perf script,默认为--itrace=ce

    可以指定指令事件的周期(默认为100000,对于perf script默认为1),可以使用以下单位:

    • i:指令
    • t:ticks
    • ms:毫秒
    • us:微秒
    • ns:纳秒(默认)

    可以指定指令或事务事件的调用链大小(默认为16,最大为1024)。也可以指定指令或事务事件的最后分支条目数量(默认为64,最大为1024)。

    对于选项G和L,也可以指定大小,类似于选项g和l。在x86上,请注意,当数据已经用大PEBS记录时,G和L的工作效果较差。详细信息请参见linkperf:perf-intel-pt[1]手册页。

    也可以跳过一开始生成的事件(指令,分支,事务,ptwrite,功耗。这对于忽略初始化代码很有用。--itrace=i0nss1000000跳过第一百万条指令。

    ‘e’选项可以跟随影响将或将不会报告什么错误的标志。每个标志必须以’+‘或’-'为前缀。标志包括:

    • o:溢出
    • l:丢失跟踪数据

    如果支持,‘d’选项可能会跟随影响将或将不会记录什么调试信息的标志。每个标志必须以’+‘或’-'为前缀。标志包括:

    • a:所有perf事件
    • e:仅在错误时输出(大小可配置 - 请参见linkperf:perf-config[1])
    • o:输出到stdout

    如果支持,'q’选项可以重复以增加效果。要完全禁用解码,请使用--no-itrace

    使用perf annotate指定指令事件的周期:

    perf annotate --itrace=i10000
    
    • 1

    这个命令将设置指令事件的周期为10000。

    如果你想跳过初始化代码,你可以使用如下命令:

    perf annotate --itrace=i0nss1000000
    
    • 1

    这个命令将跳过开始的一百万条指令。

    使用perf annotate来合成错误事件,并只报告溢出错误:

    perf annotate --itrace=e+o
    
    • 1

    在这个例子中,perf annotate将合成错误事件,并只报告溢出错误。

  • 相关阅读:
    【微信小程序】WXSS模板样式
    架构师进阶,微服务设计与治理的16条常用原则
    操作系统知识点总结——第四章文件管理
    2023年汉字小达人市级比赛题型示例和全真在线练习题
    在不损失质量的情况下减小PDF 文件大小的 6 种方法
    Ubuntu安装AndroidStudio
    正则表达式
    Unity-自定义事件派发器的两次尝试
    Java面经丨后端3年经验社招面试题目分享(参考答案)
    ICPC铜牌算法
  • 原文地址:https://blog.csdn.net/Once_day/article/details/133936800