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

  • 以上示例结果仅供参考,实际结果会因程序、硬件和系统配置等因素而有所不同。
  • 要获得更准确的性能数据,建议您多次运行程序并取平均值。
相关推荐
佛祖保佑永不宕机2 天前
麒麟系统ARM64架构部署mysql、jdk和java项目
java·arm
CloudPilotAI3 天前
“海外滴滴”Uber的Arm迁移实录:重构大规模基础设施
arm开发·架构·arm
scdifsn5 天前
动手学深度学习12.4.硬件-笔记&练习(PyTorch)
pytorch·笔记·深度学习·缓存·内存·硬盘·深度学习硬件
toradexsh7 天前
NXP iMX8MP ARM 平台多屏幕克隆显示测试
linux·arm·nxp·toradex·imx8mp
二年级程序员12 天前
ARM介绍及其体系结构
嵌入式硬件·arm
农夫山泉2号16 天前
【“星瑞” O6 评测】 — CPU llama.cpp不同优化速度对比
cpu·llama·llama.cpp·星瑞o6
单车少年ing18 天前
linux两个特殊的宏 _RET_IP_ 和_THIS_IP_ 实现
linux·arm
清霜之辰18 天前
安卓 Compose 相对传统 View 的优势
android·内存·性能·compose
大新新大浩浩22 天前
arm64适配系列文章-第六章-arm64环境上rabbitmq-management的部署,构建cluster-operator
rabbitmq·arm
大新新大浩浩22 天前
arm64适配系列文章-第九章-arm64环境上sentinel的部署
arm