Intel处理器跟踪PT技术是记录程序执行过程的技术,它把记录信息编码报文存到高压缩率的二进制文件中。该二进制文件结合每条指令的时间戳重建执行流。PT技术覆盖度大,开销小,有关开销的信息详见,主要用于性能问题的事后分析和根因定位。
图37中展示了小型指令序列的编码。类似PUSH,MOV, ADD和CMP这样的指令会被忽略,因为他们不会改变控制流。然而,指令JE可能会跳转到label, 所以它的结果需要被记录下来。
在分析时,我们将应用程序的二进制文件和采集的PT跟踪信息汇总到一起,软件解码器需要应用程序的二进制文件来重建程序的执行流,从入口点开始,然后将采集的跟踪信息作为查询参考来决定控制流。图38中展示了一个解析Intel PT文件的例子。假设Push指令时应用程序二进制文件的入口点,然后Push mos add和CMP保持原来的样子被重建,这一步无需查询被解析的跟踪信息。接着,软件解码器开始处理JE指令,分支跳转指令,因此我们需要查询分支跳转指令的输出。根据图38中的跟踪文件,JE的条件被选中T,所以跳过MOV指令调用了CALL指令。
运行时
指令 编码
push
mov
cmp
je.label
mov
label
call 虚函数
图37 Intel处理器跟踪PT编码
在图39中,指令数据是非常精确的,但是时间信息没有那么精确,显然,指令CALL TEST和JB不会同时发生,但是我们没有有关它们的更精确的时间信息。有了时间戳,我们可以吧程序和系统中的其他事件的时间间隔进行对齐,并且很容易与挂钟时间进行比较,在某些实现中,跟踪时许可以通过时钟周期精确模式进一步改进,其中硬件记录正常数据报文之间的时钟周期计数。
分析时
指令
mov
jnz
add
cmp
je.label
mov
.label
call
test
jb
用Linux perf工具可以方便采集IntelPT的跟踪文件
perf record -e intel_pt/cycle/u ./a.out
可能使用PT技术处理的几个例子
1 分析性能问题 因为PT会采集所有的指令流,所以可以分析在应用程序无响应的一小段时间内发生了什么,更多详细例子相见easyperf 博客上的文章。
2 事后调试 PT跟踪文件可以使用传统的调试工具重放,此外,PT还会提供调试栈信息,即使在栈被破坏的情况下也总是有效的。PT跟踪文件可以在远程机器上采集,然后再离线分析。
3 程序执行的回溯
可以快速发现哪些代码路径从未被执行
借助时间戳,当发生自旋锁尝试时,可以计算出在等待上花费了多长时间。
通过检测待定的指令模式来检测安全问题。
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- awee.cn 版权所有 湘ICP备2023022495号-5
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务