如何使用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 注意:

  • 以上示例结果仅供参考,实际结果会因程序、硬件和系统配置等因素而有所不同。
  • 要获得更准确的性能数据,建议您多次运行程序并取平均值。
相关推荐
张一西4 天前
ARM学习(42)CortexM3/M4 MPU配置
stm32·arm·mpu·nxp·arm架构·cortexm3·cortexm4
久绊A6 天前
理解CPU负载与使用率
服务器·网络·数据库·cpu
CV金科8 天前
freertos的基础(二)内存管理:堆和栈
stm32·开源·arm·freertos·risc-v
代码改变世界ctw9 天前
Armv8/Armv9架构从入门到精通-介绍
arm·trustzone·atf·tee·armv8·armv9·周贺贺
Hi2024021712 天前
RK3588上CPU和GPU算力以及opencv resize的性能对比测试
linux·opencv·arm·gpu·opencl·算力测试·mali-gpu
阿隆ALong15 天前
亚矩阵云手机:跨境出海直播的全方位利器
大数据·服务器·网络安全·矩阵·云计算·arm·信息与通信
世事如云有卷舒18 天前
《learn_the_architecture_-_trustzone_for_aarch64_102418_0101_03_en》学习笔记
arm
千千道19 天前
linux的线程同步(条件变量和锁)
linux·arm开发·驱动开发·物联网·arm
冬瓜31221 天前
汇编点灯练习
汇编·arm
阿隆ALong24 天前
云手机:小红书矩阵搭建方案
线性代数·智能手机·矩阵·云计算·arm