linux之perf(8)annotate标注
Linux之perf(8)annotate标注
Author:Onceday Date:2023年10月12日
漫漫长路,才刚刚开始…
注:该文档内容采用了GPT4.0生成的回答,部分文本准确率可能存在问题。
参考文档:
- Tutorial - Perf Wiki (kernel.org)
- perf-annotate(1) - Linux manual page (man7.org)
文章目录
- Linux之perf(8)annotate标注
- 1. 概述
- 2.选项描述
- 2.1 选项概览
- 2.2 解码指令跟踪数据
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
:近似IPCZ
:首选忽略时间戳(所谓的“无时间”解码)
默认情况下,所有事件都是默认的,即与--itrace=iybxwpe
相同,但对于perf script
,默认为--itrace=ce
。
可以指定指令事件的周期(默认为100000,对于perf script
默认为1),可以使用以下单位:
i
:指令t
:ticksms
:毫秒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
将合成错误事件,并只报告溢出错误。
相关文章:

linux之perf(8)annotate标注
Linux之perf(8)annotate标注 Author:Onceday Date:2023年10月12日 漫漫长路,才刚刚开始… 注:该文档内容采用了GPT4.0生成的回答,部分文本准确率可能存在问题。 参考文档: Tutorial - Perf Wiki (kernel.org)perf…...

【广州华锐互动】VR建筑安全培训体验为建筑行业人才培养提供有力支持
随着建筑行业的快速发展,建筑施工安全问题日益受到广泛关注。然而,传统的安全培训方式往往缺乏实践性和真实性,难以让员工真正掌握安全操作技能。近年来,虚拟现实(VR)技术的广泛应用为建筑施工安全培训提供了新的机遇。 虚拟现实技…...

【Javascript保姆级教程】运算符
文章目录 前言一、运算符是什么二、赋值运算符2.1 如何使用赋值运算符2.2 示例代码12.3 示例代码2 三、自增运算符3.1 运算符3.2 示例代码13.3 示例代码2 四、比较运算符4.1 常见的运算符4.2 如何使用4.3 示例代码14.4 示例代码2 五、逻辑运算符逻辑运算符列举 六、运算符优先级…...

图论与网络优化
2.概念与计算 2.1 图的定义 2.1.1 定义 图(graph) G G G 是一个有序的三元组,记作 G < V ( G ) , E ( G ) , ψ ( G ) > G<V(G),E(G),\psi (G)> G<V(G),E(G),ψ(G)>。 V ( G ) V(G) V(G) 是顶点集。 E ( G ) E(G) E(G) 是边集。 ψ ( G ) \…...

【论文复现】基于多模态深度学习方法的单细胞多组学数据聚类(【生物信息学】实验二:多组学数据融合:scMDC)
目录 一、实验介绍 1. 论文:基于多模态深度学习方法的单细胞多组学数据聚类 Abstract 2. Github链接 二、实验环境 0. 作者要求 1. 环境复现 实验一 实验二(本实验) 2. 库版本介绍 实验一 实验二 3. IDE 三、实验内容 1. 用法…...

mysql按指定字符截取
1、使用SUBSTRING函数进行截取 语法:str是要截取的字符串,pos是起始位置,len是要截取的长度 SUBSTRING(str, pos, len)例子 SELECT SUBSTRING(Hello, World!, 1, 5);返回"Hello"。其中,起始位置为1,截取的…...

搜索引擎-在URL地址栏输入信息,不跳转
在URL地址栏输入信息,不跳转 原因解决待续 原因 因为没有使用某个搜索引擎,无法定位到资源 解决 先打开百度或搜狗其他引擎,在输入内容,跳转成功 待续 ————————————————————— 以上就是今日博客的全部内容…...

10种新型网络安全威胁和攻击手法
2023年,网络威胁领域呈现出一些新的发展趋势,攻击类型趋于多样化,例如:从MOVEit攻击可以看出勒索攻击者开始抛弃基于加密的勒索软件,转向窃取数据进行勒索;同时,攻击者们还减少了对传统恶意软件…...

Elasticsearch:painless script 语法基础和实战
摘要:Elasticsearch,Java script的作用 script是Elasticsearch的拓展功能,通过定制的表达式实现已经预设好的API无法完成的个性化需求,比如完成以下操作 字段再加工/统计输出字段之间逻辑运算定义查询得分的计算公式定义特殊过…...

《数据结构、算法与应用C++语言描述》使用C++语言实现数组双端队列
《数据结构、算法与应用C语言描述》使用C语言实现数组双端队列 定义 队列的定义 队列(queue)是一个线性表,其插入和删除操作分别在表的不同端进行。插入元素的那一端称为队尾(back或rear),删除元素的那一…...

TikTok Shop新结算政策:卖家选择权加强,电商市场蓄势待发
据悉,从2023年11月1日开始,TikTok Shop将根据卖家的店铺表现来应用3种不同类型的结算期,其中,标准结算期:资金交收期为8个日历日;快速结算期:资金交收期为3个日历日;延长结算期&…...

asp.net特色商品购物网站系统VS开发sqlserver数据库web结构c#编程Microsoft Visual Studio
一、源码特点 asp.net特色商品购物网站系统 是一套完善的web设计管理系统,系统采用mvc模式(BLLDALENTITY)系统具有完整的源代码和数据库,系统主要采用B/S模式开发。开发环境为 vs2010,数据库为sqlserver2008&a…...

解决一则诡异的javascript函数不执行的问题
有个vue 音乐播放器项目,由于之前腾讯的搜索接口没法用了,于是改成了别家的搜索接口。 但是由于返回数据结构不一样,代码重构的工作量还是挺大的:包括数据请求,数据处理,dom渲染,处理逻辑都进行…...

汽车安全的未来:毫米波雷达在碰撞避免系统中的角色
随着科技的飞速发展,汽车安全系统变得愈加智能化,而毫米波雷达技术正是这一领域的亮点之一。本文将深入探讨毫米波雷达在汽车碰撞避免系统中的关键角色,以及其对未来汽车安全的影响。 随着城市交通的拥堵和驾驶环境的变化,汽车安全…...

体感互动游戏研发虚拟场景3D漫游
体感互动游戏是一种结合虚拟现实(VR)或增强现实(AR)技术的游戏,允许玩家以身体动作和姿势来与游戏互动。这种类型的游戏通常需要特殊的硬件设备,例如体感控制器、摄像头或传感器,以捕捉玩家的动…...

微信小程序获取手机号(2023年10月 python版)[无需订阅]
技术栈: 1. 微信开发者工具中的调试基础库版本:3.1.2。 2. 后台:django。 步骤: 1. 首先在后台django项目的定时任务中增加一个下载access_token函数,并把得到的access_token保存在数据库中(其实随便哪里…...

Linux下设置网关以及网络相关命令
一、临时设置网关 查看当前路由表:route -n设置网关:route add default gw <路由器的网关IP> 注意:系统重启时,这些更改将不生效 二、永久设置网关 列出可用网络连接:nmcli connection show设置网关&#x…...

linux三剑客~sed命令的使用
1.工作原理: sed是一种流编辑器,它是文本处理中非常有用的工具 能够完美的配合正则表达式使用,处理时,把当前处理的行存储在临时缓冲区中,称为模式空间,接着用sed命令处理缓冲区中的内容 处理完成后&…...

virtualBox虚拟机安装多个+主机访问虚拟机+虚拟机访问外网配置
目的:本机安装3个虚拟机 一、虚拟机安装:Oracle VM VirtualBox (https://www.virtualbox.org/)源代码可下载,且免费使用 1、https://www.virtualbox.org/ 进入网站中Download 模块选择与自己电脑系统相应的下载包下载即可 如果安装过程报错如…...

正点原子嵌入式linux驱动开发——Linux按键输入
在前几篇笔记之中都是使用的GPIO输出功能,还没有用过GPIO输入功能,本章就来学习一下如果在Linux下编写GPIO输入驱动程序。正点原子STM32MP1开发板上有三个按键,就使用这些按键来完成GPIO输入驱动程序,同时利用原子操作来对按键值进…...

java--强制类型转换
类型范围大的数据或者变量,直接赋值给小范围的变量,会报错 1.强制类型转换 强行将类型范围大的变量、数据赋值给类型范围小的变量 2.强制类型转换在计算机中的执行原理 解释说明1:a是int类型有8个字节32位,然后在执行下一行代码…...

java后端调用接口Basic auth认证
该方法接收一个JSON字符串参数phoneNum 内容: {"phone":"13712312312"} 然后解析参数中的手机号,作为data去调用URL接口,接收接口返回的复合JSON并解析,拿到想要的数据public String queryUserResumeURLIn…...

App爬虫之强大的Airtest的操作总结
App爬虫之强大的Airtest的操作总结 App爬虫之强大的Airtest的操作总结 # Python使用该框架需要安装的依赖库 pip install airtest pip install poco pip install pocouifrom airtest.core.api import * from airtest.cli.parser import cli_setup from poco.drivers.android.…...
MODBUS-TCP转MODBUS-RTU通信应用(S7-1200和串口服务器通信)
在学习本博客之前,大家需要熟悉MODBUS-TCP和MODBUS-RTU通信,这2个通信的编程应用,大家可以查看下面文章链接: MODBUS-RTU通信 MODBUS-RTU通信协议功能码+数据帧解读(博途PLC梯形图代码)-CSDN博客MODBUS通信详细代码编写,请查看下面相关链接,这篇博客主要和大家介绍MODB…...

开源贡献难吗?
本文整理自字节跳动 Flink SQL 技术负责人李本超在 CommunityOverCode Asia 2023 上的 Keynote 演讲,李本超根据自己在开源社区的贡献经历,基于他在贡献开源社区过程中的一些小故事和思考,如何克服困难,在开源社区取得突破&#x…...

seata的TCC模式分析
TCC是 Try- Confirm-Cancel 这3个名词的首字母简称,是一个2阶段提交的变体思路。 Try:对资源的检查和预留; Confirm: 确认对预留资源的消耗,执行业务操作; Cancel:预留资源的释放; TCC的事务…...

常用linux命令【主要用于日志查询,目录切换】
Xshell设置登录 :主机,端口号 用户身份验证:账号/密码登录脚本:等待-[hcuserserver02 ]$ 发送-cd /data/logs/pl-capital-processer-server/$(date “%Y-%m-%d”) 下方-添加按钮/编辑 发送文本,追加 grep --color de…...

Python学习基础笔记七十六——Python装饰器2
装饰器,英文名字decorator。 我们开发Python代码的时候,经常碰到装饰器。 通常被装饰后的函数,会在原来的函数的基础上,增加一些功能。 通常装饰器本事也是一个函数,那么装饰器是怎么装饰另外一个函数的呢?…...

生产环境解决用户登录问题的实践
目录 1 前言2 问题提出3 问题分析和解决4 技术分析和改进5 结语 1 前言 在开发管理软件平台为美术馆时,我们致力于提供一个多系统集成平台,其中包括艺术品管理、志愿者管理和数字资产管理等子系统。为了确保用户享有流畅的体验,我们采用了一…...

通讯协议学习之路:QSPI协议理论
通讯协议之路主要分为两部分,第一部分从理论上面讲解各类协议的通讯原理以及通讯格式,第二部分从具体运用上讲解各类通讯协议的具体应用方法。 后续文章会同时发表在个人博客(jason1016.club)、CSDN;视频会发布在bilibili(UID:399951374) 一、…...