嵌⼊式Linux系统(⼋)——嵌⼊式Linux的低功耗策略
姓名:⾼静            学号:19020100031    学院:电⼦⼯程学院
【嵌⽜导读】嵌⼊式Linux的低功耗策略
【嵌⽜⿐⼦】嵌⼊式  Linux系统
【嵌⽜提问】嵌⼊式Linux系统有哪些低功耗策略
【嵌⽜正⽂】
引 ⾔
由于Linux系统具备嵌⼊式操作系统需要的很多特⾊,如适应于多种CPU和多种硬件平台、性能稳定、可裁剪性很好、源码开放、研发和使⽤简单等。现在,基于Linux应⽤的嵌⼊式设备⽇益增多,Linux正在嵌⼊式领域发挥着越来越重要的作⽤。
linux内核设计与实现 pdf对于嵌⼊式设备尤其是移动设备来说,功耗是系统的重要指标,系统设计的重要⽬标之⼀就是要尽可能地降低功耗。现在,对功耗的研究主要集中在硬件解决⽅案上,⽽软件研究⽅⾯很少。实践证实:在硬
件设计和选型确定后,功耗的⾼低和软件设计有很⼤的关联性。软件设计和编程质量的好坏,极⼤地影响着最终产品的功耗⽔平。据此,为降低功耗,提出在嵌⼊式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应⽤。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。