为什么OS设计能够降低功耗?


11

我已经读到,像Android和iOS这样的操作系统在某种程度上已经过优化,可以延长电池寿命。

我的理解是,CPU在一定时间内执行一定数量的操作,因此我认为您可以通过减少所需的操作数量来加快应用程序的速度,但是由于CPU仍会在y时间内执行x次操作,因此不应影响力量?

另外,如果一个进程占用更多RAM,是否会消耗更多功率?

Answers:


15

智能手机,笔记本电脑甚至台式机中使用的常见CPU的时钟频率是可变的。当调度程序检测到有空闲时间时,它可以降低时钟速率,如果有更多进程争用CPU时间,可以再次提高时钟速率。

针对电池供电设备进行了优化的CPU往往由许多功能组件组成,每个组件都有自己的时钟(例如:ARM Cortex A8)。当一个组件处于空闲状态时,操作系统可以将其关闭(或减少其时钟),从而节省了电能。例如,在许多多核CPU(例如高端移动设备中的CPU)上,每个核都可以分别打开或关闭。ARM特别擅长于此游戏,这是大多数智能手机都具有ARM CPU的原因之一。

改变时钟速率或关闭电子组件的时钟称为电源管理。它往往是编写和优化电池供电设备的操作系统的复杂部分,并且对精确的硬件模型有很多依赖性。

CPU所需的东西也适用于外围设备。例如,背光显示器是智能手机上主要的电能消耗者,其次是收音机。CPU操作系统可能在外围设备的电源管理中发挥作用。辅助芯片也运行自己的固件,该固件也执行电源管理。

应用程序在降低功耗方面起着自己的作用:它们必须允许操作系统执行其任务。应用程序最糟糕的事情是轮询-运行类似的循环while (not_ready()) {}。即使引入一个很小的延迟while (not_ready()) {usleep(100);}也无济于事,因为它没有足够的时间让处理器进入低功耗模式,否则,每次无效的唤醒都将浪费能源。因此,必须对操作系统API进行设计,以使应用程序不再需要轮询,而可以订阅某种事件机制并保持空闲状态,直到它们被通知相关事件为止。应用程序又需要利用这种机制,因此整个软件堆栈的设计都会对功耗产生影响。

您可以通过Intel的Powertop实用程序获得有关造成PC功耗原因的信息。智能手机通常还可以查看应用程序消耗了多少电量。精确地按应用程序来计算功耗是很困难的:如果一个组件为两个应用程序唤醒,则​​唤醒时间可能会任意考虑其中一个,或者两者都不计。外设的功耗也不总是很容易跟踪到负责的应用程序。

RAM芯片不知道哪个位存储活动进程的数据,因此无法以这种方式有选择地将其关闭。进程的功耗与它使用的内存量无关(除非RAM访问消耗功耗,但重新使用相同的内存或使用不同的RAM区域在功耗方面没有区别)。


4

就处理器能力而言,操作系统可以做的主要事情就是提供阻止应用程序轮询的API。(并且还消除了内核和设备驱动程序中的所有轮询,如果有的话。)然后,只要无事可做,处理器就可以进入低功耗睡眠状态。

对于每个设备,都需要有一种方法让用户应用程序在请求后进入睡眠状态,然后仅在结果准备好后才再次唤醒。

显然,紧密的轮询循环是一场灾难(因为它们使处理器完全处于唤醒状态并执行无用的noop和跳转。)但是,在更微妙的情况下,但几乎同样糟糕的情况是,用户应用程序正在设置计时器,唤醒计时器警报,检查在某些情况下,重置计时器并重新进入睡眠状态。

我对这部分的了解不多,但我认为可能还有一些新颖的方法可以使用DMA(直接内存访问)控制器来处理较长的重复中断字符串,而无需唤醒处理器内核本身。


3

OS的主要作用是提供尽可能独立于硬件的运行时环境。它知道谁在使用什么硬件,何时以及如何使用硬件。这使OS可以在不使用时减少硬件功耗。

现代硬件提供了许多降低功耗的方法,例如

  • 关闭未使用的外围设备和处理器的一部分(浮点运算单元,处理器内核等)
  • 减少使用较少的零件(包括处理器内核)的时钟
  • 调整电源以适应当前的时钟频率(您可以动态修改处理器的工作电压,有时可以调整数百mA)

如果一个进程占用更多RAM,是否会消耗更多功率?

并不是的。但是,如果您的系统具有1GB的DRAM,但仅使用512MB,并且带有某些内存控制器,则可以停止刷新DRAM的一部分,从而降低功耗。LPDDR支持部分区域自刷新,以便在自刷新时(处理器停止时,这在大多数情况下是正确的)。

您可能会看到,有很多方法可以减少现代体系结构上的功耗,但是这需要操作系统来处理。某些功能(例如PASR)使用起来非常棘手,这需要OS上进行大量工作以适应内存管理,实现挂起/恢复过程,...


旁注:虽然不一定与需要大量RAM的进程直接相关,但更多的RAM使用可能导致更少的文件系统缓存,从而损害能效(以及性能)。
保罗·克莱顿

3

毫无疑问,操作系统维护各种列表。这些列表中的两个是就绪列表和计时器列表。准备列表标识了哪些任务/线程已准备好运行。计时器列表标识处于超时的阻塞状态的任务/线程。

想象一下,操作系统有一个空的就绪列表。也就是说,它用完了准备运行的任务(处于空闲状态)。某些处理器(例如x86)具有暂停指令,操作系统可以调用该指令使处理器停止运行,直到被外部中断(例如滴答中断)唤醒为止。在这段时间内,它消耗的功率更少。通过查看计时器列表可以进一步改进此技术。如果您空闲了,并且知道从计时器滴答声中唤醒任务的最快时间是100滴答声,则滴答声速率可能会暂时修改为慢100倍。这样,处理器就可以在更长的时间内消耗更少的能量,因为它不必处理多达100个滴答中断。

一旦外部中断到达,滴答率就必须重新计算。如果外部中断使任务准备就绪,则滴答速度恢复正常。如果不是,必须重新计算睡眠的tick的数量以及新的(减慢的)tick速率。

希望这可以帮助。


2

要添加其他答案:
您的问题将iOS和Android视为操作系统,但“操作系统”只是其中的一部分。
Android和iOS都是框架,并且包含许多部分,这些部分不属于实际OS的一部分,但可以有效地降低功耗。
例如,通过设计,Android允许应用程序开发人员在隐藏状态下保存其状态,因此可以在不活跃使用进程时将其终止,从而减少就绪线程的数量,并允许核心关闭和时钟速率降低。
“ OS”中的功能可设置自适应亮度,Wi-Fi睡眠状态,清理线程,调度池,LED指示灯,蜂窝待机行为以及其他会严重影响功耗的方面。
此外,一些移动平台一直在努力优化其CPU / GPU的使用率,因为GPU更适合图形,并且它是移动领域的一个相对较新的功能,因此越来越多的与图形相关的OS部件正在向GPU清除了CPU的工作,并允许使用CPU电源优化功能(在许多情况下,还可以提高整个系统的速度)。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.