空闲管理通常在操作系统的控制下。在这种情况下,当内核空闲时,操作系统电源管理(OSPM)会将其移至低功耗状态。通常,可以选择状态,具有不同的进入和退出等待时间,以及与每个状态相关的不同级别的功耗。通常使用的状态取决于再次需要内核的速度。可以一次使用的电源状态还可能取决于SoC中除内核之外的其他组件的活动。每个状态均由进入状态时通过时钟门控或电源门控的一组组件定义。
从低功耗状态转换为运行状态所需的时间(称为唤醒等待时间)在较深的状态下较长。尽管空闲电源管理是由内核上的线程行为驱动的,但OSPM可以使平台进入影响内核本身以外的许多其他组件的状态。如果集群中的最后一个核心处于空闲状态,则OSPM可以确定影响整个集群的电源状态。同样,如果SoC中的最后一个内核处于空闲状态,则OSPM可以确定影响整个SoC的电源状态。该选择还取决于系统中其他组件的使用。一个典型的示例是当所有内核以及任何其他总线主控都处于空闲状态时,将内存置于自刷新状态。
OSPM必须提供必要的电源管理软件基础结构,以确定正确的状态选择。在空闲管理中,将核心或群集置于低功耗状态后,可以随时通过核心唤醒事件将其重新激活。也就是说,可以将内核从低功耗状态唤醒的事件,例如中断。OSPM不需要明确的命令即可使核心或群集重新运行。OSPM认为受影响的一个或多个内核即使在当前处于低功耗状态时也始终可用。
减少能耗的一种方法是:关闭电源,这会同时消除动态和静态电流(有时也称为power-gating);或者停止内核的时钟,这只会消除动态功耗,因此可以称为 时钟门控。
ARM内核通常支持几个级别的电源管理,如下所示:
对于某些操作,需要在断电之前和之后保存并恢复状态。保存和还原所花费的时间以及此额外工作所消耗的功率都可能是选择适当的电源管理活动的软件的重要因素。
包含内核的SoC器件可以具有其他命名的低功耗状态,例如 STOP和Deep sleep。这些是指硬件锁相环(PLL)和稳压器由电源管理软件控制的能力。
在待机操作模式下,内核保持通电状态,但其大多数时钟停止或时钟门控。这意味着内核的几乎所有部分都处于静态状态,唯一消耗的功率是由于漏电流和监视唤醒条件的少量逻辑的计时引起的。
使用WFI
(等待中断)或 WFE
(等待事件)指令进入此模式。ARM建议DSB
在WFI
或 之前使用数据同步屏障()指令WFE
,以确保在更改状态之前完成待处理的内存事务。
如果调试通道处于活动状态,则它将保持活动状态。内核停止执行,直到检测到唤醒事件为止。唤醒条件取决于输入指令。对于 WFI
,中断或外部调试请求将唤醒内核。对于 WFE
,存在几个指定的事件,包括集群中另一个执行SEV
指令的内核。
来自侦听控制单元(SCU)的请求还可以唤醒集群中的缓存一致性操作的时钟。这意味着处于待机状态的内核的缓存与其他内核的缓存保持一致(但处于待机状态的内核不一定执行下一条指令)。内核复位始终会迫使内核退出待机状态。
各种形式的动态时钟门控也可以在硬件中实现。例如,当检测到空闲状态时,可以自动对SCU,GIC,定时器,指令流水线或NEON模块进行时钟门控,以节省功耗。
可以快速进入和退出待机模式(通常在两个时钟周期内)。因此,它对核心的延迟和响应能力的影响几乎可以忽略不计。
对于OSPM,待机状态与保留状态几乎没有区别。这种差异对于外部调试器和硬件实现而言是显而易见的,而对于操作系统的空闲管理子系统而言则并不明显。
内核状态(包括调试设置)保留在低功耗结构中,从而可以至少部分关闭内核。从低功耗保留状态更改为运行状态,不需要重置内核。从低功耗保留状态变为运行状态后,将恢复已保存的内核状态。如上所述,从操作系统的角度来看,保留状态和备用状态之间没有区别,除了进入方法,等待时间和与使用有关的约束之外。但是,从外部调试器的角度来看,状态有所不同,因为外部调试请求调试事件保持挂起状态,并且无法访问核心电源域中的调试寄存器。
顾名思义,在此状态下,内核将关闭电源。设备上的软件必须保存所有核心状态,以便可以在断电时保留它。从掉电更改为运行操作必须包括:
掉电状态的定义特征是它们对上下文具有破坏性。这意味着所有数据,运行条件和运行状态都将丢失。这会影响在给定状态下关闭的所有组件,包括核心,在更深的状态下会影响系统的其他组件,例如GIC或特定于平台的IP。根据调试和跟踪电源域的组织方式,在某些断电状态下,调试和跟踪上下文之一或两者可能会丢失。必须提供使操作系统能够为每个给定状态执行相关上下文保存和还原的机制。恢复执行从复位向量开始,此后每个OS必须还原其上下文。
休眠模式是掉电状态的实现。在休眠模式下,核心逻辑断电,但高速缓存RAM保持通电。通常,RAM被保持在低功率保持状态,在该状态下,RAM会保持其内容,但不能正常运行。与实时关闭相比,这提供了比完全关闭更快的重启速度,因为实时数据和代码仍保留在缓存中。同样,在群集中,可以将各个核心置于休眠模式。
在允许单个内核进入休眠模式的群集中,在移除内核电源的同时,没有保持一致性的余地。因此,此类核心必须首先将自己与相干域隔离。它们在执行此操作之前会清除所有脏数据,并且通常使用另一个内核发出唤醒信号,该内核发出外部逻辑信号以重新施加电源。
然后,唤醒的核心必须在重新加入一致性域之前恢复原始核心状态。因为在内核处于休眠模式时内存状态可能已更改,所以无论如何它可能必须使缓存无效。因此,休眠模式在单核心环境而不是集群中更有可能有用。这是因为离开并重新加入一致性域的额外开销。在集群中,休眠模式通常仅在其他内核已经关闭时才由最后一个内核使用。
热插拔是一种可以动态打开或关闭内核的技术。OSPM可以使用热插拔来根据当前的计算要求更改可用的计算容量。出于可靠性考虑,有时也使用热插拔。
热插拔和将电源关闭状态用于空闲之间有一些区别:
操作系统通常在一个主内核上执行大部分内核引导过程,从而使辅助内核在稍后阶段联机。辅助启动的行为类似于将内核热插入系统中。两种情况下的操作几乎相同。