在来宾 Linux VM 中启用 PEBS 性能计数器

问题描述 投票:0回答:1

我正在 Saphire Rapid 服务器上使用启用了

kvm
的 qemu。我想使用英特尔的
PEBS
来宾内部采样。

我的印象是,自 Linux 内核 6.3 以来,对

kvm
计数器虚拟化有了一些
PEBS
支持,如果我在 qemu 源代码树中 grep 单词“pebs”,我会发现一些提及。

我跑步:

perf record -d -e cpu/event=0xd1,umask=0x20/ppu -c 1 <command>

在 qemu-kvm 来宾虚拟机设置中使用

-cpu host
参数。

我使用的是Linux内核6.6。无论是客人还是主人。

pebs
标志在虚拟机内的/proc/cpuinfo中设置。

命令返回给我:

PMU Hardware doesn't support sampling/overflow-interrupts
.

相同的命令在主机中成功运行。

所以,我想知道是否有某种特定版本的 qemu 或特定参数可以在来宾虚拟机内部启用

PEBS
使用?

或者

PEBS
仍然不支持使用?

linux kvm
1个回答
0
投票

可以在具有 QEMU/KVM 的来宾 Linux VM 内启用英特尔基于精确事件的采样 (PEBS) 硬件计数器,但需要主机和来宾内核的特定配置和支持。

KVM 来宾中支持 PEBS

KVM 来宾中对 PEBS 虚拟化的最初支持是在 Linux 内核 3.14 中引入的,并带有来自 Andi Kleen 的补丁。这允许通过直接将 PEBS 记录传送到来宾缓冲区并固定来宾页面以避免交换问题,在 KVM 来宾中进行 PEBS 分析。

但是,实施过程中也存在一些限制和担忧,例如:

  • 不仅需要固定调试存储区域,还需要固定映射调试存储区域的来宾页表,以防止来宾
    fork()
    创建可以换出的新页表出现问题。
  • EPT(扩展页表)代码拆除调试存储区域的映射的潜在问题。
  • 缺乏对主机之间 PEBS 状态迁移的支持。

现状和要求

根据互联网搜索分析,KVM 中的 PEBS 虚拟化支持似乎随着时间的推移有所改进,但仍然存在一些要求和潜在的限制:

  1. 内核版本:主机和来宾内核都应该足够新以支持 PEBS 虚拟化。互联网搜索结果提到正在使用 Linux 内核 5.17 和 6.6,因此最近的内核版本似乎提供了支持。

  2. CPU 支持:PEBS 虚拟化可能仅限于特定的 CPU 型号或架构。初始补丁提到仅支持基于 Silvermont 的系统。

  3. QEMU 版本:需要支持 KVM 的最新版本的 QEMU。互联网搜索结果提到了 QEMU 6.2,但可能需要更新的版本以获得更好的支持。

  4. 内核配置:确保为 PEBS 虚拟化启用必要的内核配置选项,例如

    CONFIG_PEBS_VIRTUALIZATION
    CONFIG_PEBS_GUEST_SUPPORT

  5. QEMU 命令行选项:启动来宾 VM 时使用

    -cpu host
    选项以确保来宾 CPU 型号与主机匹配。

  6. 访客配置:在访客内部,确保在

    /proc/cpuinfo
    中设置 PEBS 标志,并且
    perf
    命令能够访问 PEBS 计数器。

如果您已执行所有必要的步骤,但 PEBS 仍然无法在来宾虚拟机内工作,则当前实施可能仍然存在一些限制或问题。您可能需要进一步调查或咨询 QEMU/KVM 社区以获取更具体的指导。

值得注意的是,互联网搜索调查表明 PEBS 虚拟化支持是一项持续的努力,未来的内核和 QEMU 版本可能会有改进或更改。

© www.soinside.com 2019 - 2024. All rights reserved.