15. 电源管理

许多ARM系统是手机设备和电池供电的设备。在这些系统中,功率使用和总能量使用的优化是一个关键的设计约束条件。程序员通常会花费大量时间来尝试节省此类系统中的电池寿命 。

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

ARM内核中内置了许多旨在降低功耗的设计方法。

能源使用可分为两部分:

静态的 只要内核逻辑或RAM模块通电,就会发生静态功耗,通常也称为泄露。一般来说,漏电流与总硅面积成正比,这意味着芯片越大,漏电流越高。当您转向更小的制造几何形状时,来自泄漏的功耗比例会显着提高。

动态的 动态功耗是由于晶体管开关而发生的,并且是内核时钟速度和每个周期改变状态的晶体管数量的函数。显然,更高的时钟速度和更复杂的内核会消耗更多的功率

电源管理感知操作系统动态改变内核的电源状态,平衡当前工作负载的可用计算容量,同时尝试使用最少的电源。其中一些技术动态地打开和关闭内核,或者将它们置于静止状态,它们不再执行计算。这意味着它们消耗的电源非常少。使用这些技术的主要例子是:

  • 空闲管理 第15-3页

  • 动态电压和频率调整 第15-6页

15.1 空闲管理

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

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

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

15.1.1 电源和时钟

一种可以减少能源使用的方法是去除电源,它可以去除动态和静态电流(有时称为电源门控),或者 停止内核的时钟,它只去除动态功耗,可以称为时钟门控。

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

  • 待机

  • 保留

  • 掉电

  • 休眠模式

  • 热插拔

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

包含内核的SoC设备可以具有额外的低功耗状态,例如Stop和Deep Sleep。这些是指硬件锁相环(PLL) 和稳压器由电源管理软件控制的能力。

15.1.2 待机

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

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

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

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

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

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

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

15.1.3 保留

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

15.1.4 掉电

在这种状态下,内核断电。设备上的软件必须保存所有内核状态,以便在掉电时保存。从断电变为运行操作必须包括:

  • 在电源电平恢复后复位内核

  • 恢复保存的内核状态

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

15.1.5 休眠模式

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

在允许集群中的各个内核进入休眠模式的多核系统中,在内核断电时,没有保持一致性的余地。因此,这样的内核必须首先将自己与相干域隔离开来。在执行此操作之前,它们会清除所有脏数据,并且通常使用另一个内核向外部逻辑发出信号以重新供电以将其唤醒。

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

15.1.6 热插拔

CPU 热插拔是一种可以动态打开或关闭内核的技术。OSPM可以使用热插拔来根据当前的计算要求更改可用的计算容量。出于可靠性原因,有时也使用热插拔。热插拔和空闲状态下使用断电状态之间存在许多差异:

1.当一个内核被上电断开时,监控软件停止对该内核的所有使用中断和线程处理。调用操作系统不再认为内核可用。

2.OSPM必须发出显式命令以使内核重新联机,即热插拔内核。对应的监控软件仅在该命令之后开始调度或启用对该内核的中断。

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

15.2 动态电压和频率调整

许多系统在其工作负载可变的条件下运行。因此,能够降低或提高内核性能以匹配预期的内核工作负载是很 有用的。更缓慢地为内核提供时钟可以降低动态功耗。

动态电压和频率缩放(DVFS) 是一种节能技术,它利用 :

  • 功耗与工作频率之间的线性关系。

  • 功耗与工作电压之间的二次方关系。

这种关系如下: $$ P = C × V² × f $$ 其中:

P是动态功耗

C是逻辑电路的开关电容

V是工作电压

f是工作频率

通过调整内核时钟的频率来实现节约功耗。

在较低频率下,内核也可以在较低电压下运行。降低电源电压的好处是它可以降低动态和静态功耗。

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

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

15.3 电源相关的汇编语言指令

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

WFI指令具有暂停执行的效果,直到内核被以下条件之一唤醒:

  • 一个IRQ中断,即使得PSTATE I位被置位

  • 一个FIQ中断,即使得PSTATE F位被置位

  • 一个异步中止

如果在相关PSTATE中断标志被禁用时内核被中断唤醒,内核将执行WFI之后的下一条指令。

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

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

15.4 电源状态协调接口

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

  • 内核空闲管理

  • 动态的添加和移除内核(热插拔)以及副核引导启动

  • 大小端数据迁移

  • 系统关闭和复位

使用此接口发送的消息被所有相关的执行级别接收到。也就是说,如果实现了EL2和EL3,则在guest中执行的Rich OS发送的消息必须被hypervisor接收。如果hypervisor发送它,则消息必须由安全固件接收,然后与受信任的操作系统协调。这允许每个操作系统确定是否需要保存上下文。

有关详细信息,请参阅电源状态协调接口 (PSCI)规范。