本章节描述了性能监视器扩展,这是一个可选的非接触调试组件。本章节描述了版本1和版本2的PMU架构,PMUv1和PMUv2,同时包含以下内容:
关于性能监视器
性能监视器的精度
溢出行为
安全扩展和虚拟扩展的影响
基于PMUv2的事件过滤
使能计数器
访问计数器
事件号和记忆方法
性能监控寄存器
注意:
章节B4 System Control Registers in a VMSA implementation 和章节 B6 SystemControl Registers in a PMSA implementation 也描述了性能监视扩展寄存器。绝大部分的寄存器已经在VMSA和PMSA描述过,本章节中这些寄存器的位分布和在VMSA、PMSA中的一模一样。另外,本章节的绝大部分寄存器可参考章节B4。
性能监视器是ARM 调试架构的一部分。许多ARMv6处理器已经包含性能监视器PMU,但是在ARMv7之前它们不是ARM架构的一部分。ARM
ArchitectureReference Manual, ARMv7-A and ARMv7-R edition 是第一本从架构上详细描述PMU(性能监视器)的手册。PMU(性能监视器)有两个版本:PMUv1和PMUv2。
在ARMv7架构中,PMU是一个可选特性,但是ARM强烈建议ARMv7-A和ARMv7-R架构中包含PMU。
PMU性能监视器的基本组成如下:
1)一个循环计数器,可以每个循环计数一次也可选每64个循环计数一次。
2)一定数量的事件计数器。每个计数器所记录的事件是可编程的。ARMv7架构提供了高达31个计数器的可用空间。计数器的实际数量可自行拟定。
3)能够控制下列功能:
使能和复位计数器
溢出时标记
在溢出时使能中断
监视软件可以可独立使能循环计数器(即和实际计数器相互独立)
可被监视的事件 可划分为:
1)架构和微架构事件
2)指定的特殊事件
PMU架构用事件号来识别事件。
1)PMU架构定义了针对普通事件的事件号
2)PMU架构保留了一些用于自定义的事件号
对一个设计实例来说事件的全集就是一个IMPLEMENTATION DEFINED。ARM建议处理器使用事件的个数要和架构剖析相配合。
部分普通事件的事件号保留用作特殊事件。这些事件号的每一个都
1)或者被用作一种特殊的事件。
2)或者不被使用。
如果计数的事件配置指定了一个未使用的事件号,或者指定了一个事件号但是未定义该事件,则计数器无法增加。
当一个处理器支持采用普通事件号的事件监视功能,ARM建议使用普通事件号。但是,软件可能会遇到这样一种情况,一个事件所使用的事件号是在自定义范围的。
注意:未来PMU架构的版本可能定义其他事件号。这也是为什么软件不能将事件定义为一个固定的可分配的普通事件号,因为该事件可能采用自定义的事件号。
ARMv7 定义了访问PMU寄存器的一些接口:
1)一个系统控制的协处理器接口CP15。这个接口是强制性的。
2)一个内存映射接口。这个接口可选。
3)一个外部调试接口。这个接口可选。
一个在处理器上运行的操作系统可以通过CP15接口来访问计数器。用途包括:
1)动态编译技术
2)电源管理
如果需要的话,操作系统可以让应用软件访问计数器。这使得应用程序可以细粒度监控它自己的性能而无需操作系统的支持。举例来说,一个应用程序可以监控每个函数的性能。
在很多种情况下,将性能监控特性集成到处理器中对应用程序和应用程序开发是很有价值的。当操作系统本身不使用性能监视器,ARM建议开启应用程序软件访问性能监视器的权限。
为了和外部监视器交互,在设计时需要考虑额外的增强功能,比如:
1)一个事件集合,这些事件可以作为外部事件导出到总线。
2)能够对外部事件计数。这项增强功能意味着处理器必须能够处理外部事件输入的信号。
3)对性能监视器来说能够进行内存映射和外部调试。这意味着计数器可用来作别的用途,比如可以用来进行系统监控。更多信息参见附录D2 Recommended Memory-mapped and External Debug Interfaces for the PerformanceMonitors。
PMUv2的主要变化在于:
1)能够借助处理器状态来计数过滤事件。参见PMXEVTYPER, Performance Monitors Event Type Select Register, VMSA onpage B4-1689 or PMXEVTYPER, Performance Monitors Event Type Select Register, PMSAon page B6-1915。
2)改变了PMUv1定义的一些事件名字。这些名字的改变不会影响事件计数。
3)性能监视器监视的事件最少必须是一个普通事件的有限集合。
PMUv2为CP15调试特性寄存器0增加了一个域,ID_DFR0,来识别性能监视器的版本号。参见ID_DFR0, Debug Feature Register 0, VMSA on page B4-1601。
本文章版权归属个人,如需转载请注明出处(本CSDN blog),谢谢。
C12.1.3 PMU版本和在ARM架构中的状态
ARMv7架构为性能监视器PMU(arm推荐的或者自定义的)保留了CP15寄存器。参见VMSACP15 c9 register summary, reserved for cache and TCM control and performancemonitors on page B3-1472 or PMSA CP15 c9 register summary, reserved for cacheand TCM
lockdown registers and performance monitors on pageB5-1783。
ARM强烈建议性能监视器在使用时采用本章节描述的性能监视器扩展功能。
注意:1)本章节描述了PMUv1和PMUv2。在这两个版本差异的地方,我们做了相应的描述;2)如果在使用v7.1调试工具的同时使用了PMU,那么必须使用PMUv2。
It isIMPLEMENTATION DEFINED whether the processor exports counter events to a tracemacrocell, or other external monitoring agent, to provide triggeringinformation.处理器是否导出计数器事件到trace macrocell或者其他外部监视器代理是可自定义的。The form of any exporting is also IMPLEMENTATION DEFINED.导出形式仍然是可自定义的。这种导出机制如果实施,可以被视为性能监视器控制功能的一部分。
ARM建议系统设计者考虑包含一种能够导入外部可计数事件的机制,当然,这种特性仍然是可定制的。When implemented, this feature enables the trace module to pass in
events to be counted.如果这样设计的话,这种特性需要trace模块具备传递进事件的功能。
所有计数器都受时钟频率的支配,包括由WFI与WFE指令引起的时钟停止。
对于基于PMUv2架构而设计的包含虚拟扩展的处理器而言,软件可以使用PMOVSSET寄存器来存储PMOVSR的状态。
本文章版权归属个人,如需转载请注明出处(本CSDN blog),谢谢。