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

  • 以上示例结果仅供参考,实际结果会因程序、硬件和系统配置等因素而有所不同。
  • 要获得更准确的性能数据,建议您多次运行程序并取平均值。
相关推荐
シ風箏1 天前
Neo4j【环境部署 02】图形数据库Neo4j在Linux系统ARM架构下的安装使用
linux·数据库·arm·neo4j
徐某人..4 天前
ARM嵌入式学习--第八天(PWM)
arm开发·学习·arm
徐某人..5 天前
ARM嵌入式学习--第七天(GPT)
学习·arm
驱动小百科6 天前
NPU是什么?电脑NPU和CPU、GPU区别介绍
电脑·cpu·gpu·npu·电脑硬件
whik11948 天前
Keil-MDK开发环境编译后axf自动转换bin格式文件
stm32·arm·keil·axi·bin·mdk
编程零零七10 天前
【Python】tensorflow中的argmax()函数
开发语言·python·信息可视化·数据分析·arm·python学习·python数据可视化
亚瑟-灰太狼11 天前
scudo基础学习
内存·memory
嵌入式小能手12 天前
shell编程入门之提取字符并设置rtc时间
linux·单片机·嵌入式硬件·arm
和码说15 天前
编程考古-CPU(上)
cpu·计算机科学·编程考古
爱喝纯牛奶的柠檬16 天前
基于stm23的智慧宿舍系统 (DAY10)_小程序
stm32·嵌入式硬件·物联网·阿里云·小程序·arm