You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

VirtualBox Linux虚拟机中执行perf stat mem-loads事件报错求助

解决VirtualBox中perf stat提示mem-loads事件无效的问题

这个问题我之前帮不少开发者排查过,大概率是VirtualBox虚拟化环境对性能计数器(PMU)的支持有限,或者事件名称的兼容性问题,咱们一步步来解决:

  • 检查VirtualBox的CPU虚拟化配置
    VirtualBox默认可能没完全开启CPU性能计数器的支持,你需要先关闭虚拟机,进入「设置」→「系统」→「处理器」:

    1. 确保勾选了「启用VT-x/AMD-V」(前提是你的物理CPU支持该特性)
    2. 部分新版本VirtualBox里还有「性能计数器」相关的扩展选项,也需要勾选上
      保存设置后重启虚拟机,再尝试执行perf stat -e mem-loads,mem-stores ./test。
  • 确认当前系统可用的perf内存事件
    不同CPU架构、内核版本或虚拟化环境下,perf的事件别名可能存在差异。你可以执行perf list memory来查看当前系统支持的所有内存相关事件——比如有些环境下可能需要用mem_loads(下划线)而非mem-loads(横杠),或者只能使用原始的PMU事件编码。

  • 尝试使用原始PMU事件编码
    如果mem-loads这类高层别名不被支持,你可以直接用CPU对应的原始事件代码。比如对于Intel CPU:

    • 内存加载事件对应的编码是r00000001:u
    • 内存存储事件对应的编码是r00000002:u
      执行命令改成:perf stat -e r00000001:u,r00000002:u ./test
      注意:AMD、ARM等其他架构的事件编码不同,你可以通过perf list查看对应原始编码,或者参考CPU官方手册。
  • 检查内核的perf支持状态
    有些精简版Linux虚拟机的内核,编译时可能没开启CONFIG_PERF_EVENTS或CONFIG_X86_PERF_EVENT_INTEL_UNCORE这类PMU相关选项。你可以通过zcat /proc/config.gz | grep PERF_EVENTS检查,如果结果是CONFIG_PERF_EVENTS=y才是开启状态,否则需要更换内核或重新编译内核开启相关选项。

  • 升级VirtualBox和系统内核
    旧版本VirtualBox对PMU的支持很差,升级到最新版(比如7.x系列),同时把虚拟机里的Linux内核升级到5.15以上的稳定版,通常能解决大部分虚拟化环境下的perf事件支持问题。

内容的提问来源于stack exchange,提问作者Jason

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 04:15:26