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:程序员秘书

【学习对象】[行业]:汽车电子、手机、服务器、云计算、物联网、人工智能;[人群]:本科/研究生/博士、初级工程师、中级工程师、资深工程师、行业大佬,即适合小白入门,也适合大佬查缺补漏;[方向]:电子/计算机专业、芯片架构设计、芯片底层软件、芯片验证、BSP软件开发、内核驱动开发、固件开发、bootrom/bootloader开发、安全、虚拟化、大系统开发等;[行业链]:主机厂、OEM、OEM、tier1、SOC厂家、各级供应商;【课程特色】1、全网最全最新,真正的Armv8和Armv9架构(注:这不是25年前的ARM9, 这也不是15年前的A9, 这里也不讲汇编,这里讲的是架构/架构/架构);2、这里不读PPT,70%的原创彩色框架图。3、批判性:指出各种互联网中司空见惯的错误。(如FIQ不是快速中断,是转发中断,F是Forward;VIVT根本没人再用...);4、实事求是:有理有据,尽量不瞎说,不编造,一切有源头可查,有文档可参考;5、白话、通俗易懂。课堂不参水分。 【学员收益】1、知道我学习什么,我要怎么去学习,从此之后有了一个明确的学习路线。2、认识一些共同目标的人,相互讨论问题,共同进步。勤学、共学、助学。3、ARM不再神秘,SOC不在神秘,让您短期内就能cover住全局4、熟悉ARM Architecture架构知识5、熟悉SOC架构知识6、熟悉主流的系统软件框架7、熟悉各项硬件原理和机制,如异常中断、MMU、cache、TLB、VMSA、Trustzone6、深入了解当前的系统架构、软硬件架构,能够看懂这些大家,将来也能够自己设计。7、熟悉系统的启动流程、Secureboot等8、熟悉各类标准和规范9、能够进入芯片厂商干活、能够在非芯片产生成为技术担当。10、全体系的掌握ARMv8/ARMv9的核心知识点(ARM基础、异常中断GIC、MMU/Cache、architecture、SOC架构、Trustzone、虚拟化...);11、掌握ARM架构、掌握SOC架构、掌握常规IP(gic、smmu、timer、AXI/ACE/CHI、TZC400、CCI/CMN...);12、快速熟悉常规系统软件(bootrom、spl、ATF、TEE、bootloader、kernel...), Secureboot安全启动...13、扎实自己的基础知识,技术水平提升N个level, 掌握快速的学习方法;课程大纲本课程大纲如下所示,总时长约63小时,持续更新中。课程Roadmap(强烈建议购买VIP,花更少的钱,买更多的课程。)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值