首页 > 解决方案 > 如何在虚拟化环境中启用英特尔处理器跟踪 (IPT)?

问题描述

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

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

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

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

VMWare Workstation 没有直接禁用它,但是当我在启动 VM 后尝试在主机上再次运行我的跟踪工具时,它抛出了一个 BSoD,所以我对此并不抱太大希望。

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

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

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

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

其他资源:

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

编辑添加(2/10/2020)

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

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

标签: kernelinteltracevirtualizationintel-pmu

解决方案


查看“Intel 64 and IA-32 Architectures Software Developer's Manual”,从“CHAPTER 35 INTEL PROCESSOR TRACE”开始。IPT CPU 功能确实支持虚拟机管理程序类型 1(硬件),但似乎对它在 VM 中的运行方式有一些限制。

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

在 2020 年,我们可能都在同一条船上。如果我们想在其中一种商业 VM 选项中获得支持,我们将不得不不断询问。也许如果有足够的要求,他们会认为这是一个商业上可行的添加功能。

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

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


推荐阅读