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

Debugging 英特尔处理器跟踪(英特尔PT)入门,debugging,monitoring,intel,trace,execution,Debugging,Monitoring,Intel,Trace,Execution,我已经阅读了“英特尔64和IA-32体系结构”的第36章 软件开发人员手册,第3卷(3A、3B和3C):系统编程指南”,并能理解英特尔PT的功能/特点。然而,我无法获得有关如何使用它的信息。如果我想开始捕获跟踪,我应该如何继续,在哪里可以配置我感兴趣的选项?任何指向这些信息的指针都会大有帮助。一旦我有了这些信息,我就可以按照上面提到的第36章对捕获的痕迹进行分析 您可以使用Linux内核4.3完成此操作,以下是其中的修补程序: 这是关于PT与其他Intel功能(如LBT)的交互: 在to

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

您可以使用Linux内核4.3完成此操作,以下是其中的修补程序:

这是关于PT与其他Intel功能(如LBT)的交互:

在tools/perf/documentation/intel-pt.txt上阅读有关如何使用的文档

来自Intel的Andi Kleen是Skylakes/Broadwell修补程序的创始人(只有这两个处理器支持Intel PT),他拥有用户空间工具,用于演示其在调试中的使用:

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

“sptcmd-c tcall任务集-c 0./tcall”


“sptdecode--sideband ptout.sideband--pt ptout.0”。

您可以使用Linux内核4.3来实现这一点,其中包括以下补丁:

这是关于PT与其他Intel功能(如LBT)的交互:

在tools/perf/documentation/intel-pt.txt上阅读有关如何使用的文档

来自Intel的Andi Kleen是Skylakes/Broadwell修补程序的创始人(只有这两个处理器支持Intel PT),他拥有用户空间工具,用于演示其在调试中的使用:

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

“sptcmd-c tcall任务集-c 0./tcall”


“sptdecode--sideband ptout.sideband--pt ptout.0”。

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

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

如上所述,Linux内核内置了对处理器跟踪的支持,从4.1内核开始,集成到
perf
工具中。你只需要几次措辞得体的搜索就可以充分利用这一点

对于早期版本的Linux,有上面描述的
simple pt
内核模块,可在以下位置找到:

这个模块至少可以回到3.0内核,添加起来相当简单。如果您想要完全移植到不同的操作系统,它也代表了一个很好的起点,因为它为您提供了一个示例,说明了如何让处理器执行正确的技巧来收集数据

该库还具有用于配置和控制
simple pt
内核模块的用户空间实用程序,我们将其作为解码模块输出的工具。同样,如果您需要转移到其他操作系统,这些可以作为您自己项目的起点。请注意,这些实用程序需要英特尔跟踪解码器库(
libipt
):


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

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

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

如上所述,Linux内核内置了对处理器跟踪的支持,从4.1内核开始,集成到
perf
工具中。你只需要几次措辞得体的搜索就可以充分利用这一点

对于早期版本的Linux,有上面描述的
simple pt
内核模块,可在以下位置找到:

这个模块至少可以回到3.0内核,添加起来相当简单。如果您想要完全移植到不同的操作系统,它也代表了一个很好的起点,因为它为您提供了一个示例,说明了如何让处理器执行正确的技巧来收集数据

该库还具有用于配置和控制
simple pt
内核模块的用户空间实用程序,我们将其作为解码模块输出的工具。同样,如果您需要转移到其他操作系统,这些可以作为您自己项目的起点。请注意,这些实用程序需要英特尔跟踪解码器库(
libipt
):

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