文章目录
-
- [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 注意:
- 以上示例结果仅供参考,实际结果会因程序、硬件和系统配置等因素而有所不同。
- 要获得更准确的性能数据,建议您多次运行程序并取平均值。