Android手机耗电分析

来源:互联网 发布:linux打开vi 编辑:程序博客网 时间:2024/04/29 13:10
最近在了解超频和耗电的事情,
先来说说CPU频率到底是怎么回事,它有什么效果,它和处理机是如何配合工作的。
CPU的处理机需要一个外部时钟来让自己工作,外部时钟接在处理机的总门上。当收到一个时钟脉冲时,处理机开始作业,当流水线满之后停止,再收到一个时钟时继续作业。
打个形象的例子就是你(处理机)站在马路上,你的身后有一个人(外部时钟),他推了你一把(一个时钟脉冲),你向前走了一步(处理流水线),他再推你一把你就再走一步,他不推你你就不走。
而CPU的频率也就这个时钟。1GHz的频率也就是说一秒内时钟要推动CPU 1000000000次。
这么看来CPU的频率越高,CPU在单位时间就会处理越多的指令,也就越耗电。但是这里面还有一个最最关键的东西,CPU的状态。
再说说CPU的状态。
CPU一般有两种状态,一个是Halt(待机),一个是Process(作业)。
当CPU处在Halt状态时,总门开放(接收外部时钟),中断开放,处理机关闭。
当CPU处在Process状态时,总门开放(接收外部时钟),中断开放,处理机工作。
两者之间的差别就在处理机是否在工作,而处理机是CPU的核心,也是CPU的主功耗所在。
处在Halt状态的CPU就像是你(CPU)躺在马路上一样,即使身后的人(时钟)再怎么推你(时钟脉冲),你也不会动。因为CPU的处理机关闭了,时钟脉冲此时只负责供让CPU接收某个中断进而从Halt状态转换到Process状态,不再提供处理机处理流水线。
到这里就不难看出了,Halt状态的CPU即使频率再高也不会有多少功率消耗,Process状态的CPU即使频率再低也要费电。

CPU的设计者们将CPU的状态更改权完全交给了使用者(也就是操作系统)。
再来说说操作系统对CPU的状态管理。
单任务操作系统(DOS系统)中,因为不存在任务调度和系统Idle,也就不存在让CPU发生状态切换。即此类系统启动后CPU将永远处在Process状态下。
多任务操作系统(Windows、Linux(包括安卓)、MacOS等等)中,操作系统需要做任务调度。
在系统内核里有一个参数是系统的刷新时间(也称之为任务时间片),一般在1毫秒到几十毫秒。操作系统首先根据调度表将需要执行的任务参数调入CPU寄存器和RAM的某个地址,然后开始执行这个任务,当刷新时间到达后,操作系统剥夺这个任务的执行权,将任务的参数保存起来,然后将系统内核的Idle任务参数调入CPU寄存器和RAM,让CPU去执行系统内核的Idle任务。而操作系统内核的Idle任务就是将刷新时间设置到CPU中断上,然后执行一个将CPU转换到Halt状态的指令。当刷新时间到达后,CPU的计时器会触发一个中断,CPU从Halt状态转换为Process状态,而操作系统继续调度下一个任务。如此循环。
到这里也就可以了解了,系统处在Idle任务中的时间越多则越省电,反之则费电。
用Windows系统笔记本的网友应该很清楚,打开任务管理器,Idle进程的CPU占有率越高,电池用的就越久。

再来说说Android系统,安卓是基于Linux系统内核的,所以此类操作均由Linux内核来完成。移动平台上的Android系统都有一个特点就是CPU频率自动调节(其实这个是在编译Linux内核的时候配置的CPU Frequency Scale),当系统不繁忙的时候将CPU频率调低。这样看来,当系统不繁忙的时候也就是内核Idle进程CPU占有率最高的时候,将CPU的频率调低,如此做法当真是省电的基础上又省电。
玩华为机器的网友有福了。。。你们可以在官网上下载对应的Linux内核源代码,然后配置编译。在配置的时候可以配置内核的刷新时间,如果把这个时间调的长一点,则会越省电(是非常非常的省电哦),但是系统用起来感觉就越卡钝,不断尝试找到一个自己能接受的时间点。
其实Windows7比WindowsXP省电的原理也在这里,微软在发布Win7的时候说过,他们把Win7的刷新时间调的比WinXP长了很多。


最后总结一下。还是那句话,如果你爱玩机,平时经常用手机上网。。。经常操作手机,那么还是别超频了。经常操作手机就已经让Idle的时间变得很短了,再超频无疑就是费电的基础上再费电。如果平时不爱玩手机,那么你可以去超频,去体会在需要的时候瞬间打开短信和电话的感觉,呵呵。

另外。。。Android的费电关键还是要看你后台有多少个服务在运行。运行的服务多,系统Idle的时间少,CPU的Halt状态也就少,也就越费电。反之越省电。



BTW,
Android要省电,需不需要安装一个第三方频率控制的软件?
这里没有标准答案,还是要看具体的手机使用情况。
首先,安装这个软件之后,他需要时刻监测CPU的负载,这无疑就降低了系统Idle的时间。
其次,他在调整的时候都是先通知Linux内核调整CPU频率,这中间又有一些任务要占用Idle的时间。
最后,从ARM7架构开始当调整CPU频率时,需要一个重新整合总线时钟的过程。频繁的调整会导致额外的Idle时间减少和其他硬件部件的瞬间耗电。
以前的ARM都是同步时钟,所以可以接受快速CPU时钟调节,但是现在的ARM都转为了异步时钟,就是假如处理机的时钟为800MHz而总线和门的时钟依然可以为1GHz。异步时钟可以在降低CPU频率的基础上依然保证高速的DMA和IO速度。当调节CPU频率的时候都是在直接调整总时钟,然后总时钟会先计算目标处理机时钟和总线等的时钟比例,然后调节到目标处理机时钟,最后再将总线和其他的时钟重新按照比例整合到一个适当的值。而这个比例的计算方法是储存在CPU里面的,用户不能更改。所以无论再怎么超频性能的提升都是一定范围的。
这也就是为什么在Android上把800MHz的CPU超频到1.2GHz却赶不上台式机上将CPU频率从2GHz超到2.4GHz带来的性能提升。
同理,玩Defy的用户应该明白,ME525和ME525+虽然都是OMAP3630的CPU,但一个是800MHz,一个是1GHz。即使前者超频到1GHz,其真实性能也赶不上ME525+,估计超到1.2G左右应该才差不多(跑分软件用的高精度计时器和CPU频率有关,不能说明什么)。
0 0
原创粉丝点击