6.4 CPU性能分析--Intel处理器跟踪技术
Intel处理器跟踪PT技术是记录程序执行过程的技术,它把记录信息编码报文存到高压缩率的二进制文件中。该二进制文件结合每条指令的时间戳重建执行流。PT技术覆盖度大,开销小,有关开销的信息详见,主要用于性能问题的事后分析和根因定位。
6.4.1 工作流
类似于采样技术,PT技术不需要修改任何源代码。只要在支持PT技术的工具下运行目录程序,然后抓取跟踪文件即可,一旦启动PT且基准测试程序开始运行,分析工具就开始把跟踪报文记录到DRAM中。
类似于LBR, Intel PT技术通过记录分支来实现。在程序运行时,只要CPU遇到分支跳转指令,PT将会记录这个分支跳转指令的输出。对于简单的分支跳转指令,CPU会用一位来记录它是被选中还是未被选中NT。对于间接调用。PT会记录目标地址,注意,非条件分支跳转指令不会被记录,因为我们知道它的目标地址。
图37中展示了小型指令序列的编码。类似PUSH,MOV, ADD和CMP这样的指令会被忽略,因为他们不会改变控制流。然而,指令JE可能会跳转到label, 所以它的结果需要被记录下来。
在分析时,我们将应用程序的二进制文件和采集的PT跟踪信息汇总到一起,软件解码器需要应用程序的二进制文件来重建程序的执行流,从入口点开始,然后将采集的跟踪信息作为查询参考来决定控制流。图38中展示了一个解析Intel PT文件的例子。假设Push指令时应用程序二进制文件的入口点,然后Push mos add和CMP保持原来的样子被重建,这一步无需查询被解析的跟踪信息。接着,软件解码器开始处理JE指令,分支跳转指令,因此我们需要查询分支跳转指令的输出。根据图38中的跟踪文件,JE的条件被选中T,所以跳过MOV指令调用了CALL指令。
我们接着继续分析,CALL 也是一个可以改变控制流的指令,因此我们需要在解析后的跟踪信息中查找目标地址,它是0x407e1d8。高亮的指令是在程序运行过程中被执行过的。注意,这就是程序运行的精确重建,并且不会跳过任何指令。接下来,我们可以通过调试信息把汇编指令映射回源代码,获得源代码逐行的日志。
运行时
指令 编码
push
mov
cmp
je.label
mov
label
call 虚函数
图37 Intel处理器跟踪PT编码
6.4.2 时间报文
Intel PT工具不仅可以跟踪执行流,还可以记录时间信息。作为保存跳转目标地址的补充,PT工具还可以产生时间报文。图39中提供了一个时间报文如何被用来恢复指令时间戳的可视化展示示例。和前面的例子一样,我们首先看到JNE没有被选中,所以需要把它和它之上的所有指令的时间戳都更新为0ns, 然后,我们看到一个2ns的时间更新且JE指令被选中,所以把它和它之上的所有指令的时间戳都更新2ns,再往后是一条间接调用指令,但是没有与之相关的时间报文,所以我们不需要更新时间戳。然后,我们看到一个100ns的时间更新并且指令JB没有被选中,所以其上的所有指令时间戳都要更新102ns。
在图39中,指令数据是非常精确的,但是时间信息没有那么精确,显然,指令CALL TEST和JB不会同时发生,但是我们没有有关它们的更精确的时间信息。有了时间戳,我们可以吧程序和系统中的其他事件的时间间隔进行对齐,并且很容易与挂钟时间进行比较,在某些实现中,跟踪时许可以通过时钟周期精确模式进一步改进,其中硬件记录正常数据报文之间的时钟周期计数。
分析时
指令
mov
jnz
add
cmp
je.label
mov
.label
call
test
jb
6.4.3 采集和解析跟踪文件
用Linux perf工具可以方便采集IntelPT的跟踪文件
perf record -e intel_pt/cycle/u ./a.out
6.4.4 用法
可能使用PT技术处理的几个例子
1 分析性能问题 因为PT会采集所有的指令流,所以可以分析在应用程序无响应的一小段时间内发生了什么,更多详细例子相见easyperf 博客上的文章。
2 事后调试 PT跟踪文件可以使用传统的调试工具重放,此外,PT还会提供调试栈信息,即使在栈被破坏的情况下也总是有效的。PT跟踪文件可以在远程机器上采集,然后再离线分析。
3 程序执行的回溯
可以快速发现哪些代码路径从未被执行
借助时间戳,当发生自旋锁尝试时,可以计算出在等待上花费了多长时间。
通过检测待定的指令模式来检测安全问题。
相关文章:
6.4 CPU性能分析--Intel处理器跟踪技术
Intel处理器跟踪PT技术是记录程序执行过程的技术,它把记录信息编码报文存到高压缩率的二进制文件中。该二进制文件结合每条指令的时间戳重建执行流。PT技术覆盖度大,开销小,有关开销的信息详见,主要用于性能问题的事后分析和根因定…...
期权懂|如何用第三方平台开通期权?
期权小懂每日分享期权知识,帮助期权新手及时有效地掌握即市趋势与新资讯! 如何用第三方平台开通期权? 如果不能满足常规的期权开户条件,可以考虑以下几种方法来尝试开户: 一、选择第三方平台: 通过网络搜…...
JS中const有没有变量提升
在JavaScript中,const 关键字用于声明一个只读的常量,其值在初始化后不能被重新赋值。关于变量提升(Hoisting),它是JavaScript中一个重要的概念,指的是无论变量或函数声明在何处,它们都会被“提…...
Axure RP全面介绍:功能、应用与中文替代方案
Axure RP是一款功能强大的原型设计工具,它被广泛应用于网页和移动应用的设计领域。Axure RP集成了设计、原型制作和文档管理,为产品管理人员、设计师和开发人员提供了一个综合的平台。让我们一步步了解Axure的基本功能、使用技巧以及中文支持平台——“在…...
WordPress用户首次登录强制修改密码
有些企业网站要求很高,比如用户首次登录强制要求修改密码,这里提供一段代码,用于实现强制修改密码供参考。 通过代码可以实现,用户正常注册或者管理员在后台添加用户时,会添加首次登录标记,用户首次登录后会…...
AI开源南京分享会回顾录
AI 开源南京分享会,已于2024年11月30日下午在国浩律师(南京)事务所5楼会议厅成功举办。此次活动由 KCC南京、PowerData、RISC-Verse 联合主办,国浩律师(南京)事务所协办。 活动以“开源视角的 AI 对话”为主…...
基于事件驱动的websocket简单实现
websocket的实现 什么是websocket? WebSocket 是一种网络通信协议,旨在为客户端和服务器之间提供全双工、实时的通信通道。它是在 HTML5 规范中引入的,可以让浏览器与服务器进行持久化连接,以便实现低延迟的数据交换。 WebSock…...
【leetcode100】反转链表
1、题目描述 给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。 示例 1: 输入:head [1,2,3,4,5] 输出:[5,4,3,2,1] 2、初始思路 2.1 思路 # Definition for singly-linked list. # class ListNode: # …...
禅道Bug的一次迁移
一、场景 平时工作记录在公司禅道上的问题想备份一份到本地,但是又没有公司禅道的数据库信息,有时候出测试报告想批量调整数据方便截图很困难,同时也为了学习禅道数据流转过程,所以有了把缺陷保存到本地一份的想法。 实际上禅道支…...
c段和旁站讲解(附查询网址)
1. C段(C类子网段) C段就是一个IP地址的小范围。比如,假设你有一个家庭Wi-Fi网络,Wi-Fi会分配给你一组IP地址(每个设备一个IP地址)。如果你的网络分配的是类似 192.168.1.0 这样的IP地址,那么这…...
Linux编译Kernel时的文件zImage、文件dtb(dtbs)、核心模块分别是什么东西?
zImage文件的介绍 在编译Linux内核时,zImage 是一种内核映像文件,它是内核的压缩版本,通常用于引导嵌入式设备或其他资源有限的环境。 zImage 的具体含义 zImage 是 “Compressed Kernel Image” 的缩写。它是通过压缩原始的内核映像&…...
【深度学习】深刻理解“变形金刚”——Transformer
Transformer 是一种用于处理序列数据的深度学习模型架构,最初由 Vaswani 等人在 2017 年的论文《Attention is All You Need》中提出。它彻底改变了自然语言处理(NLP)领域,成为许多高级任务(如机器翻译、文本生成、问答…...
75_pandas.DataFrame 中查看和复制
75_pandas.DataFrame 中查看和复制 与pandas的DataFrame与NumPy数组ndarray类似,也有视图(view)和拷贝(copy)。 当使用loc[]或iloc[]等选择DataFrame的一部分以生成新的DataFrame时,与原对象共享内存的对…...
打电话玩手机识别-支持YOLO,COCO,VOC格式的标记,超高识别率可检测到手持打电话, 非接触式打电话,玩手机自拍等
打电话玩手机识别-支持YOLO,COCO,VOC格式的标记,超高识别率可检测到手持打电话, 非接触式打电话,玩手机自拍等1275个图片。 手持打电话: 非接触打电话 玩手机 数据集下载 yolov11:https://download.csdn…...
生产慎用之调试日志对空间矢量数据批量插入的性能影响-以MybatisPlus为例
目录 前言 一、一些缘由 1、性能分析 二、插入方式调整 1、批量插入的实现 2、MP的批量插入实现 3、日志的配置 三、默认处理方式 1、基础程序代码 2、执行情况 四、提升调试日志等级 1、在logback中进行设置 2、提升后的效果 五、总结 前言 在现代软件开发中,性能优…...
单片机:实现倒计时(附带源码)
使用单片机实现倒计时功能是一个常见的嵌入式应用,它能帮助你更好地理解如何进行时间控制和如何通过定时器实现精确的倒计时。通过该项目,你将学习如何使用单片机的定时器来进行时间计算,并通过LED或LCD显示倒计时的结果。 1. 项目概述 倒计…...
什么是多线程中的上下文切换
什么是多线程中的上下文切换 回答 上下文切换是指CPU从一个线程转到另一个线程时,需要保存当前线程的上下文状态,恢复另一个线程的上下文状态,以便于下一次恢复执行该线程时能够正确地运行。 在多线程编程中,上下文切换是一种常…...
如何在windwos批量拉取go mod
golang go-zero微服务开发,分的rpc项目太多了,变更了公共包,需要手动去拉取,直接一键拉取就好了,创建一个windwos脚本文件 文件名 tidy_all_go_mod.ps1 代码 # 辅助工具拉取go mod tidy # 根目录v99main执行 ./tidy_all_go_mod.ps1 # 定义项目的根目录 $RootDir Get-Locat…...
【Three.js基础学习】29.Hologram Shader
前言 three.js 通过着色器如何实现全息影像,以及一些动态的效果。 一些难点的思维,代码目录 下面图是摄像机视角观看影响上的时候,如何实现光影的渐变,透视以及叠加等。 一、代码 1.index.html <!DOCTYPE html> <html …...
文件包含进阶玩法以及绕过姿态
前言 欢迎来到我的博客 个人主页:北岭敲键盘的荒漠猫-CSDN博客 本文整理文件包含漏洞的进阶玩法与绕过姿态 不涉及基础原理了 特殊玩法汇总 本地包含 文件包含上传文件 原理: php的文件包含有着把其他文件类型当做php代码执行的功效,文件上传一般会限制后缀&am…...
Qwen2.5-32B-Instruct开发指南:vscode安装与插件配置
Qwen2.5-32B-Instruct开发指南:vscode安装与插件配置 1. 引言 如果你正准备开始使用Qwen2.5-32B-Instruct这个强大的AI模型进行开发,那么一个高效的编程环境就是你的第一站。作为阿里云推出的320亿参数指令微调模型,Qwen2.5-32B-Instruct在…...
3MF格式终极指南:如何在Blender中轻松导入导出3D打印文件
3MF格式终极指南:如何在Blender中轻松导入导出3D打印文件 【免费下载链接】Blender3mfFormat Blender add-on to import/export 3MF files 项目地址: https://gitcode.com/gh_mirrors/bl/Blender3mfFormat 想要在Blender中处理3D打印文件却苦于格式转换&…...
轻量级OpenClaw方案对比:nanobot与标准部署性能测试
轻量级OpenClaw方案对比:nanobot与标准部署性能测试 1. 测试背景与动机 最近在为一台闲置的2核4G云主机寻找合适的自动化方案时,我遇到了一个典型的技术选型问题:标准OpenClaw部署对资源要求较高,而新出现的nanobot方案号称是&q…...
OpenClaw+nanobot故障排查:模型加载失败的5种解决方法
OpenClawnanobot故障排查:模型加载失败的5种解决方法 1. 问题背景与排查思路 上周我在本地部署nanobot镜像时,遇到了模型加载失败的问题。这个镜像内置了Qwen3-4B-Instruct-2507模型,理论上应该开箱即用,但实际启动时却卡在了vL…...
嵌入式开源项目解析与复刻实践指南
1. 嵌入式软件开源项目深度解析与复刻指南1.1 项目概述在嵌入式开发领域,工程化代码设计能力是区分初级与高级工程师的关键指标。本文精选五个经过实际验证的开源项目,从架构设计到实现细节进行深度剖析,为嵌入式开发者提供可复用的设计模式和…...
Comsol 薄板声辐射响应优化:激励位置与频率的协同效应
1. 薄板声辐射响应基础原理 当你用手指轻轻敲击一块金属薄板时,会听到清脆的声响。这个看似简单的现象背后,隐藏着复杂的声学原理。在Comsol仿真中,我们可以精确模拟这种声辐射响应,为声学设备设计提供科学依据。 薄板声辐射的本质…...
别再只用SVG了!用Vue3 + Konva给你的后台管理系统加个流程图编辑器(附完整代码)
Vue3 Konva实战:打造高交互流程图编辑器的完整方案 在后台管理系统开发中,流程图编辑器是提升业务配置效率的利器。传统SVG方案在复杂交互场景下常遇到性能瓶颈,而基于Canvas的Konva库配合Vue3的响应式特性,能轻松实现流畅的拖拽…...
STM32F103 SPI+DMA驱动WS2812B的时序实现原理
1. WS2812B_STM32_Libmaple 库深度解析:基于 SPI DMA 的高性能 NeoPixel 驱动实现WS2812B(常被称作 NeoPixel)是当前嵌入式系统中最主流的单线协议可寻址 RGB LED。其核心挑战在于严格的时序要求:T0H(逻辑 0 的高电平时…...
MS5803-14BA I²C驱动开发:嵌入式压力传感器实战指南
1. MS5803-14BA压力传感器库深度解析:面向嵌入式工程师的IC驱动开发实践1.1 传感器核心特性与工程定位MS5803-14BA是TE Connectivity(原Measurement Specialties)推出的高精度数字压力/温度复合传感器,采用MEMS压阻式传感原理与Δ…...
安装claude code,开始学习强大的AI编程助手
1.首先检查是否安装node.js(版本尽量大于22) window端输入winr -> cmd 打开终端查看node版本 可以使用nvm去管理nodejs版本,安装方式见 https://blog.csdn.net/m0_56820004/article/details/159585001?spm1011.2415.3001.10575…...
