深入了解电源框架

在不影响的情况下进行观察或如何利用机会

开启硬件几乎总会产生开销电源费用。通常,有些类型的工作是低优先级的,可以推迟,因此我们不希望仅仅为了这些工作而开启硬件,但如果硬件可用,我们希望执行这些工作。无线数据就是一个很好的例子,因为开启无线装置的成本相对较高,因此将低优先级传输与高优先级传输批处理在一起具有优势。

功耗框架通过功耗级别之间的机会依赖项实现了这些场景。在讨论这些内容之前,我们先来介绍一下,我们之前提到的所有依赖项都是所谓的断言依赖项。具有断言依赖项的功耗级别的租约会激活其依赖的功耗级别。这正是我们在协调部分的示例中所描述的。

当某个功耗级别被租用且具有机会依赖项时,系统不会激活所依赖的功耗级别。只有当对电源级别具有断言依赖项的其他内容也处于活动状态时,才能履行对电源级别的租约。

使用断言式和机会性依赖项的示意图

在这里,我们使用虚线表示机会性依赖项。低优先级应用依赖于网络堆栈,但只有在高优先级应用存在时,其租约才会得到满足,因为高优先级应用的断言依赖项允许满足低优先级应用的机会依赖项。

与上图相关的示意图,显示了移除了断言依赖项

如果高优先级应用退出,则低优先级应用的依赖项将不再满足,我们在此处用灰色虚线(而非黑色虚线)表示这一点。

依赖项类型(即机会性依赖项与断言性依赖项)对级别激活/停用的顺序没有影响。依赖项类型影响层是否变为活动状态,而不会影响这些操作相对于层的依赖项和依赖项的顺序。因此,如果低优先级应用开始上传,系统会在其应完成工作时通知该应用,并且该应用可以决定在网络堆栈关闭之前执行哪些操作。

通常,机会依赖项表明系统设计缺少某些内容。在我们的示例中,机会性依赖项表示,如果高优先级的某个实例也在使用网络堆栈,低优先级应用也可以使用该网络堆栈,但如果系统告知低优先级应用何时处于活动状态,则会更好。如果系统有适用于此目的的适当政策代理,则政策代理会对低优先级应用采用断言依赖项,从而告知应用何时处于活动状态。