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输入驱动程序,同时利用原子操作来对按键值进…...
Linux应用开发之网络套接字编程(实例篇)
服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …...
Admin.Net中的消息通信SignalR解释
定义集线器接口 IOnlineUserHub public interface IOnlineUserHub {/// 在线用户列表Task OnlineUserList(OnlineUserList context);/// 强制下线Task ForceOffline(object context);/// 发布站内消息Task PublicNotice(SysNotice context);/// 接收消息Task ReceiveMessage(…...
将对透视变换后的图像使用Otsu进行阈值化,来分离黑色和白色像素。这句话中的Otsu是什么意思?
Otsu 是一种自动阈值化方法,用于将图像分割为前景和背景。它通过最小化图像的类内方差或等价地最大化类间方差来选择最佳阈值。这种方法特别适用于图像的二值化处理,能够自动确定一个阈值,将图像中的像素分为黑色和白色两类。 Otsu 方法的原…...
涂鸦T5AI手搓语音、emoji、otto机器人从入门到实战
“🤖手搓TuyaAI语音指令 😍秒变表情包大师,让萌系Otto机器人🔥玩出智能新花样!开整!” 🤖 Otto机器人 → 直接点明主体 手搓TuyaAI语音 → 强调 自主编程/自定义 语音控制(TuyaAI…...
OpenLayers 分屏对比(地图联动)
注:当前使用的是 ol 5.3.0 版本,天地图使用的key请到天地图官网申请,并替换为自己的key 地图分屏对比在WebGIS开发中是很常见的功能,和卷帘图层不一样的是,分屏对比是在各个地图中添加相同或者不同的图层进行对比查看。…...
Device Mapper 机制
Device Mapper 机制详解 Device Mapper(简称 DM)是 Linux 内核中的一套通用块设备映射框架,为 LVM、加密磁盘、RAID 等提供底层支持。本文将详细介绍 Device Mapper 的原理、实现、内核配置、常用工具、操作测试流程,并配以详细的…...
七、数据库的完整性
七、数据库的完整性 主要内容 7.1 数据库的完整性概述 7.2 实体完整性 7.3 参照完整性 7.4 用户定义的完整性 7.5 触发器 7.6 SQL Server中数据库完整性的实现 7.7 小结 7.1 数据库的完整性概述 数据库完整性的含义 正确性 指数据的合法性 有效性 指数据是否属于所定…...
接口自动化测试:HttpRunner基础
相关文档 HttpRunner V3.x中文文档 HttpRunner 用户指南 使用HttpRunner 3.x实现接口自动化测试 HttpRunner介绍 HttpRunner 是一个开源的 API 测试工具,支持 HTTP(S)/HTTP2/WebSocket/RPC 等网络协议,涵盖接口测试、性能测试、数字体验监测等测试类型…...
三分算法与DeepSeek辅助证明是单峰函数
前置 单峰函数有唯一的最大值,最大值左侧的数值严格单调递增,最大值右侧的数值严格单调递减。 单谷函数有唯一的最小值,最小值左侧的数值严格单调递减,最小值右侧的数值严格单调递增。 三分的本质 三分和二分一样都是通过不断缩…...
Chrome 浏览器前端与客户端双向通信实战
Chrome 前端(即页面 JS / Web UI)与客户端(C 后端)的交互机制,是 Chromium 架构中非常核心的一环。下面我将按常见场景,从通道、流程、技术栈几个角度做一套完整的分析,特别适合你这种在分析和改…...
