linux之perf(8)annotate标注

这篇具有很好参考价值的文章主要介绍了linux之perf(8)annotate标注。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Linux之perf(8)annotate标注

Author:Onceday Date:2023年10月12日

漫漫长路,才刚刚开始…

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

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

参考文档:

  • Tutorial - Perf Wiki (kernel.org)
  • perf-annotate(1) - Linux manual page (man7.org)
1. 概述

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

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

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

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

perf annotate -i perf.data

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

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

perf annotate -i perf.data symbol_name

在这个例子中,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

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

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

perf annotate --itrace=i0nss1000000

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

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

perf annotate --itrace=e+o

在这个例子中,perf annotate将合成错误事件,并只报告溢出错误。文章来源地址https://www.toymoban.com/news/detail-722923.html

到了这里,关于linux之perf(8)annotate标注的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Linux性能分析工具perf和火焰图使用方法

    perf是linux上的性能分析工具,perf可以对event进行统计得到event的发生次数,或者对event进行采样,得到每次event发生时的相关数据(cpu、进程id、运行栈等),利用这些数据来对程序性能进行分析。 perf可以统计或采样的event有很多,如果我们要分析cpu,那么我们可以使用cpu-cycles、

    2024年01月16日
    浏览(62)
  • 【test】【linux perf】【Android simpleperf】 获取火焰图 使用示例

    https://www.brendangregg.com/flamegraphs.html (1)火焰图简介:火焰图(Flame Graph)是由Linux性能优化大师Brendan Gregg发明的,Flame Graph以一个全局的视野来看待时间分布,它从底部往顶部,列出所有可能的调用栈。其他的呈现方法,一般只能列出单一的调用栈或者非层次化的时间分布。

    2024年03月12日
    浏览(34)
  • 【ARM Coresight 系列文章 20 -- linux perf 与 ARM coresight】

    请阅读 【ARM Coresight SoC-400/SoC-600 专栏导读】

    2024年02月10日
    浏览(43)
  • Java小白的学习之路——day12

    目录 一、final 什么是final? 二、接口概述  什么是接口? 与抽象类的区别 常量接口 接口传参多态 四、内部类 什么是内部类? 成员内部类 静态内部类 局部内部类 final从字面意思来看时最终的,不可改变的含义,它可以修饰在类、方法以及变量中 值得注意的是:final修饰类

    2024年02月13日
    浏览(50)
  • 前端小白的学习之路(Vue2 四)

    提示:学习vue2的第四天,笔记记录:混入(mixins),插槽(slot),过渡与动画(transition) 目录 一、混入(mixins) 二、插槽(solt) 1.匿名插槽 2.具名插槽 三、过渡与动画(transition)  1.过渡 1)单元素过渡 Ⅰ.通用类名 Ⅱ.指定类名 2)多元素过渡  2.动画  1.自定义动画 2.使用动画库  混入(M

    2024年04月12日
    浏览(36)
  • 前端小白的学习之路(CSS3 三)

    提示:过渡属性transition,动画属性animation,转化属性transform,裁剪属性clip-path,倒影属性box-reflect,模糊度属性filter  目录 一、transition  二、animation  三、transform  四、clip-path   五、box-reflect  六、filter  过渡:以看见标签从一个属性变化到另一个属性值的过程。 transition-pro

    2024年03月19日
    浏览(43)
  • 前端小白的学习之路(ES6 一)

    提示:声明:let与const,长度单位:em与rem,vw与wh,解构赋值,箭头函数(简介) 目录 一、ES6介绍 二、letconst 1.let 1) 用 let 声明的变量不能提前引用 2) 不允许重复声明变量 3) 可以产生块级作用域 { }   总结 2.const 三、 长度单位 1.em与rem 1).em 2).rem 2.vw与vh 四、 解构赋

    2024年04月15日
    浏览(49)
  • 小白的ctf之路之文件上传浅谈

    这次开始使用upload-labs开始进行文件上传的初步练习。 首先什么是文件上传以及文件上传的漏洞。通俗点来讲,就是在一些网站中需要上传照片,文档等一些文件的操作就是文件上传。而这里也同样有着大量漏洞可以利用,总的来说就是利用服务器对上传文件的过滤不严格,

    2024年02月16日
    浏览(59)
  • 【网安小白成长之路】4.MySQL安全值守常用语句

    🐮博主syst1m 带你 acquire knowledge! ✨博客首页——syst1m的博客💘 🔞 《网安小白成长之路(我要变成大佬😎!!)》真实小白学习历程,手把手带你一起从入门到入狱🚭 😘《CTF专栏》超级详细的解析,宝宝级教学让你从蹒跚学步到健步如飞🙈 😎《大数据专栏》大数据从0到

    2024年04月12日
    浏览(35)
  • 【网安小白成长之路】2.PHP与MySQL交互

    🐮博主syst1m 带你 acquire knowledge! ✨博客首页——syst1m的博客💘 🔞 《网安小白成长之路(我要变成大佬😎!!)》真实小白学习历程,手把手带你一起从入门到入狱🚭 😘《CTF专栏》超级详细的解析,宝宝级教学让你从蹒跚学步到健步如飞🙈 😎《大数据专栏》大数据从0到

    2024年04月15日
    浏览(25)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包