如何使用perf 统计cpu和内存?

文章目录

    • [0. 概要](#0. 概要)
    • [1. 使用perf统计CPU和内存的结果示例](#1. 使用perf统计CPU和内存的结果示例)
      • [1.1 **统计CPU时钟周期:**](#1.1 统计CPU时钟周期:)
      • [1.2 **统计指令数量:**](#1.2 统计指令数量:)
      • [1.3 **统计缓存命中率:**](#1.3 统计缓存命中率:)
      • [1.4 **统计内存带宽的示例输出**](#1.4 统计内存带宽的示例输出)
    • [2 **注意:**](#2 注意:)

0. 概要

PMU(Performance Monitoring Unit)是处理器内部的一个硬件单元,用于监控处理器的性能。它可以统计各种与性能相关的事件,例如CPU时钟周期、指令数量、缓存命中率等等。这些统计信息可以用来分析程序的性能瓶颈,并进行优化。

在Linux系统上,常用的PMU统计工具包括perf。perf是内核自带的工具,功能比较简单。

以下是一些使用perf统计CPU和内存的示例:

  • 统计CPU时钟周期:

    perf stat -e cycles

  • 统计指令数量:

    perf stat -e instructions

  • 统计缓存命中率:

    perf stat -e cache-misses

  • 统计内存带宽:

    perf stat -e mem/bytes-read,mem/bytes-written

除了上述的基本统计之外,perf还支持更复杂的统计功能,例如分支预测命中率、浮点运算单元利用率等等。这些功能可以通过使用perf的-e参数和-a参数来实现。

1. 使用perf统计CPU和内存的结果示例

以下是使用perf统计CPU和内存的详细结果示例:

1.1 统计CPU时钟周期:

bash 复制代码
perf stat -e cycles

示例输出:

复制代码
perf stat -e cycles

Performance counters:
                cycles:       1317698919

Elapsed time:     4.009225s
CPU time:        4.009225s
     User:        0.000000s
     Sys:         0.000000s
     Idle:        3.999225s

说明:

  • cycles: 表示CPU时钟周期的数量,在本例中为1317698919。
  • Elapsed time: 表示程序运行的总时间,在本例中为4.009225秒。
  • CPU time: 表示程序在CPU上运行的时间,在本例中为4.009225秒。
  • User: 表示程序在用户态运行的时间,在本例中为0秒。
  • Sys: 表示程序在内核态运行的时间,在本例中为0秒。
  • Idle: 表示CPU空闲的时间,在本例中为3.999225秒。

1.2 统计指令数量:

bash 复制代码
perf stat -e instructions

示例输出:

复制代码
perf stat -e instructions

Performance counters:
                instructions:    324528753

Elapsed time:     4.009225s
CPU time:        4.009225s
     User:        0.000000s
     Sys:         0.000000s
     Idle:        3.999225s

说明:

  • instructions: 表示程序执行的指令数量,在本例中为324528753。
  • Elapsed time: 表示程序运行的总时间,与统计CPU时钟周期结果相同。
  • CPU time: 表示程序在CPU上运行的时间,与统计CPU时钟周期结果相同。
  • User: 表示程序在用户态运行的时间,与统计CPU时钟周期结果相同。
  • Sys: 表示程序在内核态运行的时间,与统计CPU时钟周期结果相同。
  • Idle: 表示CPU空闲的时间,与统计CPU时钟周期结果相同。

1.3 统计缓存命中率:

bash 复制代码
perf stat -e cache-misses

示例输出:

复制代码
perf stat -e cache-misses

Performance counters:
              L1-dcache-loads:       13177019
           L1-dcache-load-misses:        13177019
              L1-dcache-stores:        13176989
           L1-dcache-store-misses:        13176989
              L2-dcache-loads:           0
           L2-dcache-load-misses:           0
              L2-dcache-stores:           0
           L2-dcache-store-misses:           0
                LLC-loads:           0
              LLC-load-misses:           0
                LLC-stores:           0
              LLC-store-misses:           0

Elapsed time:     4.009225s
CPU time:        4.009225s
     User:        0.000000s
     Sys:         0.000000s
     Idle:        3.999225s

说明:

  • L1-dcache-loads: 表示访问L1数据缓存的加载指令数量,在本例中为13177019。
  • L1-dcache-load-misses: 表示L1数据缓存未命中的加载指令数量,在本例中为13177019。
  • L1-dcache-stores: 表示访问L1数据缓存的存储指令数量,在本例中为13176989。
  • L1-dcache-store-misses: 表示L1数据缓存未命中的存储指令数量,在本例中为13176989。
  • L2-dcache-loads: 表示访问L2数据缓存的加载指令数量,在本例中为0

1.4 统计内存带宽的示例输出

以下是使用perf统计内存带宽的详细结果示例:

bash 复制代码
perf stat -e mem/bytes-read,mem/bytes-written

示例输出:

复制代码
perf stat -e mem/bytes-read,mem/bytes-written

Performance counters:
                mem/bytes-read:   1073741824
              mem/bytes-written:   1073741824

Elapsed time:     4.009225s
CPU time:        4.009225s
     User:        0.000000s
     Sys:         0.000000s
     Idle:        3.999225s

说明:

  • mem/bytes-read: 表示程序从内存中读取的字节数,在本例中为1073741824字节。
  • mem/bytes-written: 表示程序写入内存的字节数,在本例中为1073741824字节。
  • Elapsed time: 表示程序运行的总时间,与其他示例结果相同。
  • CPU time: 表示程序在CPU上运行的时间,与其他示例结果相同。
  • User: 表示程序在用户态运行的时间,与其他示例结果相同。
  • Sys: 表示程序在内核态运行的时间,与其他示例结果相同。
  • Idle: 表示CPU空闲的时间,与其他示例结果相同。

2 注意:

  • 以上示例结果仅供参考,实际结果会因程序、硬件和系统配置等因素而有所不同。
  • 要获得更准确的性能数据,建议您多次运行程序并取平均值。
相关推荐
才鲸嵌入式14 天前
C++相比于C语言增加了哪些概念?
c语言·c++·单片机·嵌入式·arm·面向对象·软件
liuzhilongDBA15 天前
Linux内存进阶
linux·运维·服务器·内存
ID244251272015 天前
Linux设备框架:kset与kobject基本介绍
linux·c语言·arm开发·驱动开发·嵌入式硬件·linux内核·arm
hyh-hz16 天前
4 Studying《ARM System Developer’s Guide》9-15
arm
hyh-hz18 天前
3 Studying《THE CACHE MEMORY BOOK》
cpu
hyh-hz19 天前
1 Studying《Arm A715 Software Optimization Guide》
arm
异常君20 天前
用户态与内核态:Java 程序员必懂的两种执行状态
性能优化·操作系统·cpu
飞凌嵌入式21 天前
基于RK3588,飞凌教育品牌推出嵌入式人工智能实验箱EDU-AIoT ELF 2
linux·人工智能·嵌入式硬件·arm·nxp
toradexsh24 天前
HDMI 显示器热插拔对应显示应用启停测试
arm·nxp·hdmi·imx8qm·hotplug
得物技术25 天前
从CPU冒烟到丝滑体验:算法SRE性能优化实战全揭秘|得物技术
cpu