Processor Tracing | 处理器追踪
目录
处理器跟踪
为什么这有用?
重构代码流
调试堆栈损坏
跟踪缓冲区管理
执行流重构
总结
https://software.intel.com/content/www/us/en/develop/blogs/processor-tracing.html
英特尔®处理器跟踪(英特尔®PT)是未来处理器中即将推出的一项令人兴奋的新功能,它对调试非常有帮助,因为它将通过触发和过滤功能公开准确而详细的活动跟踪,以帮助隔离重要的跟踪。我们最近发布了规范,现在提供了一个库来支持工具开发,并在本周就使这些功能在Linux中可用的工作进行了演讲。工具和操作系统开发人员具有规范和支持开发的库。
英特尔随所有示例工具一起发布了一个库,以支持使用作为免费下载的“处理器跟踪解码器库”提供的英特尔®处理器跟踪(Intel®PT)。我可以向您介绍有关该项目的一些信息,我还将解释英特尔PT来激发处理器跟踪解码器库的解码功能。
该项目本身将能够支持任何已启用使用英特尔PT的操作系统。英特尔PT是作为表演事件呈现的,因此,通过查看该事件是否可用于配置/使用,很容易检测到对操作系统的支持。Linux的更改已在研究中;本周介绍了一些Linux工作的状态。随着时间的流逝,我希望包括Windows和OS X在内的其他操作系统也将支持Intel PT,并且处理器跟踪解码器库也已准备就绪。目前已验证解码器库可在Linux,Windows和OS X上构建,因此可以使用了!
Processor Trace Decoder Library的项目包含一个用于解码Intel PT的库,以及在该库之上构建的简单工具的示例实现,这些示例工具展示了如何在自己的工具中使用该库。下载中包括以下内容:
- libipt:数据包编码器/解码器库以及描述解码器库用法的文档。
- 可选内容和样本:
- ptdump:数据包转储器的示例实现。
- ptxed:跟踪反汇编程序的示例实现。
- pttc:跟踪测试生成器。
- 脚本:脚本的集合。
处理器跟踪
英特尔最近在最新的《英特尔®体系结构指令集扩展编程参考》第11章中发布了有关英特尔处理器跟踪的详细信息。英特尔处理器跟踪是一种低开销的执行跟踪功能,将来会被某些处理器支持。它通过使用专用硬件设施捕获有关每个硬件线程上的软件执行信息的方式工作,以便在执行完成后,软件可以对捕获的跟踪数据进行处理并重建确切的程序流。英特尔PT在执行开销方面不是免费的,但是开销很低,足以在大多数应用程序的生产版本中正常运行。
捕获的信息收集在数据包中。Intel PT的第一个实现提供了控制流跟踪,该控制流跟踪在这些数据包中包括时序和程序流信息(例如,分支目标,分支采用/未采用的指示)以及程序引发的模式相关信息(例如,英特尔®TSX状态转换,CR3变化)。这些数据包可以在发送到内存子系统之前在内部进行缓冲。
为什么这有用?
英特尔PT提供有关各种事件的上下文。性能分析器可以使用PT发现“响应时间”问题的根本原因-那些影响执行质量(如果不是整个运行时)的性能问题。例如,使用PT,视频应用程序开发人员可以非常详细地探索有问题的单个帧的执行,而这对于采用传统的基于采样的采集通常是不可能的。
此外,英特尔PT提供的完整跟踪功能可以比以前更深入地了解执行情况。例如,从进入和退出到特定的后沿和循环跳闸次数的循环行为很容易提取和报告。
重构代码流
调试器可以使用它来重构导致当前位置的代码流。无论是崩溃站点,断点,观察点,还是仅仅是我们刚刚跳过的函数调用之后的指令。它们甚至可以允许通过反向步进命令在记录的执行历史中导航。
调试堆栈损坏
另一个重要的用例是调试堆栈损坏。调用堆栈损坏后,正常的帧展开通常会失败或可能无法产生可靠的结果。英特尔PT可用于根据实际的CALL和RET指令重建堆栈回溯跟踪。
操作系统可以将Intel PT包含到核心文件中。这将使调试器不仅可以在崩溃时检查程序状态,还可以重建导致崩溃的控制流。也可以将其扩展到整个系统,以调试内核崩溃和其他系统挂起。Intel PT可以进行全局跟踪,以便在发生操作系统崩溃时可以将跟踪保存为操作系统崩溃转储机制的一部分,然后在以后用于重建故障。
英特尔PT还可以帮助缩小多线程操作系统和用户程序代码中的数据争用。它可以用粗略的时间指示记录所有线程的执行情况。尽管它不够精确,无法自动检测数据竞争,但它可以提供足够的信息来帮助进行分析。
跟踪缓冲区管理
跟踪数据可以收集到操作系统提供的循环缓冲区中。为了简化内存管理并使操作系统更容易找到合适的大容量内存,缓冲区不必是连续的。
逻辑缓冲区由存储页面的集合和描述页面布局的控制结构组成。操作系统可能会将Intel PT配置为在任何部分接近已满时生成中断。
这启用了各种不同的用例:
- 单个循环缓冲区
- 带复制的单个缓冲区
- 单个缓冲区,逐节复制
尽管Intel PT生成的数据太多,无法长时间将执行跟踪信息存储到磁盘上,但可以保存较短的代码段。
英特尔使Linux能够通过perf_event接口为Intel PT提供支持。
执行流重构
Intel PT使用一种紧凑格式来存储执行跟踪。它忽略了可以直接从代码或以前的跟踪中推断出的所有内容。
您可以将其与导航迷宫的简要说明列表进行比较。只要方法很明显,您就可以简单地跟随迷宫的曲折。来到路口时,您需要知道是向左转还是向右转。为了导航迷宫,您真正需要的只是左右方向的简短列表。与此类似,Intel PT使用单个位来指示是否已采用条件分支。跟踪中根本没有表示无条件跳转和线性代码。
PT跟踪由一系列数据包(具有不同的类型)组成。例如,为了表示条件分支的选择,Intel PT使用的TNT数据包有两种不同的大小:8位和64位。为了重构执行流程,还需要考虑其他一些事情,例如间接分支,函数返回或中断。为了对此建模,英特尔PT添加了更多数据包,例如TIP用于间接分支和函数返回,以及FUP用于异步事件位置。然后,中断将被表示为FUP,后跟一个TIP,分别给出异步分支的源和目的地。英特尔PT还提供有关事务同步的信息。每当事务开始,落实或中止时,Intel PT都会生成两个数据包:MODE.TSX数据包提供新的事务状态,FUP数据包给出了新状态生效的代码位置。对于事务中止,将生成一个附加的TIP数据包,以提供相应中止处理程序的位置。
请参阅规范(《英特尔®体系结构指令集扩展程序设计参考》的第11章)以获取受支持数据包的完整列表。
为了重构执行流程,解码器因此需要对所跟踪的可执行文件或库以及PT跟踪数据包中的指令进行解码。为了处理动态库,解码器还需要考虑操作系统提供的边带信息。
英特尔提供了一个开源参考实现,用于解码PT数据包并重构执行流程。该处理器跟踪解码库(工具和库以能够使用英特尔处理器跟踪的集合)可作为免费下载。英特尔目前正在努力帮助启用GNU *调试器GDB。也正在考虑与其他工具的其他集成。
总结
英特尔提供了一种低开销的跟踪功能,该功能允许记录执行流并在以后重新构造它。此功能具有用于功能以及性能调试的应用程序。
Processor Tracing | 处理器追踪相关推荐
- Gitlab与Jaeger集成,实现Tracing链路追踪
一.Jaeger的安装部署 $ docker run -d --name jaeger \-e COLLECTOR_ZIPKIN_HOST_PORT=:9411 \-p 5775:5775/udp \ ...
- Linux内核 eBPF基础:perf(1):perf_event在内核中的初始化
Linux内核 eBPF基础 perf(1):perf_event在内核中的初始化 荣涛 2021年5月12日 本文相关注释代码:https://github.com/Rtoax/linux-5.10 ...
- NiFi 常用处理器(Processor)介绍
常用处理器(Processor)介绍 处理器的种类 为了创建有效的数据流处理流程, 用户必须了解可用的处理器类型.NiFi 包含许多不同的处理器, 这些处理器提供了可从众多不同系统中提取数据, 路由, ...
- Elasticsearch摄取节点(三)——管道处理器(Processor)介绍
管道处理器 之前介绍摄取节点的管道.而管道中具体的处理逻辑取决于其处理.目前在7.X版本中一共存在三十二个不同的处理器.处理两个属于X-Pack的一共是三十个 目前存在的管道处理器 管道处理器 处理器 ...
- 知识追踪-Dynamic Key-Value Memory Networks for Knowledge Tracing
记录关于知识追踪相关论文的阅读 1. 本文研究内容 2.经典模型 2.1 BKT 2.2 DKT 3. 相关工作 3.1 Knowledge Tracing 4. 模型 4.1 经典的MANN 4.2 ...
- 02.pipeline常用processor
文章目录 1. Set Processor: 指定字段存在时,修改指定字段的值,指定字段不存在时,新增该字段并设置该字段的值,可以修改_index的值哦 2. Append Processor: 在一 ...
- mysql链路跟踪工具_SkyWalking全链路追踪利器
随着目前系统架构的复杂度越来越高(中台.微服务),并且线上应用的多级监控覆盖到了通讯.应用处理过程监控并且实现端到端的应用监测,线上性能故障的快速定位修复:而传统的监控分析方式已经无法满足我们的需求, ...
- skywalking 安装_SkyWalking全链路追踪利器
随着目前系统架构的复杂度越来越高(中台.微服务),并且线上应用的多级监控覆盖到了通讯.应用处理过程监控并且实现端到端的应用监测,线上性能故障的快速定位修复:而传统的监控分析方式已经无法满足我们的需求, ...
- ps照片处理器怎么打文字_什么是文字处理器?
ps照片处理器怎么打文字 Word Processor is a term used to describe a hardware or software which is used for inpu ...
最新文章
- 使用级联样式表的好处在于_现在都在使用益阳云终端解决方案了,原因就在于这些好处...
- java页面请求跑批处理sql的有关问题
- Spring : Spring 切面优先级
- 开课吧Java课堂:什么是线程优先级?
- 谷歌开源内部代码评审规范
- 腾讯内部深度文章曝光:微信向左 手机QQ向右
- windows PC 连接Windows作为无线显示器
- 利用WNMP部署woniunote
- Rust 有问有答之 crate 是什么
- [slove]Unable to find required classes (javax.activation.DataHandler and javax.m
- kali 改root_linux切换到root用户,kali怎么切换root身份运行
- wlop作品集_【图包】【wlop】作品合集
- 【教程】win10下安装Biolinux双系统
- 使用ThreeJs搭建BIM模型浏览器,超大模型的分时渲染
- 如何高效设计游戏——塔防游戏设计方案
- Uni-app实现表格数据自动滚动(无限滚动)
- ipad全系列_为iPad提供全职工作
- BatchNorm、LayerNorm、InstanceNorm及GroupNorm
- 将列表按字母排序如通讯录
- 语音朗读模块TTS文本变量实时转语音朗读科大讯飞XFS5152CE芯片AI
热门文章
- SpringBoot 项目构建 Docker 镜像调优实践
- java监听上传文件,Springmvc文件上传监听详解
- cdr非法软件 您的产品已被禁用怎么回事_多层刺网非法捕鱼 顺庆男子被取保候审...
- arm workbench ide 用户指南_ARM_异常和中断
- idea2020代码el组件红色波浪线_Android实现炫酷的ViewPager3D组件
- Redis+MongoDB 极佳实践:做到读写分离
- empty()、isset()、is_null()的区别
- Java垃圾回收机制概述
- 【java】System成员输入输出功能out、in、err
- lambda表达式对比