英特尔处理器跟踪入门(英特尔PT)

时间:2015-07-28 13:43:06

标签: debugging monitoring intel trace execution

我已经阅读了“英特尔®64和IA-32架构”的第36章 软件开发人员手册,第3卷(3A,3B和3C):系统编程指南“并且可以理解英特尔PT的功能/特性。但是,我无法获得有关如何使用它的信息。如果我想开始捕获跟踪,我该怎么办?我在哪里可以配置我感兴趣的选项?任何指向这些信息的指针都会有很大的帮助。一旦掌握了这些信息,我就可以按照上面提到的第36章对捕获的跟踪进行分析。

2 个答案:

答案 0 :(得分:3)

你可以使用Linux内核4.3来完成它,这些是补丁:

https://lkml.org/lkml/2013/12/11/233

https://lkml.org/lkml/2015/9/24/181

https://lkml.org/lkml/2015/9/27/45

这是关于PT与LBT等其他英特尔功能的互动:

https://lkml.org/lkml/2014/7/31/572

阅读tools / perf / Documentation / intel-pt.txt上关于使用方法的文档。

来自英特尔的Andi Kleen是Skylakes / Broadwell补丁的创始人(只有这两个处理器支持英特尔PT),并且他有用户空间工具来演示其用于调试:

https://github.com/andikleen/simple-pt

例如,以下是基于上述工具的两种不同用法:

" sptcmd -c tcall taskset -c 0 ./tcall"

" sptdecode --sideband ptout.sideband --pt ptout.0"。

答案 1 :(得分:3)

您的问题的解决方案包含两个不同的部分:首先,您需要配置系统的处理器以开始收集处理器跟踪信息,然后将该数据转储到稍后可以处理的文件中。其次,您需要能够理解该文件内容的工具。

需要回答的第一个问题是:你在运行什么操作系统?执行处理器配置和数据收集的代码需要在系统/内核级别运行,因此您必须能够轻松地为该空间编写驱动程序,或者能够找到已完成工作的内容。< / p>

如上所述,Linux内核内置了对4.1内核的处理器跟踪支持,并整合到perf工具中。一些措辞良好的搜索应该是你需要利用它的全部。

对于早期版本的Linux,有上面描述的simple-pt内核模块,位于:https://github.com/andikleen/simple-pt

可以使这个模块至少恢复到3.0内核,并且添加相当简单。如果你想完全移植到不同的操作系统,它也是一个很好的起点,因为它给你一个如何让处理器做正确的技巧来收集数据的例子。

该库还具有用户空间实用程序,用于配置和控制simple-pt内核模块,因为我们是解码模块输出的工具。同样,如果您需要迁移到不同的操作系统,这些可以作为您自己项目的起点。请注意,这些实用程序需要Intel跟踪解码器库(libipt):https://github.com/01org/processor-trace

另请注意,simple-ptlibipt的版本不同步。最新的simple-pt取决于libipt的中间版本,以便正确构建。