嵌入式Linux的低功耗策略研究

來源:互聯網
上載者:User
嵌入式Linux的低功耗策略研究

摘  要:功耗是嵌入式裝置的一個十分重要的效能指標。在硬體設計和選型之後,功耗水平在極大程度上取決於軟體的設計。鑒於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應用。

(綜合電子論壇)

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.