kernel - 如何在虚拟化环境中启用英特尔处理器跟踪 (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 正常的行为。任何人都可以确认他们可以在更新的处理器上使用它吗?
解决方案
查看“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。
推荐阅读
- azure-devops - 是否可以导入 Azure DevOps 工作项
- user-interface - Unity - 无法单击 UI 按钮
- c# - WPF DataGrid 无法从 ItemsSource 绑定
- javascript - 如何修复引导日期选择器
- javascript - 如何将 Vuejs 中的仪表板模板集成到 Laravel 5.7 项目中
- ios - [__NSCFBoolean value]:发送到实例的无法识别的选择器
- c# - C# windows 服务和 STA 线程剪贴板
- python - 从csv文件导入行但不是整行
- mysql - MySQL在插入后自动将数据插入到其他表中
- scala - 如何正确管理光滑的数据库连接?