ARM PMU - Performance Monitor Unit 用途和原理

From:程序员秘书

ARM Performance Monitor Unit (PMU) 是一种硬件组件,用于跟踪和计数系统中的底层硬件事件。集成在ARM架构的处理器中,用于监控和度量处理器及系统性能的关键指标。它对于性能分析、调试、能耗管理和优化软件性能至关重要。

PMU的主要用途有:

  1. 性能分析:通过监测与CPU相关的事件(如执行指令数、捕获异常数、时钟周期数等),与cache相关的事件(如cache访问次数、miss次数等),以及与TLB(Translation Lookaside Buffer)有关的事件,PMU 可以帮助了解程序的执行行为,进而对程序进行性能分析和调优。通过测量执行时间、指令周期数、缓存命中率等,帮助识别程序的性能瓶颈。

  2. 系统调试:通过跟踪特定事件的发生,如中断延迟、上下文切换频率,辅助系统级别的调试。

  3. 能耗管理:监控处理器活动,协助实现动态电压和频率调整(DVFS),降低能耗。

  4. 软件优化:提供数据支持,帮助我们针对特定硬件特性优化代码,提升运行效率。

PMU的实现涉及以下几个关键点:

  • 事件计数器:PMU 包含一组事件计数器,分为两类,一类是cycle counter,用于计数CYCLES事件;另一类是performance counter,用于计数其他类型的事件。在ARMv8架构中,例如Cortex-A53,有1个cycle counter和6个performance counters。

  • 控制寄存器:PMU 包含用于控制计数器的寄存器,可以通过编程配置计数的事件类型、中断使能/屏蔽等。

  • 寄存器访问:PMU 寄存器可以通过特定的系统控制指令访问,如在ARM架构中,可以通过CP15协处理器或外部APB接口来编程。

  • 中断和溢出:当计数器溢出时,可以产生overflow中断,PMU硬件会根据控制寄存器内设置的中断屏蔽位判断是否将该中断发送给CPU处理。

From:程序员秘书

应用场景举例说明

例子1:

假设我们要分析一段代码的性能,特别是想了解cachemiss次数,可以按照以下步骤使用PMU:

  1. 确定监控事件:根据ARM架构的文档,找到代表cache miss的事件编码。

  2. 配置PMU:通过编程设置PMU的控制寄存器,选择相应的事件计数器,并将其配置为监控cache miss事件。

  3. 启动计数:使能PMU硬件和选定的计数器。

  4. 运行代码:执行需要分析的代码段。

  5. 读取计数器:代码执行完成后,读取事件计数器的值,这个值就是cache miss的次数。

  6. 分析结果:根据计数器的值,分析代码的性能,找出可能的性能瓶颈。

  7. 调优代码:根据分析结果,对代码进行调优,比如增加数据的局部性,减少cache miss。

例子2:

假设发现有某一款特定应用在某款基于ARM Cortex-A系列处理器的手机上运行缓慢,想要找出性能瓶颈所在。

  1. 确定监控事件:首先,需要确定哪些性能指标可能是瓶颈的来源,例如CPU利用率过高、缓存未命中频繁等。因此,他可能会选择监控“指令周期数”、“L1缓存未命中次数”和“CPU周期空闲比例”等事件。

  2. 配置PMU:编写代码,使用适当的系统调用来配置PMU。例如,在Linux环境下,可能使用perf_event_open系统调用或perf命令行工具,指定要监控的事件和计数器。

  3. 数据收集:应用在目标设备上运行时,PMU自动累积选定事件的计数。开发者可以在应用运行一段时间后,读取计数器的值,或者使用perf record记录整个运行过程,之后通过perf report分析数据。

  4. 分析与优化:分析结果显示,L1缓存未命中率极高,表明应用频繁访问的数据未有效利用缓存。开发者据此优化数据访问模式,比如通过数据局部性改善来减少缓存未命中,或者调整算法减少不必要的运算。

  5. 验证改进:优化后,再次使用PMU监控同样的性能指标,验证优化措施的效果。如果缓存未命中率显著下降,且整体应用响应时间缩短,则证明优化成功。

From:程序员秘书

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

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

相关文章

如何使用DotNet-MetaData识别.NET恶意软件源码文件元数据

关于DotNet-MetaData DotNet-MetaData是一款针对.NET恶意软件的安全分析工具,该工具专为蓝队研究人员设计,可以帮助广大研究人员轻松识别.NET恶意软件二进制源代码文件中的元数据。 工具架构 当前版本的DotNet-MetaData主要由以下两个部分组成&#xf…

java图书电子商务网站的设计与实现源码(springboot+vue+mysql)

风定落花生,歌声逐流水,大家好我是风歌,混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的图书电子商务网站的设计与实现。项目源码以及部署相关请联系风歌,文末附上联系信息 。 项目简介: 图书电子商…

基于附带Attention机制的seq2seq模型架构实现英译法的案例

模型架构 先上图 我们这里选用GRU来实现该任务,因此上图的十个方框框都是GRU块,如第二张图,放第一张图主要是强调编码器的输出是作用在解码器每一次输入的观点,具体的详细流程图将在代码实现部分给出。 编码阶段 1. 准备工作…

【C++进阶】AVL树

0.前言 前面我们已经学习过二叉搜索树了,但如果我们是用二叉搜索树来封装map和set等关联式容器是有缺陷的,很可能会退化为单分支的情况,那样效率就极低了,那么有没有方法来弥补二叉搜索树的缺陷呢? 那么AVL树就出现了&…

6.小程序页面布局 - 账单明细

文章目录 1. 6.小程序页面布局 - 账单明细1.1. 竞品1.2. 布局分析1.3. 布局demo1.4. 页面实现-头部1.5. 账单明细1.5.1. 账单明细-竞品分析1.5.2. 账单明细-实现1.5.2.1. 账单明细-实现-mock数据1.5.2.2. 每日收支数据的聚合整理1.5.2.3. 页面scroll-view 1.6. TODO 1. 6.小程序…

java —— 封装、继承、接口和多态

一、封装 封装是将数据和操作这些数据的方法整合成一个类。在这个类中,用 private 修饰符将某些数据隐藏起来,只通过特定的方法实现这些数据的访问和修改,以此实现数据的完整和安全性。 封装的步骤: 二、继承 继承是指把子类共有…

Meta发布Chameleon模型预览,挑战多模态AI前沿

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…

【数据结构与算法】之堆的应用——堆排序及Top_K问题!

目录 1、堆排序 2、Top_K问题 3、完结散花 个人主页:秋风起,再归来~ 数据结构与算法 个人格言:悟已往之不谏,知来者犹可追 克心守己,律己则安! 1、堆排序 对一个无序的数组…

03_前端三大件CSS

文章目录 CSS用于页面元素美化1.CSS引入1.1style方式1.2写入head中,通过写style然后进行标签选择器加载样式1.3外部样式表 2.CSS样式选择器2.1 元素选择器2.2 id选择器2.3 class选择器 3.CSS布局相关3.1 CSS浮动背景:先设计一些盒子因此,引出…

[图解]产品经理创新模式02改善信息流转

1 00:00:02,160 --> 00:00:04,000 第二种改进模式 2 00:00:04,010 --> 00:00:06,340 就是改善信息流转 3 00:00:06,550 --> 00:00:08,000 它是这样的 4 00:00:09,250 --> 00:00:11,290 当电脑系统越来越多的时候 5 00:00:11,300 --> 00:00:12,530 就会出现这…

linux centos stream 9 定时任务

定时任务,也称为计划任务,指在规定时间执行某项任务。在各操作系统中都有此功能,如Windows下的计划任务:定时关机等。 linux用户定时任务和系统定时任务是在Linux操作系统中用于自动执行特定任务的机制。它们基于cron(cron daemon)服务来完成的。 cron是linux系统中以后台…

Hive运行错误

Hive 文章目录 Hive错误日志错误SessionHiveMetaStoreClientql.Driver: FAILED: Execution Error, return code 2 from org.apache.hadoop.hive.ql.exec.mr.MapRedTaskerror: Could not find or load main class org.apache.hadoop.mapreduce.v2.app.MRAppMaster Please check …

DOS学习-目录与文件应用操作经典案例-type

新书上架~👇全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我👆,收藏下次不迷路┗|`O′|┛ 嗷~~ 目录 一.前言 二.使用 三.案例 1. 查看文本文件内容 2. 同时查看多个文本文件内容 3. 合并文…

可视化 | Seaborn中的矩阵图及示例

Seaborn是python提供的一个很棒的可视化库。它有几种类型的绘图,通过这些绘图,它提供了惊人的可视化能力。其中一些包括计数图,散点图,配对图,回归图,矩阵图等等。本文讨论了Seaborn中的矩阵图。 示例1&am…

第十三期Big Demo Day聚焦Web3前沿,FaceN.AI项目路演揭幕创新技术

第十三期Big Demo Day活动即将于2024年5月28日在香港数码港的CyberArena隆重举行。FaceN.AI将亮相本次Big Demo Day,参与精彩的项目路演,展示其在跨链去中心化数字身份、On-chain to Off-chain数据应用、DIDFi探索以及元宇宙与AIGC人格化发展等领域的领先…

HTML静态网页成品作业(HTML+CSS)——宠物狗介绍网页(3个页面)

🎉不定期分享源码,关注不丢失哦 文章目录 一、作品介绍二、作品演示三、代码目录四、网站代码HTML部分代码 五、源码获取 一、作品介绍 🏷️本套采用HTMLCSS,未使用Javacsript代码,共有3个页面。 二、作品演示 三、代…

em,rem,vw,vh,px,rpx,%的用法

单位特性注意事项em相对于父元素的字体大小与rem相比,em的值会随着父元素字体大小的变化而变化,这可能导致嵌套元素的大小难以预测。rem相对于根元素(通常是html元素)的字体大小与em相比,rem的值不会受到父元素字体大小…

下载CentOS系统或者下载Ubuntu系统去哪下?

因为Centos官网是挂在国外的服务器上,下载镜像时相比于国内的下载速度会慢很多,分享国内的镜像站去阿里巴巴下载Centos镜像。 首先分享两种下载方式,如果只想下载Centos那么就访问方式一的下载地址即可,如果还想下载其他的系统&a…

关于Broken pipe异常的一点学习记录

什么是Broken pipe? pipe,管道,管道里面自然就是数据,通过指从文件或网络套接字读取的数据。当一个进程试图向一个已关闭的管道(pipe)写数据或者从一个已关闭的通道读数据时就会出现中断,也就是Broken pi…

【算法设计与分析】基于Go语言实现动态规划法解决TSP问题

本文针对于最近正在学习的Go语言,以及算法课实验所需内容进行Coding,一举两得! 一、前言 由于这个实验不要求向之前的实验一样做到那种连线的可视化,故可以用图形界面不那么好实现的语言进行编写,考虑到Go语言的…