如何在虚拟化环境中启用英特尔处理器跟踪 (IPT)?



我正在尝试在虚拟机中运行Alex Ionescu的WinIPT接口,但没有成功。 (这是运行Windows 10 VM的Windows 10 Pro主机,两者都是18363更新(

我已经成功地在主机上构建并运行了英特尔的驱动程序以及 Alex 的工具链,并使用 ptxed 处理了跟踪。 我还运行了英特尔的 cpuid 实用程序,并验证了主机上的INTEL_PROCESSOR_TRACE功能是否处于活动状态。 但是,当我在 VM 中运行该实用程序时,它不会显示 INTEL_PROCESSOR_TRACE 标志,实际上,驱动程序返回一个错误,指出该功能未启用。

我尝试在几个不同的虚拟环境中运行相同的设置,包括最新版本的VirtualBox,VMWare Workstation和Hyper-V。

当我启用 Hyper-V 平台时,它会以静默方式禁用主机上的INTEL_PROCESSOR_TRACE功能。

VMWare 工作站不会直接禁用它,但是当我在启动 VM 后尝试在主机上再次运行我的跟踪工具时,它抛出了 BSoD,所以我对此没有很高的期望。

VirtualBox 至少没有取消任何功能,但即使我启用了 VT-x 直通选项,它仍然没有设置启用 IPT 的标志。

根据Microsoft的说法,理论上存在一个在Hyper-V中启用此功能的过程,尽管我遇到了上述问题,最终在我的主机上禁用了它:

在虚拟机中启用性能监视组件

有没有人让这个工作? 我更喜欢当前环境中的解决方案(Windows 主机上的 Windows VM(,但我希望在 Linux 或任何其他方法上使用 perf 的任何见解。 我还发现了2017年的一些帖子和问题,表明IPT"尚未"得到支持,但在过去一年左右的时间里没有任何支持。 技术和架构似乎仍在不断发展,所以我真的想知道是否有人以任何形式取得了成功,以及关于该做什么或避免什么的任何见解。

其他资源:

英特尔处理器跟踪的背景:处理器跟踪

已编辑以添加 (2/10/2020(

更仔细地查看Microsoft说明,他们提到您需要"支持 IPT 和 PT2GPA 功能的英特尔处理器"才能在虚拟机中启用 IPT。 据英特尔称,他们列出的唯一支持 PT2GPA 的架构是 Ice Lake。

我目前正在使用的计算机正在运行早期的微架构(Coffee Lake(,这可以解释我看到的IPT在主机上正常的行为。 谁能确认他们让它在更新的处理器上运行?

查看"英特尔 64 和 IA-32 架构软件开发人员手册",从"第 35 章英特尔处理器跟踪"开始。IPT CPU 功能确实具有虚拟机监控程序类型 1(硬件(支持,但似乎对其在 VM 中的运行方式存在一些限制。

顺便说一下,我最初通过电话与VMWare代表讨论了缺乏IPT支持的问题,他没有给出任何结论性的回应,也没有通过电子邮件回复我。 VMWare论坛上只有一两个关于该主题的论坛帖子。似乎有一些标志可以设置支持,但它们都不适合我。 阅读,它可能不会很快到来。

在2020年,我们可能都在同一条船上。 如果我们希望支持其中一个商业虚拟机选项,我们将不得不继续询问。也许如果有足够的询问,他们会认为这是一个商业上可行的功能。

和/或对于任何能够完成任务的人,请在VirtualBox或其他开源解决方案之一中添加对它的支持。

编辑:显然至少对于Linux,KVM现在支持IPT。

就我而言,WinIPT 和我使用 libipt 的实现在 Hyper-V 中运行良好(主机和来宾都运行 Windows 10 21H1(.
但是,Hyper-V 来宾的 PT 缓冲区大小减少到 2MB,而我的 Xeon Gold 6136 CPU 中的缓冲区大小为 10MB。

相关内容

  • 没有找到相关文章

最新更新