学习笔记 -- C++性能评估工具Perf

news/2024/10/23 5:51:33/

Installation

sudo apt update
sudo apt install linux-tools-common

查看你的内核:

uname -r

我的输出:

$ uname -r
5.15.0-67-generic

安装对应的 tools:

sudo apt install linux-tools-5.15.0-67-generic

Implementation

1、Perf List 状态参数列表

run perf list 得到可检测的状态(stat)参数列表, 包括硬件(Hardware)和软件(Software)的

List of pre-defined events (to be used in -e):cpu-cycles OR cycles                               [Hardware event]stalled-cycles-frontend OR idle-cycles-frontend    [Hardware event]stalled-cycles-backend OR idle-cycles-backend      [Hardware event]instructions                                       [Hardware event]cache-references                                   [Hardware event]cache-misses                                       [Hardware event]branch-instructions OR branches                    [Hardware event]branch-misses                                      [Hardware event]bus-cycles                                         [Hardware event]cpu-clock                                          [Software event]task-clock                                         [Software event]page-faults OR faults                              [Software event]minor-faults                                       [Software event]major-faults                                       [Software event]context-switches OR cs                             [Software event]cpu-migrations OR migrations                       [Software event]alignment-faults                                   [Software event]emulation-faults                                   [Software event]L1-dcache-loads                                    [Hardware cache event]L1-dcache-load-misses                              [Hardware cache event]L1-dcache-stores                                   [Hardware cache event]L1-dcache-store-misses                             [Hardware cache event]L1-dcache-prefetches                               [Hardware cache event]L1-dcache-prefetch-misses                          [Hardware cache event]L1-icache-loads                                    [Hardware cache event]...

2、PERF usage Modes: Counting and Sampling

PERF 支持两种使用模式:计数(Counting)和采样(Sampling)。

计数Counting模式:将指定的监测事件计数,计数值可以是每进程/线程或整个系统的,最终得到监测事件的总计数,不涉及与时间相关的测量。
Counting方式的优点是只需要在事件发生时记录一下计数器即可,因此对系统的性能影响较小。但它并不能告诉我们事件的时间分布情况,因此不能得到事件的节奏信息,例如事件发生的频率随时间的变化情况等。

采样Sampling模式:定期对正在运行的线程/进程进行抽样,以获得事件发生的时间、持续时间、事件发生的上下文等信息。它利用计时器在一段时间内定期采样正在执行的线程/进程状态,其采样率(weight)越高,则可以发现更多的事件,得到更加准确的监测结果。
Sampling方式的优点是可以得到时间信息,便于分析性能瓶颈与更好地理解系统软硬件之间的交互。

2.1 Implement of Counting mode

可以使用perf stat命令来获取counting mode下的统计信息,例如:

perf stat -e cpu-cycles instructions L1-dcache-load-misses ./a.out

如果你在运行一些 perf 命令时遇到下面问题:
在这里插入图片描述

命令行运行:

sudo gedit /proc/sys/kernel/perf_event_paranoid  # 内容改成 -1
sudo gedit /etc/sysctl.conf # 末尾加入 kernel.perf_event_paranoid = -1

2.2 Implement of Sampling

# sampling mode
perf record -e cpu-clock instructions L1-dcache-load-misses -F 1000 ./a.out
perf report # 查看采样结果

其中 -F 用以指定采样频率

或者

# sampling mode
perf record -e cpu-clock instructions L1-dcache-load-misses  -c 100000 ./a.out
perf report # 查看采样结果

其中 -C 100000 代表固定采样周期为100,000 个 cpu-cycles。

如果未设置采样频率或采样周期,默认采样频率为1000Hz。

2.3 Ratios and rates

由于原始事件信息不容易直接反应代码性能。 比如52,202,548 次cache-miss 代表什么样的性能?因此使用比率(Ratio)通常比单一原始事件计数更清晰。
如下是一些常用的用于评估性能的比率参数:
在这里插入图片描述

Reference

Installing and Using Perf in Ubuntu and CentOS


http://www.ppmy.cn/news/45377.html

相关文章

工业通讯应用中主流的常用协议Modbus协议

智联物联技术分享,本期为大家介绍工业通讯常用的主流协议Modbus协议。 Modbus协议的前身叫做Mod协议,常被用于Modicon公司的PLC控制器中,后来Modicon被Schneider收购后随之改名为我们如今所熟悉的modbus协议,现如今广泛应用在物联…

数据结构—单链表

目录 1.前言 2.了解单链表 3.单链表代码实现 3.1 单链表结构体实现 3.2 创建节点 3.3 打印单链表 3.4 尾插 3.5 头插 3. 6 头删 3.7 尾删 3.8 查找 3.9 插入 3.9.1 在pos位置之前插入 3.9.2 在pos位置之后插入(主要使用这种功能)---不需要找…

代码随想录训练营day44|完全背包;518、零钱兑换 II;377、组合总和 Ⅳ

完全背包和01背包问题唯一不同的地方就是,每种物品有无限件。 代码模板: //先遍历物品,再遍历背包 private static void testCompletePack(){int[] weight {1, 3, 4};int[] value {15, 20, 30};int bagWeight 4;int[] dp new int[bagWe…

zsh: command not found: python问题解决

项目场景: mac电脑python命令打印不出来 问题描述 zsh: command not found: python没有python命令,但是本地安装了puyhon 原因分析: 没有配置python环境 解决方案: 提示:这里填写该问题的具体解决方案: 如…

堆排序及top-k问题

堆排序及top-k问题 堆排序建堆向上调整建堆向下建堆 堆排序 top-k问题,建堆的应用 堆排序 堆排序,听名字就是要对堆进行排序,但当我们是无序数据时,首先我们就需要建立一个堆 建堆 这里让我们来回忆一下前面的堆,改…

【C/C++】C++ 四种强制转换

文章目录 基本概念适用场景及代码案例测试运行Demo 基本概念 C 中有四种强制转换方式,分别是: static_cast:用于基本数据类型之间的转换,以及具有继承关系的指针或引用之间的转换。static_cast 在编译时进行类型检查,…

计算机视觉的热门研究方向与发展趋势

计算机视觉产业链 工业界:对学术研究提出需求 最火的两个概念:自动驾驶和元宇宙 相关热点研究方向: (1)建图技术:三维重建技术,包括SLAM、定位、建图、更新等技术;(2&…

基于LDA+SVM实现人脸识别模型

基于LDASVM实现人脸识别模型 描述 人脸识别(图像识别)是机器学习领域十经典的应用,在本质上,人脸识别属于监督学习中的分类问题。前面章节中我们已经学习了支持向量机(SVM),该算法在图像分类领…