1*e4624435SJonathan Corbet.. include:: ../../disclaimer-zh_CN.rst 2*e4624435SJonathan Corbet 3*e4624435SJonathan Corbet:Original: :ref:`Documentation/arch/arm64/amu.rst <amu_index>` 4*e4624435SJonathan Corbet 5*e4624435SJonathan CorbetTranslator: Bailu Lin <bailu.lin@vivo.com> 6*e4624435SJonathan Corbet 7*e4624435SJonathan Corbet================================== 8*e4624435SJonathan CorbetAArch64 Linux 中扩展的活动监控单元 9*e4624435SJonathan Corbet================================== 10*e4624435SJonathan Corbet 11*e4624435SJonathan Corbet作者: Ionela Voinescu <ionela.voinescu@arm.com> 12*e4624435SJonathan Corbet 13*e4624435SJonathan Corbet日期: 2019-09-10 14*e4624435SJonathan Corbet 15*e4624435SJonathan Corbet本文档简要描述了 AArch64 Linux 支持的活动监控单元的规范。 16*e4624435SJonathan Corbet 17*e4624435SJonathan Corbet 18*e4624435SJonathan Corbet架构总述 19*e4624435SJonathan Corbet-------- 20*e4624435SJonathan Corbet 21*e4624435SJonathan Corbet活动监控是 ARMv8.4 CPU 架构引入的一个可选扩展特性。 22*e4624435SJonathan Corbet 23*e4624435SJonathan Corbet活动监控单元(在每个 CPU 中实现)为系统管理提供了性能计数器。既可以通 24*e4624435SJonathan Corbet过系统寄存器的方式访问计数器,同时也支持外部内存映射的方式访问计数器。 25*e4624435SJonathan Corbet 26*e4624435SJonathan CorbetAMUv1 架构实现了一个由4个固定的64位事件计数器组成的计数器组。 27*e4624435SJonathan Corbet 28*e4624435SJonathan Corbet - CPU 周期计数器:同 CPU 的频率增长 29*e4624435SJonathan Corbet - 常量计数器:同固定的系统时钟频率增长 30*e4624435SJonathan Corbet - 淘汰指令计数器: 同每次架构指令执行增长 31*e4624435SJonathan Corbet - 内存停顿周期计数器:计算由在时钟域内的最后一级缓存中未命中而引起 32*e4624435SJonathan Corbet 的指令调度停顿周期数 33*e4624435SJonathan Corbet 34*e4624435SJonathan Corbet当处于 WFI 或者 WFE 状态时,计数器不会增长。 35*e4624435SJonathan Corbet 36*e4624435SJonathan CorbetAMU 架构提供了一个高达16位的事件计数器空间,未来新的 AMU 版本中可能 37*e4624435SJonathan Corbet用它来实现新增的事件计数器。 38*e4624435SJonathan Corbet 39*e4624435SJonathan Corbet另外,AMUv1 实现了一个多达16个64位辅助事件计数器的计数器组。 40*e4624435SJonathan Corbet 41*e4624435SJonathan Corbet冷复位时所有的计数器会清零。 42*e4624435SJonathan Corbet 43*e4624435SJonathan Corbet 44*e4624435SJonathan Corbet基本支持 45*e4624435SJonathan Corbet-------- 46*e4624435SJonathan Corbet 47*e4624435SJonathan Corbet内核可以安全地运行在支持 AMU 和不支持 AMU 的 CPU 组合中。 48*e4624435SJonathan Corbet因此,当配置 CONFIG_ARM64_AMU_EXTN 后我们无条件使能后续 49*e4624435SJonathan Corbet(secondary or hotplugged) CPU 检测和使用这个特性。 50*e4624435SJonathan Corbet 51*e4624435SJonathan Corbet当在 CPU 上检测到该特性时,我们会标记为特性可用但是不能保证计数器的功能, 52*e4624435SJonathan Corbet仅表明有扩展属性。 53*e4624435SJonathan Corbet 54*e4624435SJonathan Corbet固件(代码运行在高异常级别,例如 arm-tf )需支持以下功能: 55*e4624435SJonathan Corbet 56*e4624435SJonathan Corbet - 提供低异常级别(EL2 和 EL1)访问 AMU 寄存器的能力。 57*e4624435SJonathan Corbet - 使能计数器。如果未使能,它的值应为 0。 58*e4624435SJonathan Corbet - 在从电源关闭状态启动 CPU 前或后保存或者恢复计数器。 59*e4624435SJonathan Corbet 60*e4624435SJonathan Corbet当使用使能了该特性的内核启动但固件损坏时,访问计数器寄存器可能会遭遇 61*e4624435SJonathan Corbetpanic 或者死锁。即使未发现这些症状,计数器寄存器返回的数据结果并不一 62*e4624435SJonathan Corbet定能反映真实情况。通常,计数器会返回 0,表明他们未被使能。 63*e4624435SJonathan Corbet 64*e4624435SJonathan Corbet如果固件没有提供适当的支持最好关闭 CONFIG_ARM64_AMU_EXTN。 65*e4624435SJonathan Corbet值得注意的是,出于安全原因,不要绕过 AMUSERRENR_EL0 设置而捕获从 66*e4624435SJonathan CorbetEL0(用户空间) 访问 EL1(内核空间)。 因此,固件应该确保访问 AMU寄存器 67*e4624435SJonathan Corbet不会困在 EL2或EL3。 68*e4624435SJonathan Corbet 69*e4624435SJonathan CorbetAMUv1 的固定计数器可以通过如下系统寄存器访问: 70*e4624435SJonathan Corbet 71*e4624435SJonathan Corbet - SYS_AMEVCNTR0_CORE_EL0 72*e4624435SJonathan Corbet - SYS_AMEVCNTR0_CONST_EL0 73*e4624435SJonathan Corbet - SYS_AMEVCNTR0_INST_RET_EL0 74*e4624435SJonathan Corbet - SYS_AMEVCNTR0_MEM_STALL_EL0 75*e4624435SJonathan Corbet 76*e4624435SJonathan Corbet特定辅助计数器可以通过 SYS_AMEVCNTR1_EL0(n) 访问,其中n介于0到15。 77*e4624435SJonathan Corbet 78*e4624435SJonathan Corbet详细信息定义在目录:arch/arm64/include/asm/sysreg.h。 79*e4624435SJonathan Corbet 80*e4624435SJonathan Corbet 81*e4624435SJonathan Corbet用户空间访问 82*e4624435SJonathan Corbet------------ 83*e4624435SJonathan Corbet 84*e4624435SJonathan Corbet由于以下原因,当前禁止从用户空间访问 AMU 的寄存器: 85*e4624435SJonathan Corbet 86*e4624435SJonathan Corbet - 安全因数:可能会暴露处于安全模式执行的代码信息。 87*e4624435SJonathan Corbet - 意愿:AMU 是用于系统管理的。 88*e4624435SJonathan Corbet 89*e4624435SJonathan Corbet同样,该功能对用户空间不可见。 90*e4624435SJonathan Corbet 91*e4624435SJonathan Corbet 92*e4624435SJonathan Corbet虚拟化 93*e4624435SJonathan Corbet------ 94*e4624435SJonathan Corbet 95*e4624435SJonathan Corbet由于以下原因,当前禁止从 KVM 客户端的用户空间(EL0)和内核空间(EL1) 96*e4624435SJonathan Corbet访问 AMU 的寄存器: 97*e4624435SJonathan Corbet 98*e4624435SJonathan Corbet - 安全因数:可能会暴露给其他客户端或主机端执行的代码信息。 99*e4624435SJonathan Corbet 100*e4624435SJonathan Corbet任何试图访问 AMU 寄存器的行为都会触发一个注册在客户端的未定义异常。 101