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

  • 以上示例结果仅供参考,实际结果会因程序、硬件和系统配置等因素而有所不同。
  • 要获得更准确的性能数据,建议您多次运行程序并取平均值。
相关推荐
编程圈子17 小时前
I.MX6U 裸机开发2. 芯片简介、汇编基础及GPIO操作准备工作
嵌入式硬件·arm
CyberSecurity_zhang3 天前
Armv8的安全启动
安全·arm·tf-a·tf-m·安全启动
苏寅3 天前
arm64-v8a 和 armeabi-v7a 有啥区别?
arm
小李飞刀李寻欢5 天前
vm.max_map_count 表示啥意思啊?通俗易懂点,有单位么?262144表示啥意思?
jvm·elasticsearch·内存·map·es·服务
ShiinaKaze7 天前
用图说明 CPU、MCU、MPU、SoC 的区别
mcu·cpu·mpu·soc·计算机架构
冷凝雨11 天前
【复旦微FM33 MCU 外设开发指南】外设篇1——硬件除法器
arm·1024程序员节·复旦微·fm33·fm33lc0
嵌入式小能手11 天前
串口通讯编程示例之开发板测试
linux·嵌入式硬件·arm
初级代码游戏15 天前
折腾记:arm上的mono和.net
.net·arm·mono
矛取矛求17 天前
C++ 中 new 和 delete 详解,以及与 C 中 malloc 和 free 的区别
c语言·开发语言·数据结构·c++·缓存·内存·cplusplus
千千道18 天前
I.MX6U 之实时时钟(RTC)详解
arm开发·单片机·物联网·arm