鲲鹏devkit性能分析工具介绍(三)

news2024/11/27 0:40:23

鲲鹏devkit性能分析工具介绍(三)

本篇主要讲解鲲鹏devkit性能分析工具的访存分析功能

访存分析

访存统计分析基于CPU访问缓存和内存的PMU事件,分析存储的访问次数、命中率、带宽等情况。

Miss事件分析基于ARM SPE(Statistical Profiling Extension)的能力实现。SPE针对指令进行采样,同时记录一些触发事件的信息,包括精确的PC指针信息。利用SPE能力可以对业务进行LLC Miss,TLB Miss,Remote Access,Long Latency Load等Miss类事件分析,并精确的关联到造成该事件的代码。用户可以有针对性地修改自己的程序,降低Miss事件发生的几率,提高程序处理性能。

伪共享分析基于ARM SPE(Statistical Profiling Extension)的能力实现。SPE针对指令进行采样,同时记录一些触发事件的信息,包括精确的PC指针信息。利用SPE能力进行伪共享分析,可以得到发生伪共享的次数和比例、指令地址和代码行号、NUMA节点等信息。基于这些信息,用户可以有针对性地修改自己的程序,降低发生伪共享的几率,提高程序处理性能。

NUMA精细化分析基于ARM SPE(Statistical Profiling Extension)能力实现。SPE针对指令进行采样,同时记录一些触发事件的信息,包括精确的PC指针信息。利用SPE能力可以用于收集系统中所有进程的NUMA性能,找到Top N (e.g. N = 10) NUMA性能最差的进程及这些进程中的内存热区,各NUMA节点间内存访问统计矩阵,识别节点间内存访问不平衡状态,并得到相关优化建议。
在这里插入图片描述
视频中以鲲鹏处理器为例,因为鲲鹏处理器是NUMA架构,并存在Cache机制,cpu核方位数据时,存在本地跨带访问Cache和内存的情况,不同的访问路径,在时延和带宽上都相差很大,并严重影响系统和程序性能。
一般出处理方法有一下几种
几种简单的访存优化方法

  • 减少不必要的内存引用
  • 按顺序访问数据
  • 按顺序存储同时要访问的数据

访存统计分析

查看分析报告通过报告可以查看访存信息

当L1C/L2C/L3c命中率较低时,说明CPu需要花费更多时间去内存读取数据,此时需要排查程序优化内存访问,如:数据访问负荷cache的时间和空间局部性、大数据结构cache line对齐、多线程编程时避兔falsesharing等等。TLB命中率较低时,可以调大页表大小。

在这里插入图片描述
在这里插入图片描述
如果出现大量的跨DIE访问或跨片访问,需要考虑对相关进程/线程进行绑核操作。
通过核绑操作可以直接避免跨区的现象发生,也正是因为这样,对鲲鹏处理器上的应用进行访存分析是十分有必要的

访存统计分析原理

原理:
基于处理器的core和Uncore事件统计CPU核访问cache和DDR的性能数据,分析对缓存和内存的访问次数.命中率、带宽等情况。

在这里插入图片描述
uncore 事件采集的硬件实现与通用实现类似,都是通过一对对事件选择寄存器和事件计数寄存器来实现的。具体细节可查看 Intel 手册

在内核接口上,uncore 性能事件已经不是原本 core 上的 pmu 设备了,所以原有的 perf 接口并不知道用户采集哪个 CBox 上的性能数据,所以 perf_event 在原有的基础上在 type 参数上进行扩展接口(换句话说 uncore 事件都是需要单独的内核驱动的)。

好在内核在 /sys/devices/uncore_*/type 文件直接暴露了该参数,在接口和工具的使用过程中,可以直接读取该文件的值

想来应该是通过这些数据进行分析显示到分析报告中的

访存分析——Miss事件分析

实现LLC Miss,TLB Miss,Remote Access,Long Latency Load等Miss类事件分析。并精确的关联到造成该事件的代码。用户可以有针对性地修改自己的程序,降低发生对应事件发生的几率,提高程序处理性能。

  1. LLC Miss:针对访问uLc的请求及其Miss情况进行分析
  2. TLB Miss:对内存访问或取指过程中TLB中没有当前VA到PA的映射而造 成Miss的情况进行分析。
  3. Long Latency Load:从LOAD指令开始执行到数据返回经历的访存延时分析
    在这里插入图片描述

Miss事件分析原理

Miss事件分析基于ARM SPE (Statistical Profiling Extension))能力实现。SPE是针对指令进行采样,同时记录一些触发事件的信息,包括精确的Pc指针信息。利用该项能力可以用于对应用程序进行lLC MissTLB MissRemote AccessLong Latency Load等Miss类事件分析,并精确的关联到造成该事件的代码。
在这里插入图片描述
相对于PMU事件,SPE可以解决PMU事件无法精确对应到PC指针的问题。

访存分析——伪共享分析

首先我们先看看什么是伪共享:

伪共享就是多线程操作位于同一缓存行的不同变量时,由于缓存失效而引发性能下降的问题

在这里插入图片描述
伪共享的出现也是我们需要调优的一个方向

鲲鹏devkit性能分析工具可以呈现出检查出发生共享的地方,同时能够调出其共享的代码块,和其读写操作相关的源文件
其完整的功能有如下几种:

  • 发生伪共享的Cache Line;
  • 谁在读写上述的Cache Line,以及访问发生处的Cache Line的内部偏移;
  • 这些读者和写者分别的PID/TID指令地址函数名二进制文件;
  • 每个读者和写者的源代码文件代码行号;
  • 这些Cache Line的样本来自哪些NUMA节点
    详细的数据报告,和清晰的图标展现能够帮助开发者更加高效的进行性能调优

伪共享分析原理

上面我们讲到伪共享就是多线程操作位于同一缓存行的不同变量时,由于缓存失效而引发性能下降的问题
所以这里我们的工具就是通过对load指令和store指令进行采样,通过采样信息与他们在相同时间点对cacheline的访问情况进行匹配,如果存在同时进行读写、写写同一个cacheline的情况,那么这里就有可能出现伪共享
在这里插入图片描述
这里也提供了一些伪共享优化的建议:
1、对于写的很频散的交量应该在自已独立的CacheLine。可以据此进行对齐调整让它们不那么竞争,运行更快,也能让其它的共享了该Cache Line的卖量不被施慢
2、跨越了多个Cache Line的热的Lock或Mutex,需要考虑Ceche Line对齐的。
3、读多写少的突量,可以将这些变量组合相同或相邻的Cache Line。
4、一段代码,它不在某一行Cache Line.上竞争严重,但是它却在很多Cache Line上克争,这样的代码段也需要优化。
5、多进程程序访问其享内存时,同样要关注Cache Line上竞争

访存分析举例

在本讲视频中以结构体 foo为例,当对foo读取时 线程1读取的是f x而线程2而读取的是fy,那么在这个节点就会发生伪共享
在这里插入图片描述
这里我们一般的解决方法是使用alignas进行强制以128B对齐的方法解决伪共享问题

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/48058.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

固话号码认证有什么好处?固话号码认证有什么作用?

固话号码认证为企业提供号码认证服务,在来电时显示企业信息,可提高电话号码辨识度,防止错误标记,确保展现的企业信息与企业的手机终端、APP等多平台展示信息一致,保证品牌企业的身份及商业价值。 那如何上线号码认证服…

图的初识·基本概念

文章目录基本概念图有两种基本形式无向图的表示有向图的表示基本概念 图结构也是数据结构的一部分。而且还有一点小难。图是由多个结点链接而成的,但是一个结点可以同时连接多个其他结点,多个节点也可以同时指向一个节点。【多对多的关系】 图结构是任意…

iPhone升级iOS 16后出现提示“面容ID不可用”怎么办?

最近,很多用户在苹果社区反馈,iPhone升级iOS 16后Face ID不能用了,尝试重置Face ID时,系统会弹窗提示“面容ID不可用,稍后尝试设置面容ID。” 如果你的iPhone在没有摔落手机或是手机进水的情况下出现这个弹窗&#xff…

电脑游戏录屏哪个好用免费?这2款录屏软件,用过都说好!

​相信很多小伙伴都有过在游戏中的精彩操作吧。有些小伙伴想要把自己在游戏中的精彩操作分享给朋友,可是却不知道有什么好用免费的游戏录屏软件,能够将自己游戏里的亮眼表现录制下来。那么电脑游戏录屏哪个好用免费?接下来小编分享2款永久免费…

PyQt5 窗口数据传递

PyQt5 窗口数据传递单一窗口数据传递多窗口数据传递:调用属性多窗口数据传递:信号与槽开发应用程序时,若只有一个窗口则只需关心这个窗口里面的各控件之间如何传递数据。如果程序有多个窗口,就要关心不同的窗口之间是如何传递数据…

History、Location

History、Location 学习路线:JavaScript_BOM->Window对象->confirm()、setInterval()、setTimeout()->History、Location->闪烁的灯泡 History History 对象是 JavaScript 对历史记录进行封装的对象。 History 对象的获取 使用 window.history获取&a…

云小课|云小课教您如何选择Redis实例类型

阅识风云是华为云信息大咖,擅长将复杂信息多元化呈现,其出品的一张图(云图说)、深入浅出的博文(云小课)或短视频(云视厅)总有一款能让您快速上手华为云。更多精彩内容请单击此处。 摘要:购买Redis实例时,实例类型有单机、主备、Pr…

vmware安装openEuler20.03

一,直接看图。 点击创建虚拟机。 这里如果是21.03版本的话,版本需要选择Linux5.x内核64位。 20.03选择Linux4.x的内核。 2个或者4个都行。 内存不要小于4G。 官方推荐不要小于32G。 直接下一步即可。 然后等待,进入配置。 安…

数据结构学习:Trie树

Trie一、概念二、代码实现三、Tire树的时间复杂度和空间复杂度四、Tire树的优势一、概念 Trie树,也叫"字典树",顾名思义,是一种专门处理字符串匹配的树形结构,用来解决在一组字符串集合中快速找到某个字符串类似于这种字符串匹配问题,可以使用RF暴力匹配、RK哈希匹配…

RabbitMQ 快速入门七种简单模式

RabbitMQ 快速入门七种简单模式起步七种模式项目依赖1、"Hello World!"(1) Connection 方式(2) RabbitTemplate 方式2、Work Queues生产者消费者3、Publish/Subscribe关系绑定生产者消费者4、Routing消费者生产者5. Topics消费者生产者6、RPC7、Publisher Confirms起…

面试又卡在多线程?那就来分享几道 Java 多线程高频面试题,面试不用愁

多线程中的忙循环是什么?忙循环就是程序员用循环让一个线程等待,不像传统方法 wait()、 sleep() 或 yield(),它们都放弃了 CPU 控制,而忙循环不会放弃 CPU,它就是在运行一个空循环。 这么做的目的是为了保留 CPU 缓存&#xff0c…

用于大规模 MIMO 检测的近似消息传递 (AMP)(Matlab代码实现)

👨‍🎓个人主页:研学社的博客 💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜…

【二开】mattermos扩展第三方登录

目录 前景提要明确目标开始动手部署开发环境找到项目入口梳理登录流程修改请求地址前景提要 公司准备使用mattermost,项目进行任务管理,我们需要让已有系统能够对接该系统的登录。 明确目标 前端webApp项目独立部署使用第三方Token可以通过使用第三方Token登录mattermost平…

因子模型:套利定价理论APT

本文是Quantitative Methods and Analysis: Pairs Trading此书的读书笔记。 因子模型(factor models)用来解释资产的风险或者回报的特点。在CAPM模型中,资产的回报几乎就是由市场决定的,每个资产对市场的敏感程度可以用beta来描述。因而,在C…

RabbitMQ系列【18】对象序列化机制

有道无术,术尚可求,有术无道,止于术。 文章目录前言发送对象接收对象使用Jackson 序列化前言 使用RabbitMQ原生API,发送消息时,发送的是二进制byte[]数据。 void basicPublish(String var1, String var2, byte[] var4…

1.2 监督学习

1.2 监督学习监督学习的定义监督学习的相关概念监督学习流程图监督学习的定义 监督学习(Supervised Learning)是指从标注数据中学习预测模型的机器学习问题,其本质是学习输入到输出的映射的统计规律。 输入空间 (Input Space):输…

11.29总结

目录 一.连续子数组最大和 方法2动态规划 二.查找最小的k对数字 一.从先序遍历还原二叉树 二.完全二叉树 三.判断对称二叉树 四 回文 五.连续子数组最大和 六.TopK问题 思路一如果数据特别大.排序的时间复杂度会很大 思路二:用大根堆或者小根堆然后分别弹出. 思路三…

CANoe-vTESTstudio之State Diagram编辑器(功能介绍)

1. 阶段 State Diagram从测试设计到测试执行,分为4个阶段: Test Design 在测试设计期间,测试设计人员使用图形元素和分配的测试代码来对要测试的SUT的状态和转换进行建模。这个阶段的结果是生成状态图 Evaluation 在评估期间,将验证各个元素及其关系并创建路径。评估产…

SpringBoot中如何实现业务校验,这种方式才叫优雅!

大家好,在日常的接口开发中,为了保证接口的稳定安全,我们一般需要在接口逻辑中处理两种校验: 参数校验 业务规则校验 首先我们先看看参数校验。 参数校验 参数校验很好理解,比如登录的时候需要校验用户名密码是否为…

Opencv边缘检测、轮廓发现、绘制轮廓

Opencv边缘检测、轮廓发现、绘制轮廓 提取图像轮廓的2个步骤 1、 findContours函数找轮廓, 2、 drawContours函数画轮廓 轮廓的查找——cv::findContours() 函数cv::findContour是从二值图像中来计算轮廓的,它可以使用cv::Canny()函数处理的图像&am…