热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

嵌入式linux更省电,基于嵌入式Linux的智能手机省电设计

用户程序API,用户程序(应用软件)分为三类:(1)可感知电源管理的应用软件;(2)可感知电源管理的“包装器”中的传统应用软件;(3)不带电源管理的传统

用户程序API, 用户程序( 应用软件) 分为三类:

(1)可感知电源管理的应用软件; (2)可感知电源管理的“包装器”中的传统应用软件; (3)不带电源管理的传统应用软件。

可感知电源管理的应用软件能够充分利用来自策略管理器的API, 从而建立各自的基础约束, 并强制电源管理策略发生变化, 以便匹配各自的执行要求。不直接带有电源管理功能的传统应用软件可以“包装”到代码或补丁中, 从而实现相当的效果, 它们还可以按照默认行为来运行, 这取决于更宽范围的默认策略管理。

b6a5484b615dde87336c38b9c06051ec.png

嵌入式Linux DPM 下的实际机制包括各种API, 比如dpm_set_os ()( 内核) 、assert_conSTraint ()、remove_constraint () 和set_operaTIng_state () ( 内核和驱动程序) 、set_policy () 和set_task_state()( 经由系统调用的用户级接口) , 以及/proc 接口。

电源管理策略在系统电源管理中扮演了极为关键的角色。DPM的策略抽象模型的执行体系类似于状态机。在DPM中有2个概念很重要: 一个是执行点(operaTIng points), 另一个是执行状态( operaTIng states) 。DPM的执行点来自一些独立的系统参数, 包括执行电压, 频率, 以及总线带宽等等。随着事件的改变, 系统的状态也不断的改变( 如图2 所示) 。在DPM中, 每个系统状态都是一个执行状态, 包括空闲态、活动态和睡眠态。

自适应电压调整(AVS)

在CPU 的选择部分, 我们知道了系统能耗是与电压和频率紧密相关的。现在我们来探讨一下调整电压在降低能耗方面的作用。在电压调整方面, 自适应电压调整是一种很有效的方法。自适应电压调整AVS(Adaptive Voltage Scaling)是通过反馈机制将电源电压调整到给定工作负载(处理量)所需的最小值。这种闭环方式可进一步减小功耗, 但需要将部分电源管理电路置入主处理器。

成功实现AVS 的关键是在基带芯片中集成部分系统电源管理电路, 即内置AVS 控制器(图3)。这一关键模块包含专门的电路和算法, 用来确定给定处理量下的最优电压。通过向电压调整器的参考端输入馈送误差信号, 可以生成最优的VDD, 无需提供不必要的电压余量, 从而减少了电能损耗。对任何闭环方法来说, 环路带宽都是很重要的。环路快速跟踪并稳定的能力决定了基带电源动态调整以自适应工作负载突变的能力。

通过软件方法降低设备功耗

低能耗软件优化对于基于处理器系统的应用程序而言, 是最有发展前途的降低系统能耗的技术方法。这种方法对于那些计算复杂度较高的应用程序最为有效。因为只有在应用程序执行的时候, 才会消耗大量电源。

这项技术的最终目的是在执行较为复杂的应用程序时, 尽量降低能耗。我们的程序用于降低计算的复杂度, 但不能改变程序原本的行为。现在我们通过图4(A) 中的例子, 来阐述一下一些有关软件优化的想法。

考虑主函数中第一次调用过程test。如果档参数a 和差数k都是0 的概率为90%, 我们可以将源代码改写为图4(B) , 通过改写, 我们减少了test 过程中的循环数。但在现实中, 参数a 和k 并不是总是为0。那么test 的过程调用不能被新的过程sp_test 所完全替代。我们用一个条件语句来限定过程的调用, 所有的过程调用依赖于cvd_test()的结果。当过程cvd_test()检测为一般情况( a,k同时为0) , 符合此条件的修正后的代码被执行。如果当过程cvd_test()检测为非一般情况( a,k 非同时为0) , 原有的代码被执行。在另一方面, 当过程cvd_test()检测为非一般情况, 我们提升了程序的计算复杂度, 也相应提高了能耗。

一般而言, 对代码优化有各种各样不同的方法。如果我不考虑参数k, 我们可以将源代码转化为图4(C) 所示。a 为0 的概率大于a 和k 同时为0 的概率。在不同情况下, 对原有代码所做的修改有不同的效果。

最后, 我们必须检验修改过的代码对原有代码的影响, 是不是改变了原有代码的行为, 在任何条件下我们都不能去擅自改变原有代码的行为。代码质量的提升也是相当的重要的。对于C 语言来说, 将一些简单的函数转换为宏定义时一种比较有效的方法。

综上所述, 我们可以将一般情况下代码优化分为4 个步骤:

(1)一般案例的选择。选择最有效的、最长被调用的案例。

(2)一般案例的提炼。为给出的一般案例建立一个过程。

(3)全局检测。检测改变后的调用对于全局的影响。

(4)提高代码质量。使用一些编程语言中的基本技巧, 以提高代码质量。

总结

在移动终端设备设计方面, 节能成为了一个很重要的设计指标。我们选取了更高效的CPU 以降低能耗。对于交互式应用程序而言, 我们使用DPM策略降低处于空闲态的能耗, 这种方法主要使用于OS 层。而AVS 技术是通过电压调整来实现减少能耗。在应用程序层, 我们通过对软件的优化来达到降低能耗的目的。在Intel? PXA27x 处理芯片环境下, 通过以上方法, 我们降低了26%的能耗, 提高了30%的系统性能以及增加了7%的代码量。



推荐阅读
author-avatar
饱和深潜者_463
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有