ARMv8电源管理

0 电源管理

许多ARM系统都是由电池供电的移动设备。此类系统中,能耗是关键的设计约束。程序员经常花费大量时间试图节省此类系统中的电池寿命。ARM内核中内置了许多旨在降低功耗的硬件设计方法。

即使在不使用电池的系统中,节能也可能是一个问题。例如,出于环境原因,您可能希望尽量减少能源使用,以降低消费者的电力成本,或尽量减少设备产生的热量。

电源使用可分为两类:

静态
静态功耗(也称为泄漏)发生在内核逻辑或 RAM 块通电时。一般来说,漏电流与总硅面积成正比,这意味着芯片越大,漏电流越高。随着您转向更小的制造几何形状,泄漏造成的功耗比例会更高。
动态
动态功耗是由于晶体管开关而发生的,是内核时钟速度和每个周期改变状态的晶体管数量的函数。显然,更高的时钟速度和更复杂的内核会消耗更多的功率。

电源管理感知操作系统动态更改内核的电源状态,根据当前工作负载平衡可用计算容量,同时尝试使用最少的功率。其中一些技术会动态地打开和关闭内核,或者将它们置于静止状态,在那里它们不再执行计算。这意味着它们消耗的功率很少。

1 Idle management

空闲管理(Idle management)通常由操作系统控制。在这种情况下,当内核空闲时,操作系统电源管理 (OSPM) 会将其移动到低功耗状态。通常,可以选择状态,具有不同的进入和退出延迟,以及与每个状态关联的不同功耗级别。使用的状态通常取决于再次需要内核的速度。可以在任何时候使用的电源状态也可能取决于 SoC 中除内核之外的其他组件的活动。每个状态都由一组组件定义,这些组件在进入状态时处于时钟门控或电源门控状态。

从低功耗状态移动到运行状态(称为唤醒延迟)所需的时间在更深的状态下更长。尽管空闲电源管理由内核上的线程行为驱动,但 OSPM 可以将平台置于影响内核本身以外的许多其他组件的状态。如果群集中的最后一个核心变为空闲状态,OSPM 可以针对影响整个群集的电源状态。同样,如果 SoC 中的最后一个内核变为空闲状态,OSPM 可以针对影响整个 SoC 的电源状态。选择还取决于系统中其他组件的使用。一个典型的示例是,当所有内核和任何其他总线主站都处于空闲状态时,将内存置于自刷新状态。

OSPM 必须提供必要的电源管理软件基础结构,以确定正确的状态选择。在空闲管理中,当核心或群集处于低功耗状态时,可以随时通过核心唤醒事件重新激活它。也就是说,可以从低功耗状态(如中断)唤醒内核的事件。OSPM 不需要显式命令即可使核心或群集恢复运行。OSPM 认为受影响的一个或多个内核始终可用,即使它们当前处于低功耗状态也是如此。

1.1 功耗和时钟

可以减少能耗的一种方法是关闭电源,这会消除动态和静态电流(有时称为电源门控),或者停止内核的时钟,从而仅消除动态功耗,可以称为时钟门控。

ARM 内核通常支持多个级别的电源管理,如下所示:

  • Standby.
  • Retention.
  • Power down.
  • Dormant mode.
  • Hotplug.

对于某些操作,需要在断开电源之前和之后保存和恢复状态。执行保存和还原所需的时间以及此额外工作所消耗的电源都是软件选择适当电源管理活动的重要因素。

包含内核的 SoC 设备可以具有其他命名的低功耗状态,例如 STOP 和深度睡眠。这些是指硬件锁相环(PLL)和稳压器由电源管理软件控制的能力。

1.2 Standby

在待机(Standby)工作模式下,内核保持上电状态,但其大部分时钟停止或时钟门控。这意味着内核的几乎所有部分都处于静态状态,唯一的功耗是由于漏电流和寻找唤醒条件的少量逻辑的时钟。

此模式使用 WFI(等待中断)或 WFE(等待事件)指令进入。ARM 建议在 WFI 或 WFE 之前使用数据同步屏障 (DSB) 指令,以确保挂起的内存事务在更改状态之前完成。

如果调试通道处于活动状态,它将保持活动状态。核心停止执行,直到检测到唤醒事件。唤醒条件取决于输入指令。对于 WFI,中断或外部调试请求将唤醒核心。对于 WFE,存在多个指定的事件,包括群集中执行 SEV 指令的另一个核心。

来自 Snoop 控制单元 (SCU) 的请求还可以唤醒集群中缓存一致性操作的时钟。这意味着处于待机状态的内核的缓存与其他内核的缓存保持一致(但处于备用状态的内核不一定执行下一条指令)。内核复位始终强制内核退出待机状态。

各种形式的动态时钟门控也可以在硬件中实现。例如,当检测到空闲条件时,SCU、GIC、定时器、指令流水线或 NEON 模块可以自动进行时钟门控,以节省功耗。

待机模式可以快速进入和退出(通常以两个时钟周期)。因此,它对内核的延迟和响应能力的影响几乎可以忽略不计。

对于 OSPM,待机状态与保留状态大多没有区别。这种差异对于外部调试器和硬件实现是显而易见的,但对于操作系统的空闲管理子系统则不明显。

1.3 Retention

内核状态(包括调试设置)保留在低功耗结构中,使内核至少部分关闭。从低功耗保持更改为运行操作不需要重置内核。保存的核心状态在从低功耗保持状态更改为运行操作时恢复。如前所述,从操作系统的角度来看,除了进入方法、延迟和与使用相关的约束之外,保留状态和待机状态之间没有区别。但是,从外部调试器的角度来看,状态会有所不同,因为外部调试请求调试事件保持挂起状态,并且无法访问核心电源域中的调试寄存器。

1.4 Power down

顾名思义,在这种状态下,内核将关闭电源(Power down)。设备上的软件必须保存所有内核状态,以便在断电时保留它。从断电到运行操作的更改必须包括:

  • A reset of the core, after the power level has been restored.
  • Restoring the saved core state.

断电状态的定义特征是它们对上下文具有破坏性。这意味着所有数据、运行条件和运行状态都将丢失。这会影响在给定状态下关闭的所有组件,包括内核,以及在更深的状态下关闭系统的其他组件,例如 GIC 或特定于平台的 IP。根据调试和跟踪电源域的组织方式,在某些断电状态下,调试和跟踪上下文中的一个或两个可能会丢失。必须提供机制,使操作系统能够为每个给定状态执行相关的上下文保存和还原。恢复执行从重置向量开始,在此之后,每个操作系统都必须恢复其上下文。

1.5 Dormant mode

休眠模式(Dormant mode)是断电状态的一种实现(implement)。在休眠模式下,内核逻辑断电,但缓存 RAM 保持通电状态。通常,RAM 处于低功耗保留状态,它们在其中保存其内容,但在其他方面不起作用。这提供了比完全关闭更快的重新启动,因为实时数据和代码保留在缓存中。同样,在集群中,可以将单个内核置于休眠模式。

在允许单个内核进入休眠模式的集群中,当内核的电源被移除时,没有保持一致性的空间。因此,这些核心必须首先将自己与相干域隔离开来。它们在执行此操作之前会清理所有脏数据,并且通常使用另一个内核唤醒外部逻辑以重新接通电源。

然后,唤醒的核心必须在重新加入一致性域之前恢复原始核心状态。由于内存状态可能在内核处于休眠模式时发生更改,因此无论如何都可能必须使缓存失效。因此,休眠模式在单个核心环境中比在集群中更有用。这是因为离开和重新加入一致性领域的额外费用。在群集中,当其他核心已关闭时,休眠模式通常可能仅由最后一个核心使用。

1.6 Hotplug

热插拔(Hotplug)是一种可以动态打开或关闭内核的技术。OSPM 可以使用热插拔根据当前计算要求更改可用计算容量。出于可靠性原因,有时也使用热插拔。

热插拔和对空闲使用断电状态之间有几个区别:

  • When a core is hot unplugged, the supervisory software stops all use of that core in interrupt and thread processing. The core is no longer considered to be available by the calling OS.

  • The OSPM has to issue an explicit command to bring a core back online, that is, hotplug a core. The appropriate supervisory software only starts scheduling on or enabling interrupts to that core after this command.

操作系统通常在一个主内核上执行大部分内核启动过程,并在稍后阶段使辅助内核联机。辅助引导的行为类似于将内核热插拔到系统中。两种情况下的操作几乎相同。

2 动态电压和频率调节

许多系统在其工作负载可变的条件下运行。因此,能够降低或提高核心性能以匹配预期的核心工作负载非常有用。更慢地对内核进行计时可降低动态功耗。

  • 动态电压和频率调节 (DVFS) 是一种节能技术,它利用:
  • 功耗与工作频率之间的线性关系。
  • 功耗和工作电压之间的二次关系。此关系的给出如下:
P = C × V2 × f

P是动态功率。C是所讨论的逻辑电路的开关电容。V 是工作电压。f 为业务频率。

通过调整内核时钟的频率来实现节能。在较低频率下,内核也可以在较低电压下工作。降低电源电压的优点是可以降低动态和静态功耗。

给定电路的工作电压与电路可以安全工作的频率范围之间存在特定于实现的关系。给定的工作频率及其相应的工作电压表示为元组,称为工作性能点(OPP)。对于给定系统,可实现的OPP范围统称为系统DVFS曲线。

操作系统使用 DVFS 来节省能源,并在必要时保持在热限制范围内。操作系统提供 DVFS 策略来管理功耗和所需的性能。针对高性能的策略选择更高的频率并使用更多的能量。旨在节省能源的策略选择较低的频率,因此导致较低的性能。

3 汇编功耗指令

ARM 汇编语言包括可用于将内核置于低功耗状态的指令。该体系结构将这些指令定义为提示,这意味着内核在执行它们时不需要采取任何特定操作。然而,在 Cortex-A 处理器系列中,这些指令的实现方式几乎可以关闭内核所有部分的时钟。这意味着降低了磁芯的功耗,因此只消耗静态漏电流,而没有动态功耗。

使用 WFI 指令将暂停执行,直到内核被下列情况之一唤醒:

  • An IRQ interrupt, even if the PSTATE I-bit is set.
  • An FIQ interrupt, even if the PSTATE F-bit is set.
  • An asynchronous abort.
    如果在禁用相关 PSTATE 中断标志时内核被中断唤醒,则内核将在 WFI 之后实现下一条指令。

WFI 指令广泛用于电池供电的系统。例如,移动电话可以每秒多次将内核置于待机模式,同时等待您按下按钮。

WFE类似于WFI。它会暂停执行,直到发生事件。这可以是列出的事件条件之一,也可以是群集中另一个核心发出的事件信号。其他内核可以通过执行 SEV 指令来发出事件信号。SEV 向所有内核发出事件信号。还可以对通用计时器进行编程,以触发从 WFE 唤醒内核的定期事件。

4 电源状态协调接口

电源状态协调接口 (PSCI) 提供了一种与操作系统无关的方法,用于实现可以启动或关闭内核的电源管理用例。这包括:

  • Core idle management.
  • Dynamic addition and removal of cores (hotplug), and secondary core boot.
  • big.LITTLE migration.
  • System shutdown and reset.

使用此接口发送的消息由所有相关的执行级别接收。也就是说,如果实现了 EL2 和 EL3,则虚拟机监控程序必须接收由来宾中执行的操作系统发送的消息。如果虚拟机管理程序发送消息,则消息必须由安全固件接收,然后与受信任的操作系统协调。这允许每个操作系统确定是否需要上下文保存。

猜你喜欢

转载自blog.csdn.net/qq_33904382/article/details/129648155
今日推荐