趙婉芳
(北京電子科技職業學院, 北京 100016)
隨著物聯網技術的發展,大量的移動終端連接入網,與傳統電子設備的電源類型和使用情況相比,大部分物聯網移動終端的電源一般都選擇使用電池供電,其優點是移動性強,體積小,但是也使得電源能量比較有限,而優秀的電源管理系統能使得電池的壽命延長2-3倍[1]。因此如何在有限的供電時間內,在不同的使用場景之下保證移動終端的正常使用是目前移動終端電源管理研究的主要方向。目前電源管理主要分為硬件和軟件的實現。硬件上,通過優化電路和改進工藝來降低電路的工作功耗。軟件上,通過管理軟件的執行,使電路盡可能地處于低功耗工作狀態。有效的電源管理不僅降低功耗,也能降低故障率。降低功耗的同時,電路的工作溫度也會減低,同時降低電路的故障率。本文主要研究LINUX系統中如何通過軟件進行動態電源管理。
在電源管理中,為了節省能耗,在設備的工作過程中決定一個設備是否需要降低性能或者被關閉的規則叫做電源管理策略。電源管理策略主要分為靜態電源管理技術和動態電源管理技術兩大領域。一般來講,在嵌入式移動終端設備中,設備的工作狀態主要在工作和空閑之間相互交替運行,這兩種工作狀態的能量消耗需求不同,CPU的工作頻率和工作電壓以及總線的時鐘頻率和設備的電源狀態差別很大。因此,為了設備能更好的節省能耗,通常通過使用動態電源管理策略將負載較輕的設備切換到低功耗的狀態下運行,動態調節設備的頻率及電壓,從而在滿足性能的前提條件下,有效降低系統整體功耗。動態電源管理中常見的狀態切換示意圖如圖1所示。

圖1 DPM控制的狀態切換圖
動態電源管理策略主要分為以下四種類型:
1)超時(Time-Out)策略:該策略原理為基于原有的工作經驗設置一個閥值,當設備空閑時間大于所設置閥值時,設備將自動進入睡眠狀態或低功耗狀態。這種策略最為簡單易用,因此在工業中應用廣泛,智能手機以及筆記本電腦的屏幕保護即采用此種策略。但策略的缺點是當閥值時間設置過長時,設備就會在等待超時時間到來之前產生比較多能耗。超時策略主要通過超時閾值來調整系統,與系統的負載無關,因此策略關鍵點是閾值的設置,目前有很多實現動態調整超時閾值的算法。
2)貪婪(Greedy)策略:該策略原理為使用標志位(flag)檢測設備的狀態和系統的請求狀況,如果該設備處于運行狀態并沒有系統請求,則將該設備工作狀態設置為低功耗狀態,當有請求到來時,再使該設備從低功耗狀態轉換到運行狀態。在實際的工作中如果工作狀態發生轉換,則不可避免地會帶來能量消耗及時間的延遲,因此當系統進行頻繁的狀態切換時,貪婪算法會消耗更多的能量和造成更多的延遲,從而產生抖動現象。因此工作狀態的轉換和系統延時之間的矛盾,使得貪婪策略很難成為最優算法。
3)基于隨機(Stochastic)過程策略:該策略原理為把系統負載當作隨機優化問題處理,系統的四個核心模塊即服務提供者、服務請求者、等待隊列和電源管理分別對應馬爾可夫的四個不同過程,并利用隨機的馬爾可夫過程求解。該策略可以用于交互式系統,處理多個狀態之間的切換問題。但由于該策略基于隨機概率模型,因此分析過程會有失真現象,和系統的真實性有一定區別。
4)預測策略:該策略主要使用推測的方法,通過設備的歷史空閑時間記錄和工作時間記錄去推測出未來的時間值,當這個值大于盈虧平衡時間時,設備處理完請求后則進入睡眠狀態或低功耗狀態,直到有用戶請求到達而返回工作狀態,如果值小于盈虧平衡時間時,設備則進入空閑狀態,直到有用戶請求到達。該策略算法涉及參數較多,實現相對較為復雜,當預測時間與實際時間有較大誤差時,則會造成一定的能量浪費和設備性能損失。
cpufreq驅動:根據CPU的負載,調整CPU的頻率和電壓。
在Linux系統中,為了能耗節省,有專門的電源管理模塊來進行設備的電源管理優化,其中非常重要的就是cpufreq模塊。cpufreq模塊是Linux內核設置頻率變化的處理器子系統,主要負責系統工作期間頻率的調整來實現設備的能耗控制。cpufreq提供了一個模塊化的接口來管理CPU頻率的變化。cpufreq模塊結構圖如下圖2所示:

圖2 cpufreq模塊結構圖
當CPU處于活躍狀態,CPU的頻率縮放功能可以使得操作系統調節CPU的頻率大小。當響應系統事件時,cpufreq可以根據系統負載自動進行縮放也可以通過使用用戶空間程序進行手動調節。CPU的頻率調節是在Linux內核中實現,調節頻率的設備則是cpufreq Governors。開始工作時,系統內核將自動加載所需模塊,在默認情況下啟用的是ondemand Governors。
大多數cpufreq驅動以及CPU頻率調節算法要求將CPU頻率設置為預定義的一個固定值。為了能夠實現動態頻率調節,cpufreq必須設置一個“目標頻率”并告知特定的驅動程序。在cpufreq策略中使用什么樣的頻率是通過使用cpufreq Governor來決定的。cpufreq Governors支持幾種電源使用方案,但一個時間只有一種方案有效。具體的cpufreq Governors方案如表1所示。

表1 cpufreq Governors方案
在以上Governor的使用中要注意,Performance Governor沒有節電效益,它只適用于數小時的繁重工作,甚至只有在CPU很少或從不空閑的時候使用;Userspace Governor取決于它是如何配置的,它可以為你的系統提供的性能和功耗之間的最佳平衡,在所有的governor中,它是最可定制的;Ondemand governor是一個動態的governor,當系統的負載是高時,允許CPU時鐘頻率達到最大,當系統空閑時則可以縮小時鐘頻率。Conservative governor設置CPU頻率取決于當前使用情況。它的不同在于,它逐漸地增加和減少CPU的速度,而不是在CPU上有任何負載時直接跳轉到高速度。這種模式更適合于電池供電的環境。另外還有一個最新加入的管理器是the schedutil cpufreq governor,它使用調度器所提供的CPU利用率的信息作為決策的輸入,為調度程序與CPU電源管理更緊密地鏈接創建接口。不同的Governor,具有不同的頻率設置策略,因此在具體的應用中要根據實際情況選用恰當的Governor才能達到節能目的,否則只會適得其反,不僅達不到降低系統能耗的目的,反而降低了系統性能。
在移動終端嵌入式設備中,通過動態電源管理可以有效降低系統整體功耗,從而延長系統待機時間。本文介紹了已有的動態電源管理策略,重點研究了LINUX系統中當系統處于工作狀態時負責電源管理的cpufreq模塊結構特點并分析總結出Governor部分在實際使用中的注意要點,為眾多基于Linux系統嵌入式設備的電源管理實際應用提供了一個有用的參考。
[1]Daler Rakhmatov etal.Energy Management for Battery-Powered Embedded Systems[J].ACM Transactions on Embedded Computing Systems,2003:277-324.