在工业伺服系统中,控制环路对确定性、实时性和执行效率有极高要求。RZ/T2M采用的Arm Cortex‑R52内核集成了PMU(性能监控单元),可实现伺服应用中实时性能的可视化与评估。本文介绍如何通过IAR I-jet和IAR Embedded Workbench for Arm(C-SPY)的Performance Monitoring功能,利用PMU在不影响系统实时性的情况下采集硬件级性能数据,并对方案性能进行分析和调试。本文以Renesas RZ/T2M(Cortex-R52)为例,给出使用环境、配置要点与典型的测量流程,同时提供与Profiling、Trace其它调试工具的选型建议,便于用户快速展开性能评估与优化的工作。
在Arm MPU的嵌入式系统里,“能跑”只是及格线;工业控制与实时系统更关心的是“跑得稳不稳、跑得快不快、关键时刻会不会掉链子”。因此除了功能正确,工程上还需要量化评估程序执行时间、CPU资源利用率,以及关键实时路径是否满足时序约束。把问题说得更直白一点:当客户问“为什么这版感觉更慢?”时,我们需要的不是“感觉”,而是可以复现、可对比的数字。通常重点会落在:
程序执行时间是否可预测
CPU资源是否被高效利用
实时路径是否满足时序约束
IAR I-jet的Performance Monitoring功能基于Arm内核内置的PMU(Performance Monitoring Unit,性能监控单元)。它更像一块“硬件级计步器”:不需要在代码里插桩,也尽量不改变程序的步伐,就能给出CPU周期与关键事件计数等量化数据。通过C-SPY的Performance Monitoring窗口,工程师可以快速完成测量与对比分析,为调试和优化提供依据。
1. 功能概述:基于PMU的性能监控
性能监控功能利用Arm内核内部的PMU硬件模块,在程序运行过程中对处理器关键事件进行计数统计,包括但不限于:
指令执行相关事件
CPU时钟周期消耗
架构定义的硬件事件触发次数
与传统的源代码插桩方式不同,PMU基于处理器硬件计数器工作,通常不会对代码逻辑或执行流程造成明显干扰。这些数据常用于:
评估代码执行效率
对比不同算法或实现方式的性能差异
定位性能瓶颈所在的代码区间
统计结果可通过C-SPY的Performance Monitoring窗口完成配置与可视化展示。
2. 使用PMU的前提条件与限制
2.1 处理器要求
目标Arm内核必须支持PMU
(Performance Monitoring Unit,性能监控单元)
并非所有Arm内核或器件都具备该功能
一般来说,以下内核支持PMU:
Cortex-A
Cortex-R
部分Cortex-M(例如Cortex-M7)
如下图所示,在Renesas RZ/T2M平台上,Cortex-R52内核原生支持PMU功能。

2.2 调试器与驱动要求
需要使用支持PMU的C-SPY调试驱动
并非所有C-SPY driver都提供该能力
IAR I-jet调试探针支持PMU性能监控
3. PMU计数器与事件类型
PMU的核心机制是事件计数器(Event Counters):
每个计数器可配置为统计一种特定事件
事件类型由Arm架构定义
典型事件类别包括:
CPU时钟周期相关事件
指令执行相关事件
架构定义的PMU硬件事件
事件的选择、启停与数据显示可通过Performance Monitoring窗口集中管理。关于事件的具体描述可以参考Arm的内核手册“ArmCortex-R52 ProcessorTechnical Reference Manual”中12.6章节Events相关的内容。
比如BUS_CYCLES事件主要反映的是CPU因总线接口(AXI)被占用而被迫等待的时钟周期。BUS_CYCLES ≈ CPU访问内存或者外设,在“总线层”上花掉的时间,它不是cache,也不是纯指令,而是介于CPU和内存或者外设之间的那一层性能。
再比如STALL_FRONTEND事件是表示CPU想执行代码,但无法从前端拿到指令,无法解码从而产生的时延;STALL_BACKEND事件是指令已经获取并准备执行,但后端因为等待资源或者数据而执行不了从而产生的时延。
Events数量多达上百个,通常要组合多个事件一起去分析程序性能瓶颈或者问题。由于篇幅有限在此不展开讨论。以后有机会结合实际的案例再另行介绍。
4. 工具选型比较:
PMU vs Profiling vs Trace
4.1 工程维度对比数据粒度与信息量
| 维度 | PMU | Profiling | Trace |
| 数据类型 | 数值型 | 统计型 |
时序型/ 事件流 |
| 信息量 | 极低 | 中等 | 极高 |
|
是否有 执行路径 |
无 | 部分 | 有 |
结论(信息越来越多,代价也往往越大):
PMU:给你“结果”(总量/计数)
Profiling:给你“分布”(函数级热点)
Trace:给你“全过程”(执行路径/事件流)
4.2 对系统实时性的影响
(选型时最容易被“忽略”的硬指标)
| 维度 | PMU | Profiling | Trace |
|
对程序执行 影响 |
影响:低 | 影响:中 | 影响:高 |
|
是否适合 实时系统 |
适用性:高 |
适用性: 视场景而定 |
适用性:低(可能改变系统行为) |
建议:对于实时敏感路径的定量测量,优先采用PMU计数方式;在需要函数级分布时再使用Profiling;当需要完整执行路径或定位偶发问题时再考虑Trace,并评估其对系统行为的影响。
5. 操作示例(RZ/T2M示例)
5.1 环境准备
目标器件:Renesas RZ/T2M(Cortex-R52,支持PMU)
调试探针:IAR I-jet(需支持PMU相关调试功能)
开发环境:IAR Embedded Workbench for Arm(C-SPY)
C-SPY驱动:需支持Performance Monitoring(PMU)
5.2 使用PMCCNTR测量执行周期
说明:以下流程以断点方式测量两个断点之间的CPU cycle数(PMCCNTR)。不同项目的CPU时钟配置、缓存与中断状态会影响结果,建议在固定测试条件下对比分析。
一种典型的执行时间测量方法如下:
1. 在待测代码段的起始和结束位置设置断点

2. 运行程序并停在第一个断点

3. 通过I-jet菜单启用Performance Monitoring

4. 在Performance Monitoring窗口使能性能监测的功能

5. 手动将PMCCNTR(周期计数寄存器)清零

运行程序直到调试器停在第二个断点处,然后查看PMCCNTR的值,就可以获得两个断点之间的代码的精准的运行时长,PMCCNTR每加1对应一个CPU clock cycle,根据CPU的Clock参数可以换算出这一段代码的运行时长。

6. PMU与调试宏结合调试的案例
PMU还可以与IAR的调试宏(Debug Macro)相结合,提高调试效率。
cycle.mac宏文件示例内容如下:
Dump1() {
__message"P1=",#PMCCNTR;
}
Dump2() {
__message"P2=",#PMCCNTR;
}
1. 在EWARM环境设置这个调试宏文件,如下图中所示。

2. 调试的时候通过I-jet连接rzt2m。
3. 在需要调试的工程代码中设置断点,并编辑断点触发的条件,同时把上面macro文件对应的函数功能填入Expression表达式中,如下图所示:在hal_entry.c文件中的第197行插入一个断点,并把Dump1()设置为Expression。

同样的方法在hal_entry.c文件中第198行代码中,设置同样的断点并且把Dump2()设置到对应的Expression中去。
4. 运行程序
5. 当断点触发时,以下信息会输出到IAR EWARM Debug Log窗口中:读取PMCCNTR并将其数值输出到调试日志窗口。

PMCCNTR是性能监视器周期计数寄存器(Performance Monitors Cycle Count Register)。该示例宏文件在断点发生时读取该寄存器的数值。
虽然通过I-jet读取的值在绝对精度上可能存在微小偏差,但在:
性能趋势分析
不同版本对比
问题定位阶段
依然具有非常高的工程参考价值。
7.如何使用IAR I-jet调试器启用ETM Trace
本文重点是介绍cortex-R52内核的PMU单元的工作机理,既然提到与Trace的对比,那这里附赠一个彩蛋也给读者说明一下如何使用IAR I-jet调试器的ETM Trace的功能。
步骤1:将I-jet连接在开发板和主机PC之间。
步骤2:启动EWARM项目,并从I-jet选项卡中选择“ETM Trace”

步骤3:ETM Trace窗口打开,下图是已启用ETM Trace并获取到跟踪信息的状态

步骤4:在ETM Trace窗口上右键点击,会打开以下菜单。如果选择clear,跟踪信息将被清除。在此状态下运行,可以获取到下一次中断为止的跟踪信息。ETM Trace有一个跟踪缓冲区。因此,可以获取缓冲区大小范围内的跟踪信息,旧信息将被覆盖。

但是,可以通过“I-jet tab -> ETM Trace settings...”菜单进行更改。如果勾选下图中的”stop on buffer full”设置,ETM Trace将在缓冲区满时停止,不会覆盖旧信息。

8. 总结
基于PMU的IAR I-jet Performance Monitoring为Renesas Arm-based MPU提供了一种高精度、低侵入、工程可落地的性能分析手段。对于实时与性能敏感系统,建议将PMU作为性能分析的首选工具,以获得可重复的量化数据,为优化与问题定位提供依据。对于实时和性能敏感系统来说,PMU往往是性能分析的第一步,也是最安全的一步。在不显著破坏系统时序的前提下,工程师可以获得可信的cycle与事件计数数据,用于版本性能对比、编译选项评估以及关键路径优化验证。
-
嵌入式
+关注
关注
5212文章
20762浏览量
338622 -
瑞萨
+关注
关注
38文章
22542浏览量
91684 -
MPU
+关注
关注
0文章
465浏览量
51629 -
PMU
+关注
关注
1文章
128浏览量
23461
原文标题:总感觉MPU跑不快?试试这个“体检大法”
文章出处:【微信号:瑞萨嵌入式小百科,微信公众号:瑞萨嵌入式小百科】欢迎添加关注!文章转载请注明出处。
发布评论请先 登录
如何实现工业伺服系统应用中实时性能的可视化与评估
评论