嵌入式Linux的低功耗战略研究
发布日期:2011-05-11
摘 要:功耗是嵌入式配置的一个非常告急的性能指标。在硬件筹划和选型之后,功耗程度在极大程度上取决于软件的筹划。鉴于Lioux在嵌入式配置中的应用日益广泛,提出在嵌入式Linux下软件编写的几种战略。通过这些软件编写要领,能有效低沉终极产品的功耗程度。
关键词:嵌入式Linux功耗战略
引 言
由于Linux体系具有嵌入式利用体系须要的很多特色,如适应于多种CPU和多种硬件平台、性能稳固、可裁剪性很好、源码开放、开辟和利用大抵等。如今,基于Linux应用的嵌入式配置日益增多,Linux正在嵌入式范畴发挥着越来越告急的作用。
敷衍嵌入式配置尤其是移动配置来说,功耗是体系的告急指标,体系筹划的告急目标之一便是要尽大概地低沉功耗。如今,对功耗的研究紧张会合在硬件办理方案上,而软件研究方面很少。实践证明:在硬件筹划和选型确定后,功耗的曲折与软件筹划有很大的讨论干系性。软件筹划和编程质量的优劣,极大地影响着终极产品的功耗程度。据此,为低沉功耗,提出在嵌入式Linux下软件编程的几种战略。
1 标题阐发
由于终极耗能的是硬件,以是在思量采取软件要领低沉功耗的时间,要充分思量硬件的结果和性能,即在保障体系实现的底子上怎样布局硬件运作而使功耗低沉。全速实行、待机和就寝等活动都是利用CPU的固有本领,透过低沉变乱电压或频率来节流功耗。别的,在大多数用户察觉不到的环境下,实际的电源办理可以大概根据负载状态垂垂变革体系的状态,偶然偶尔这种环境在l s之内可以孕育孕育产生数百次。
别的,在编写步调时大概会遇到如许的环境,如记录状态寄存器内容,并等待设置标记出现;查抄串口的FIFO状态标记,看是否收到数据;监测一个双端口存储器,以确定体系中是否有别的CPU写入了一个变量,以便控制共享资源。从外貌上看,如许的代码没有什么标题,但在每个时钟周期里不绝记录寄存器状态将无法有效扩展配置的电池寿命。
基于这些标题,下面提出几种战略,以有效低沉终极产品的功耗程度。
2 利用Linux内核的电源办理
电源办理战略的底子是调解处理惩罚处罚器内核的变乱电压和频率。不过,当代的嵌入式CPU具有非常高的电源屈从,以至于CPU并不总是最紧张的耗能组件。其他高耗能的组件包括高性能内存、表现屏和射频接口等,因此,要是电源办理体系只能调理CPU内核的电压和频率,那么它的用途将有限。一个真正有效的电源办理方案应该可以采取与CPU内核实行相调和或相独立的要领,支持对一系列电压和频率的快速调理。
Linux支持两种电源办理标准:APM(AdvancedPower Managememt)和ACPI(Advanced Configtlrationand P0wer Interface)。APM是传统的高级电源办理方案,如今仍旧利用在很多基于Linus便携式配置中;而ACPI则提供了更为机动的谋略机和配置办理接口。这两个标准不克不及同时运行。缺省环境下,Linux运行ACPI。APM可以使呆板处于Suspend(悬挂)或Standby(待机)状态,以及查抄电池容量;而ACPI还可以使外设(如表现器、PCI)单独断电,在节流电能方面有更多的控制。为了让电源办理结果见效,须要在Linux内核打开它,并且在Linux里加载必须的应用软件。
电源办理活动须要对利用体系内核和配置驱动步调举行分外的干涉干涉。在嵌入式Linux中,固然低层电源办理驻留在利用体系内核中,但电源办理战略和机制源头于中介软件和用户应用步调代码,如图l所示。
Linux内核中电源办理机制认真维持整个别系的电源状态。它可以当作是为驱动步调、中介软件和应用步调提供办事的元素。
通过在驱动步调中实现电源办理接口,可以让驱动步调密切监控体系状态。它们在外部变乱的驱动下,透过设置差别的状态反响配置的变乱环境。为了实现配置电源办理接口,须要实现以下利用:
①利用pm_register对配置的每个实例(instance)举行注册;
②在对硬件举行利用之前调用pm_access(如许可包管配置已被唤醒,并处于ready状态);
③用户本身的pnl_callback函数在体系进入suspend状态,大概从suspend状态光复的时间会被调用;
④当配置倒霉用时调用pm_dev_idle函数(这个利用是可选的,以加强配置idle状态的监测本领);
⑤当被unIoad的时间,利用pm_unreggister取消配置的注册。
中介步调容许用户预先定义某些战略,然后跟踪电源状态,实行特定的利用。
在应用步调中,利用中介步调提供的API,设立其底子的束缚条件,欺凌电源办理机制孕育孕育产生与着实行需求相结婚的变革。Linix电源办理的实现机制包括以下API,比喻dpm_set_os()(内核)、assert_constraint()、remove_constraint()和set_operatInK—state()(内核和驱动步调)、set_policy()和set_task_state()(经体系的用户级调用)以及/proc接口。
3 在空闲模式劣等待变乱
很多嵌入式CPU都具有能低沉功耗的电源变乱模式,最常用的是空闲模式。此时CPU内核指令实行部分封闭,而全部外设和克制信号仍处于事境况态。由于空闲模式比CPU实行指令时的功耗要小得多,因而可以在恣意时间,只要Linux查抄到全部线程都处于壅闭状态(如等待克制、变乱或定时时间),它都可以将CPU置于空闲模式。恣意克制(如触摸屏变乱、按下按键变乱等)都能把CPU从空闲模式中唤醒,然后连续实行反面的代码。要是变乱不克不及直连续接到外部克制,也可以用一个别系定时器定期唤醒CPU。比喻在等待一个变乱并且知道只要变乱孕育产生后在10 ms内能检测到,那么可以启动lO ms定时器,并把CPU置于空闲模式。每次处理惩罚处罚定时克制时都要查抄变乱状态,要是状态没有变革,就立即回到空闲模式。
4 淘汰变乱
通常CPU的定时克制隔绝为1 ms,Linux会频繁使CPU置于空闲模式,并不绝维持到被克制唤醒。在这种环境下,最有大概唤醒CPU克制的是定时器克制本身。纵然全部其他线程被壅闭,在其他克制、内部变乱及永劫间扩展之前,定时器克制也会以每秒l 00()次的频率把CPU从空闲模式中唤醒,以运行调理步调。就算调理步调确定全部线路都被壅闭,并很快将CPU再起到空闲模式,如许频繁利用也会浪费大量电源。因此,应尽大概永劫间地将CPU置于空闲模式,而淘汰变乱是办理这个标题标有效途径。通过阐发代码和体系恳求,以决定是否能变革处理惩罚处罚克制的要领实现。比喻,可以在进入空闲模式前封闭时隙克制信号,只有再次出现克制信号时才被唤醒。不过,这种做法通常不太切合。只管多数壅闭的线程可以直接或间接等待外部克制,有些还依赖于定时克制,如一个驱动器会在等待外设时就寝500 ms,这时空闲模式下要是完全封闭体系定时器,大概意味着线路不克不及定韶光复变乱。
Linux最好能为调理步调举行可变超时设置。Lintux知道每个线程无法确定等待的是外部还是内部变乱,大概操持在某特定时间再次运行。Linux可算出第一个线程预定何时运行,并相应地在CPU置于空闲模式之前设置定时器变乱。可变超时设置不会对调理步调导致很大的包袱,但却能节流电源和处理惩罚处罚时间。
可变操持超时限定只是淘汰变乱的一种要领,存储器直接存取(DMA)也可让CPU永劫间处于空闲模式,纵然数据正在发送至外设或从外设收取。以是只要大概,都应在外围驱动器中利用DMA,省电结果相适时人得意。
比喻英特尔公司StrongARM CPU串口汲取FIF0时,约莫每收到8个字节孕育产生1次克制,在115 2OO bps.速率下,发送到这个端口的11 KB脉冲数据会引起CPU内核每秒克制l 500次,很大概使其从空闲模式中唤醒;但要是实际上不须要在这些小的8字节配置中处理惩罚处罚数据,浪费是很惊人的。DMA最好与大容量缓冲器一起利用,以使克制孕育产生的程度越发容易办理,大概是每秒10次或l00次,让CPU在两次克制之间空闲。原形证明,在这些场合应用DMA能淘汰利用率达20%,可低沉CPU功耗,并进步供其他线程利用的CPU带宽。
5 控制CPU的性能
CPU在低沉功耗方面的最新渴望表明,CPU斲丧的能量与驱动CPU的时钟频率以及应用其内核上的电压平方成正比。
CPU容许动态低沉时钟速率。低沉一半时钟速率,功耗将成比例降落。但是仅采取这种技能实现节能,还须要一些本领.由于实行的代码大提要两倍长的时间才华完成,纵然如许也不会省电。比喻,板上LCD控制器须要利用一个生存在片外SDRAM中的帧缓存。当LCD控制器变乱时,须要指定富裕高的内存总线频率来餍足表现器改造速率的须要。在LCD不变乱的环境下(比喻当PDA仅作为MP3播放器利用时),低沉SDRAM总线频率,可以节流整个别系的功耗。
动态低沉电压是另一种做法。越来越多的CPU容许低沉电压,以适应CPU时钟速率的降落,如许在低沉时钟速率时也能省电。原形上,只要CPU不饱和,频率和电压就能不绝淘汰,如许还是能完成变乱,而斲丧的电源总体上却比较低。
思量到并不是全部线程都斲丧同样多CPU带宽,以是纵然这些要领也还是可以改革的。有效应用CPU带宽的线程,会随着CPU时钟速率降落而花更长的时间才华完成,这些线程利用分派给它们的每一个周期。另一方面,I/O线程采取分派给它的全部CPU周期,即便CPU时钟速率降落,也要用同样长的时间才华完成。比喻,像很多PDA利用的PCMCIA卡接口,当数据写人快闪存储卡时,体系瓶颈不是CPU的速率,而是物理总线接口以及卡的固件为擦失和重新编程闪存所花的时间。抱负环境下,前面讨论的等待变乱的技能可在这里应用,以最大程度低沉功耗,但是等待时间通常变革很大,远小于利用体系运行时间,如许会影响到性能。这些驱动步调通常检测状态寄存器,此时低沉时钟速率将节流一部分电源,但会对数据写入卡的时间孕育孕育产生轻微影响。
利用控制CPU性能的战略,要知道何时能低沉时钟频率和电压而不会明显影响性能;思量什么时间低沉驱动器和应用步调的时钟速率比较难处理惩罚处罚。这在多任务处理惩罚处罚环境中越发富有本领性。
6 结 论
比年来随着谋略机和网络通讯、斲丧电子合一的加快生长,嵌入式产品成为信息财产的主流。Linux在短短的十几年时间已经生长成为结果强大筹划美满的利用体系之一,可运行在X86、Alpha、Sparc、MIPS、PPC、Motorola、NEC、ARM等多种硬件平台上,并且开放源代码,并可以定制,越来越多的企业和研发机构都转向嵌入式Linux的开辟和研究上。本文在体系阐发的底子上,研究了在嵌入式Linux体系中通过优化软件编写机制来低沉终极产品功耗程度的要领,具有很强的实际应用意义。随着研究的深入,嵌入式Linux必将表现出其在低功耗方面的精良性,将有更多的嵌入式配置广泛Linux应用。