CPU性能优化--基于处理器事件的采样

ops/2024/12/14 12:49:49/

基于处理器事件的采样processor event based sampling PEBS 是CPU的另一种非常有用的特性,PEBS被用来在每个采样点获取更多的补充数据。在Intel处理器中,PEBS是在NetBrust微架构开始i引入的,在AMD处理器中,类似的特性叫基于指令的采样IBS。

这些补充数据有定义好的格式,为PEBS配置性能计数器之后,处理器会保存PEBS缓冲区的内容,并将之转存到内存中。记录的信息包括处理器的架构状态,例如,通用的寄存器,EAX, EBX, ESP等,指令指针寄存器EIP和标志寄存器EFLAGS 等的状态,

用户可以通过dmesg命令来检查PEBS是否启用。

字节偏移 字段 字节偏移 字段

EFLAGS R11

EIP R12

RAX R13

EBX R14

ECX R15

EDX

ESI

EDI

EBP

ESP

linux perf工具没像处理LBR那样原始PEBS内容导出来基于具体需要处理PEBS记录导出部分数据所以不可能通过linux perf工具导出原始PEBS数据linux perf工具提供一些原始采样数据处理后PEBS数据可以通过命令perf report -D获得获得原始PEBS记录可以使用pebs-grabber 工具

6.3.1 精准事件

出现溢出导致中断处理器需要一定时间停止执行标记触发溢出指令这对现代复杂乱序执行CPU架构来说实现起来非常困难

引入滑动概念被定义触发性能事件IP标记事件IPPEBS记录IP字段距离滑动使得寻找导致性能问题指令变得困难实际上造成性能问题想象一个缓存命中次数很多程序热点汇编代码如下load1,load2,load3 性能剖析工具load3识别导致缓存未命中指令然而实际load1才是通常这会新手带来很多困惑感兴趣读者可以intel Developer Zone website找到这类问题潜在原因更多信息

滑动问题通过处理器自身记录PEBS记录指令地址得到缓解PEBS记录中EventingIP字段表示就是导致性能事件指令需要硬件支持并且通过支持一部分性能事件这样事件称为精准事件具体微架构精准事件详见下面列出了Skylake 微架构精确事件

INST_RETIRED

OTHER_ASSISTS

BR_INST_RETIRED

BR_MISP_RETIRED

FRONTEND_RETIRED

HLE_RETIRED

RTM_RETIRED

MEM_INST_RETIRED

MEM_LOAD_RETIRED

MEM_LOAD_L3_HIT_RETIRED

TMA分析方法严重依赖精准事件定位效率执行代码具体位置

easyperf 博客一篇文章介绍使用精准事件缓解滑动例子linux perf工具用户需要事件后面增加ppp后缀启动精准标注

perf record -e cpu/event=0xd1

6.3.2 降低采样开销

频繁产生中断分析工具采集中断服务过程程序状态都需要操作系统交互这会消化非常多系统资源这也是为何有些硬件允许无中断自动特定缓冲区采样多次只有特定缓冲区满了处理器才会发起中断缓冲区内容刷新内存中这种方式开销相比传统基于中断采样开销要低

PEBS配置性能计数器计数器溢出条件支撑PEBS机制溢出处理器生成PEBS事件PEBS事件中处理器会把PEBS记录存储PEBS缓冲区然后清理计数器溢出状态恢复初始值如果缓冲区CPU发起一次中断

注意PEBS缓冲区位于主存大小可以设置性能分析工具工作分配配置内存区域CPU导出PEBS记录

6.3.3 分析内存访问

内存访问很多应用程序性能关键因素有了PEBS就有可能收集程序内存访问相关详细信息数据地址剖析可以实现这个功能为了提供采样加载存储指令更多信息利用了PEBS特性如下字段

数据线性地址0x98

数据源编码0xa0

时延 0xA8

如果性能事件支持数据线性地址功能并且启用了功能CPU导出采样内存访问地址时延请注意这个功能不会记录所有存储加载指令否则开销非常大所以只是内存访问进行采样例如大概只会分析1000访问中一次你可以根据需要设置每秒采样次数

PEBS扩展重要使用场景之一就是检测真伪共享linux perf 工具严重依赖DLA数据寻找争议可能导致真伪共享内存访问

此外有了数据地址剖析工具帮助用户可以获得程序中内存访问一般统计信息

从上面输出我们可以看到程序加载指令8%通过L1缓存实现15%通过 DRAM实现


http://www.ppmy.cn/ops/141821.html

相关文章

活动预告 |【Part1】Microsoft Azure 在线技术公开课:使用 Microsoft Fabric 实现数据湖仓

课程介绍 通过 Microsoft Learn 免费参加 Microsoft Azure 在线技术公开课,掌握创造新机遇所需的技能,加快对 Microsoft Cloud 技术的了解。参加“使用 Microsoft Fabric 实现数据湖仓”活动,了解如何在 AI 的帮助下统一数据分析。了解如何简…

axios的引入和基本使用

一、axios的引入 使用 pnpm add axios 二、使用axios 三、axios的使用方法补充 axios除了直接使用它实例上的方法,还可以通过配置的方式进行使用axios({}),传入一个对象,这个对象可以有如下属性: url(字符串&#…

Polkadot 11 月生态月报:3900万交易量、69%增长率,技术与社区齐头并进

原文:https://x.com/Polkadot/status/1865118662069490074 编译:OneBlock 上个月对 Polkadot 生态来说可谓是跌宕起伏,从创下交易记录到开创性合作,Polkadot 热度不断。展现出强大的技术实力和蓬勃发展的社区活力。在回顾本月亮点…

3D开发工具HOOPS对B-Rep的支持:提升3D建模与可视化的精度与效率

在现代3D建模与计算机辅助设计(CAD)领域,“B-Rep(边界表示)"是一种广泛应用的几何建模技术。B-Rep通过定义三维对象的边界和拓扑结构,使得复杂的几何形状能够在计算机中准确表示并进行分析。作为前面的…

12.10 C语言作业3

课上类的三个练习题的构造函数 1. #include <iostream> using namespace std; class Rec {int length;int width; public:Rec(int length,int width):length(length),width(width){}void set_length(int l);void set_width(int w);int get_length();int get_width();v…

Rust 从入门到精通:开启高效安全编程之旅

摘要&#xff1a; 本文全面深入地介绍了 Rust 编程语言的学习路径&#xff0c;从基础语法起步&#xff0c;逐步深入到内存管理、并发编程、错误处理等核心特性&#xff0c;再到高级主题如宏编程、异步编程以及与其他语言的交互等方面&#xff0c;旨在帮助读者系统地掌握 Rust 语…

【LC】240. 搜索二维矩阵 II

题目描述&#xff1a; 编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target 。该矩阵具有以下特性&#xff1a; 每行的元素从左到右升序排列。每列的元素从上到下升序排列。 示例 1&#xff1a; 输入&#xff1a;matrix [[1,4,7,11,15],[2,5,8,12,19],[3,6,…

KlearMax2.0一键AI换脸/图像变清晰增强老照片黑白修复

KlearMax 2.0 是一款功能强大的AI图像处理软件&#xff0c;最新版本带来了多项新功能&#xff0c;包括AI换脸、图像清晰度增强、老照片修复和上色等。 利用先进的智能算法&#xff0c;KlearMax 2.0能够一键处理模糊图像、修复老照片并平衡颜色&#xff0c;锐化细节&#xff0c;…