在win10主机上的VMware虚拟机里的centos7执行 perf list cache,显示空:

[work@control-plane ~]$ perf list cache

List of pre-defined events (to be used in -e):

[work@control-plane ~]$

原因是cpu cache的计数需要硬件支持,在虚拟机里是需要开启虚拟化cpu性能计数器。

以VMware为例,勾选“虚拟化cpu性能计数器”:

然后重新启动VMware里的centos7,结果提示:

VMware Workstation 不支持此主机上的虚拟化性能计数器。

模块“VPMC”启动失败。

未能启动虚拟机。

原因是之前安装了wsl,启用了windows的虚拟化平台,限制了VMware的虚拟化功能。

将“windows虚拟机监控程序平台”和“虚拟机平台”关闭,如图:

然后重启windows,现在VMware里的centos7可以正常启动了,登录进去再次执行 perf list cache:

[work@control-plane ~]$ perf list cache

List of pre-defined events (to be used in -e):

L1-dcache-load-misses                              [Hardware cache event]
  L1-dcache-loads                                    [Hardware cache event]
  L1-dcache-stores                                   [Hardware cache event]
  L1-icache-load-misses                              [Hardware cache event]
  branch-load-misses                                 [Hardware cache event]
  branch-loads                                       [Hardware cache event]
  dTLB-load-misses                                   [Hardware cache event]
  dTLB-loads                                         [Hardware cache event]
  dTLB-store-misses                                  [Hardware cache event]
  dTLB-stores                                        [Hardware cache event]
  iTLB-load-misses                                   [Hardware cache event]
  iTLB-loads                                         [Hardware cache event]

[work@control-plane ~]$

成功了!

但是此时的wsl登录显示:

请启用虚拟机平台 Windows 功能并确保在 BIOS 中启用虚拟化。
有关信息,请访问 https://aka.ms/wsl2-install

[已退出进程,代码为 4294967295 (0xffffffff)]
现在可以使用Ctrl+D关闭此终端,或按 Enter 重新启动。

所以,我们需要在wsl和VMware中二选一,我个人选择了VMware,因为wsl访问挂载的windows本地文件并没有我预想的那样快,和VMware共享文件夹比没有优势,而且wsl启用cpu计数器也需要一顿繁杂的骚操作。

开始实际使用:

首先设置允许非root用户采集内核数据:

编辑 /etc/sysctl.conf 文件,增加行:
kernel.perf_event_paranoid = -1

然后执行 sudo sysctl -p 使设置生效。

然后测试命令如下:

[work@control-plane perf]$ perf stat -e instructions,cycles,cpu-clock,cpu-migrations,context-switches,page-faults,branches,branch-misses,cache-references,cache-misses -I 1000 -a -d -- ls
#           time             counts unit events
     0.006115780                  0      instructions              #    0.00  insn per cycle         
     0.006115780          7,410,036      cycles                    #    0.710 GHz                    
     0.006115780              10.44 msec cpu-clock                 #    0.010 CPUs utilized          
     0.006115780                  1      cpu-migrations            #    0.096 K/sec                  
     0.006115780                  6      context-switches          #    0.575 K/sec                  
     0.006115780                271      page-faults               #    0.026 M/sec                  
     0.006115780            479,701      branches                  #   45.937 M/sec                  
     0.006115780             20,213      branch-misses             #    4.21% of all branches        
     0.006115780             55,040      cache-references          #    5.271 M/sec                  
     0.006115780             52,931      cache-misses              #   96.168 % of all cache refs    
     0.006115780            514,225      L1-dcache-loads           #   49.243 M/sec                  
     0.006115780             62,730      L1-dcache-load-misses     #   12.20% of all L1-dcache hits  
     0.006115780    <not supported>      LLC-loads                                                   
     0.006115780    <not supported>      LLC-load-misses                                             
[work@control-plane perf]$

从结果看,instructions 和 LLC-loads 还没有数据,暂时无解。

instructions -- 机器指令数目,Instructions/Cycles(IPC:instruction per clock)每时钟周期执行的指令数,此值越大越好,说明程序充分利用了处理器的特性。

LLC-loads -- 最后一级缓冲(Last Level Cache),LLC的后面就是内存,最后一级缓存的不命中对性能的损害尤其严重。

==========================

VMware官方关于CPU 性能监控计数器的说明:

VMware Knowledge Base

---------------------------------------------

CPU 性能监控计数器 (PMC) 为软件提供了一种监控和衡量处理器性能的方法。这些计数器通常由诸如软件探查器等工具使用。从具有 ESX 5.1 及更高版本兼容性(硬件软件 9)的虚拟机开始,可以启用虚拟性能监控计数器 (vPMC) 功能以允许在虚拟机中运行的软件访问此性能信息,如在物理机中运行一样。

最低要求

  • Intel Nehalem Generation 或更高版本处理器,或 AMD Opteron Generation 3 (Greyhound) 或更高版本处理器。
  • 必须在 BIOS 中启用 Intel VT-x 或 AMD-V 才能使硬件辅助虚拟化可行。

虚拟性能计数器型号特定的寄存器 (MSR)

启用虚拟 CPU 性能监控计数器后,以下 MSR 会虚拟化并可用于客户机操作系统。

Intel CPU

  • IA32_PERFEVTSELx
  • IA32_PMCx
  • IA32_FIXED_CTRx
  • IA32_PERF_GLOBAL_CTRL
  • IA32_PERF_GLOBAL_STATUS
  • IA32_PERF_GLOBAL_OVF_CTRL
  • IA32_FIXED_CTR_CTRL

AMD CPU

  • PERF_CTLx
  • PERF_CTRx

null

Solution

虚拟 PMC 的访问方式与基础物理 CPU 的 PMC 访问方式相同。有关详细信息,请参见《Intel 64 和 IA-32 体系结构软件开发人员手册》和《AMD BIOS 和内核开发人员指南 (BKDG)》。

启用虚拟 CPU 性能监控计数器

可以通过 vSphere Web Client 启用虚拟 CPU 性能监控计数器。请参见 Enable Virtual CPU Performance Counters in the vSphere Web Client。

事件计数

虚拟 PMC 可以与物理 CPU 的 PMC 一样对相同的处理器核心事件进行计数。但是,由于虚拟机的虚拟 CPU 可以取消调度一段时间,并且某些客户机指令可以由管理程序仿真,而不是直接由物理 CPU 停用,因此 PMC 无法直接传递到虚拟机。相反,通过管理程序访问 PMC。通过设置 .vmx 文件中的以下虚拟机配置选项,可以控制虚拟 PMC 事件计数行为:

选项 描述

vpmc.freezeMode=hybrid

这是默认行为。instructions retired 和 branches retired 事件仅对客户机指令进行计数。当 CPU 执行管理程序指令时,这些事件不会增加。所有其他事件都会增加,无论物理 CPU 代表虚拟机执行客户机指令还是管理程序指令。当虚拟机未在物理 CPU 上调度时,其虚拟 PMC 始终停止增加。通过这种方式,涉及客户机指令的比率的衡量指标可用于计算在虚拟机上执行这些指令的成本。例如,每个周期的指令数 (IPC) 表示物理 CUP 用来执行虚拟机的每个周期停用的客户指令的平均数量。

vpmc.freezeMode=guest

仅当直接在物理 CPU 上执行客户机指令时,所有事件才会增加。当管理程序代码正在执行时,不会增加任何事件。

vpmc.freezeMode=vcpu

当物理 CPU 正在用于代表虚拟机执行客户机代码或管理程序代码时,所有事件都会增加。仅当虚拟机取消调度时,事件才会停止增加。

可用的性能监控计数器

在某些情况下,性能监控计数器无法虚拟化。当主机已在使用物理 CPU 性能计数器用于其他用途(如以下情况)时会出现此情况:

  • 主机 BIOS 可能使用了一个或多个 PMC。
  • 在 ESX 上,VMkernel 可能使用 PMC 供内部使用。
  • 在 Workstation 和 Fusion 上,主机操作系统或主机上正在运行的探查器可能使用了一个或多个 PMC。
  • Fault Tolerance 功能可能使用了一个或多个 PMC。

一般而言,如果物理 CPU PMC 正在使用中,相应的虚拟 CPU PMC 可能会不起作用,并且不可供客户机使用。通过在虚拟机打开电源时检查非零事件选择 MSR 值,客户机操作系统软件检测到不可用的常规用途的 PMC。通过检查 IA32_FIXED_CTR_CTRL MSR 中相应的非零启用位,客户机软件检测到不可用的固定功能的 PMC。

如果主机正在使用以下固定功能的性能计数器,则可以仿真该虚拟 PMC:

  • 未暂停的核心周期
  • 未暂停的引用周期

仿真周期计数器时,仅当编程为在操作系统和用户模式下计数时,计数器才可正常运行。此外,仿真的核心周期计数器可以对引用周期而不是核心周期进行计数。

vMotion 和检查点兼容性

启用虚拟 PMC 功能时,还会在虚拟机在主机间迁移之前执行其他 CPU 兼容性检查。源和目标 CPU 的性能监控事件必须可兼容。源和目标 CPU 上的性能监控事件列表必须相同。一般而言,如果两个 CPU 属于同一微架构,则它们拥有可兼容的性能监控事件。有关每个 CPU 的性能监控事件列表,请参见《Intel 64 和 IA-32 体系结构软件开发人员手册》和《AMD BIOS 和内核开发人员指南 (BKDG)》。此外,要成功迁移虚拟机,源 CPU 上可用的所有计数器也必须在目标 CPU 上可用。

Enhanced vMotion Compatibility

无法在使用 Enhanced vMotion Compatibility 的虚拟机中启用虚拟性能监控计数器。

perf之cpu性能计数器相关推荐

  1. 官方解释Vmware中虚拟化Intel VT-x/EPT、CPU性能计数器,虚拟化IOMMU

    英特尔® 虚拟化技术 (VT-x) 英特尔® 虚拟化技术 (VT-x) 可使一个硬件平台起到多个"虚拟"平台的作用.它通过限制停机时间提高可管理性,并通过将计算活动隔离到多个独立分 ...

  2. Vmware中虚拟化Intel VT-x、CPU性能计数器、 虚拟化IOMMU到底是什么?

    本文是https://alvincr.com/2021/01/vmware-win10/一文的一部分内容,相关内容请参考我的博客alvincr.com 2.2 虚拟化Intel VT-x 说明 VT英 ...

  3. Linux C 程序性能测试 valgrind callgrind分析函数耗时、perf分析函数CPU消耗

    利用valgrind callgrind分析函数时间消耗(尤其在有网络.磁盘等有IO操作下,分析调用时间.在被IO阻塞情况下,不会明显占用CPU资源) 编写测试程序 #include <stdi ...

  4. 【Linux 性能优化】利用perf和CPU使用率定位异常函数

    博主未授权任何人或组织机构转载博主任何原创文章,感谢各位对原创的支持! 博主链接 文章目录 CPU 使用率 进程运行情况查询 使用工具查看CPU使用率 定位导致CPU 使用率过高的函数 perf to ...

  5. CPU使用率的查看以及性能分析(perf top/record/report)

    目录 CPU使用率 查看CPU使用率(top.pidstat解释) CPU使用率过高 perf top perf record 和 perf report CPU使用率 Linux通过/proc虚拟文 ...

  6. 《Linux就该这么学》学习随笔第二天——VMware虚拟机安装“该主机cpu类型不支持虚拟化性能计数器。”

    今天在安装虚拟机的时候遇到一个问题,记录下我的排查步骤以方便后来者. 问题描述: 虚机配置完成后,挂载系统镜像后开启虚拟机,虚机报错.提示"该主机cpu类型不支持虚拟化性能计数器,开启模块V ...

  7. Android/Linux系统性能分析之-CPU

    1. 概述: CPU推动了所有软件的运行,因而通常是系统性能分析的首要目标:现代系统一般有多颗CPU,通过内核调度器共享给所有运行软件.当需求的CPU资源超过了系统力所能及的范围时,进程里的线程(或者 ...

  8. (一文了解)linux性能分析之CPU篇

    目录 前言 一.CPU 性能指标 1.CPU使用率 2.负载均衡 3.上下文切换 4.CPU缓存命中率 二.常用工具 1.uptime 2.vmstat 3.mpstat 4.top 5.sar 6. ...

  9. 【错误记录】VMware 虚拟机报错 ( 虚拟化性能计数器需要至少一个可正常使用的计数器, 模块 “VPMC“ 启动失败 , 未能启动虚拟机 )

    文章目录 一. 报错信息 二. 解决方案 一. 报错信息 交叉编译时需要用到虚拟机 , 打开后报这样的错误 ; 虚拟化性能计数器需要至少一个可正常使用的计数器, 模块 "VPMC" ...

最新文章

  1. hdu 2896:病毒侵袭
  2. python官网怎么下载-python下载官网
  3. 实现类似shared_ptr的引用计数
  4. 电影票预售系统1.0
  5. 树莓派修改root密码
  6. 火遍全网的2000款热门短视频剪辑素材+经典音效包素材来了,还不快收下
  7. 引入tinymce-vue后调试器报错 Refused to apply styl
  8. web页面左右双向箭头(利用CSS样式和图片)——20181130
  9. c# 十六进制数据转十六进制字符串
  10. 常见的国家语言缩写以及语言的代码
  11. 锁定计算机后游戏掉线,Win7旗舰版系统下玩游戏挂机总是掉线的解决方法
  12. 在MySQL中第一章选择题_北大青鸟第二学期 123章数据库选择题
  13. 微信小程序和微信公众号关联
  14. WeCode在线少儿编程-中美教育大对比,让孩子学习更高效
  15. 斯蒂夫·乔布斯 与苹果公司
  16. 【数据结构】顺序表的创建、插入、删除、合并
  17. 格里高利历java_格里高利历java错误
  18. 计算机网络笔记及思维导图(3)——数据链路层
  19. linux如何安装黑客帝国cmatrix代码雨效果
  20. 局域网-无法访问网上邻居解决方法

热门文章

  1. [欠驱动机器人]2.单摆
  2. 如何选用PCB表面处理工艺?
  3. 零基础学Java,自学好,还是报班好?
  4. 计算机网络学习3:计算机网络的定义及分类、性能指标
  5. 判断水仙花数 php,php 判断 水仙花数
  6. Xshell正版免费--远程连接工具,再也不用找破解版了!
  7. [工具]磁盘空间分析工具 C盘清理
  8. navicat 查看mysql版本_查看mysql的版本号
  9. JRebel入门使用
  10. curl模拟登录新浪微博