梁衡,劉新新,鄭遠攀
(1.許昌學院計算機科學與技術學院,河南許昌461000;2.鄭州輕工業(yè)學院計算機與通信工程學院,河南鄭州450002)
基于Linux內(nèi)核的Android系統(tǒng)的應用平臺越來越廣泛,對電源管理的要求越來越高,目前應用最廣泛的動態(tài)電源管理(DPM)提供了一種操作系統(tǒng)級別的電源管理能力.相比傳統(tǒng)電源管理,通過用戶層制定策略與內(nèi)核提供管理功能交互,實時調(diào)整電源參數(shù)并同時滿足系統(tǒng)實時應用的需求,允許電源管理參數(shù)在短時間的空閑,或任務運行在低電源需求時可以被頻繁地、低延遲地調(diào)整,從而實現(xiàn)更精細、更智能的電源管理[1].
Android作為一種嵌入Linux內(nèi)核的操作系統(tǒng),依賴于Linux分層架構,包括應用程序層、應用程序框架層、系統(tǒng)運行庫層以及Linux內(nèi)核層4部分[2].以Linux為核心的應用程序層作為Android應用平臺層,使用Java語言編寫基于Java虛擬機運行環(huán)境的程序.作為Android應用平臺核心API應用程序框架,使得開發(fā)人員可以開發(fā)自定義應用程序,包括View System、Content Providers、Resource Manager、Notification Manager、Activity Manager、Window Manager、Package Manager.在使用 Android 應用框架時,系統(tǒng)通過系統(tǒng)運行庫層中的運行庫來支持用戶使用的各個組件,更好的為用戶提供服務.Android核心層是作為硬件和軟件棧間的抽象層,除了Linux2.6內(nèi)核的功能,還提供對硬件的驅動程序服務.
動態(tài)電源管理框架是指在一定規(guī)則和機制的基礎上,整合系統(tǒng)不同組件功能的動態(tài)優(yōu)化技術,從整體上看,它著眼于整個系統(tǒng)各個功能的最優(yōu)化設計,而不是僅僅局限于系統(tǒng)的局部性質,從而實現(xiàn)全局最優(yōu)的效果.
框架設計需求有如下幾點[3]:
(1)具備框架設計的靈活性;
(2)具備收集系統(tǒng)資源信息的能力;
(3)具備能夠同時進行普通任務和功能監(jiān)控任務的功能;
(4)具備外設狀態(tài)的變化獨立于管理策略變化的特性;
(5)具備支持動態(tài)電壓調(diào)節(jié)、動態(tài)頻率調(diào)節(jié)等硬件參數(shù).
DPM模塊中除DPM基本框架中的操作點管理、操作狀態(tài)管理、策略管理、設備約束管理外,還包括了擴展的策略優(yōu)化和CPU負載檢測模塊,使用任務級設備調(diào)度優(yōu)化策略,并在設備調(diào)度過程中根據(jù)動態(tài)CPU頻率自動調(diào)整參數(shù),減少能量消耗.DPM框架系統(tǒng)模型[4]見圖1.
圖1 DPM整體框架模型Fig.1 DPMoverall frame model
操作點對應整個平臺各種硬件的數(shù)據(jù)參數(shù),是動態(tài)電源管理框架中最基本的抽象組合[5-6].操作點實現(xiàn)如下:
struct dpm_opt
{
char*name; //操作點名字
struct list_head list;//初始化的操作點列表
dpm_md_pp_t pp[DPM_PP_NBR];//初始化參數(shù)
struct dpm_md_optmd_opt;//設備屬性
int constrained; //是否受其他條件約束
struct kobject kobj;//內(nèi)核設備對象結構
struct dpm_stats stats;//相關數(shù)據(jù)統(tǒng)計
int flags; //標志項
};
struct dpm_md_opt{
unsigned int v; //目標電壓(mV)
unsigned int cpu; //CPU頻率(kHz)
…… //其它參數(shù)
};
操作狀態(tài)是由多個操作點組成的狀態(tài)集合[7];操作系統(tǒng)可以認為是一個狀態(tài)機,通過事件的觸發(fā),操作系統(tǒng)可以在不同的狀態(tài)間進行切換,而針對同一狀態(tài)根據(jù)不同的負載,也可以進行不同的操作點間的切換,達到系統(tǒng)能耗的最優(yōu)化.
針對操作系統(tǒng)的狀態(tài)切換,可以與操作狀態(tài)進行一一對應,而當前系統(tǒng)所使用的操作點,可以通過策略進行管理,通過不同的策略的切換不同操作狀態(tài),達到切換不同操作點的目的.
Android系統(tǒng)中主要有以下 3種狀態(tài):USER_AWAKE;USER_NOTIFICATION;USER_SLEEP[8].而Android系統(tǒng)從工作狀態(tài)轉為休眠狀態(tài)的一個重要因素是一種叫Wake lock的鎖機制,Wake lock是對系統(tǒng)能否進入休眠狀態(tài)時的一個判斷前提.只有當前沒有用戶態(tài)應用程序且內(nèi)核態(tài)進程持有Wakelock,系統(tǒng)才能進入休眠狀態(tài),否則,在Wake lock鎖主動釋放或者超時自動釋放前,系統(tǒng)無法進入休眠狀態(tài).操作狀態(tài)的代碼如下:
struct dpm_class
{
char*name; //類名稱
struct list_head list;//初始化類列表
unsigned nops;//該操作類中操作點的個數(shù)
struct dpm_opt**ops;//指向操作點地址的指針struct dpm_opt*opt;//類中被選中的操作點
struct dpm_stats stats;//相關數(shù)據(jù)統(tǒng)計
};
操作策略,即管理策略,表示操作狀態(tài)與操作點或操作類之間的映射關系,根據(jù)不同操作狀態(tài)和操作點的映射關系可以定義不同的操作策略.
操作策略數(shù)據(jù)結構表示如下:
struct dpm_policy
{
char*name; //策略名稱
struct list_head list;//初始化類列表,鏈接到dpm_class鏈表中
struct dpm_class*classes[DPM_STATES];//該操作策略中包含的類
struct dpm_stats stats;//相關數(shù)據(jù)統(tǒng)計
};
操作點、操作狀態(tài)機操作類、操作策略之間的關系可以表示為鏈表形式,即:
extern struct list_head dpm-polieies;
extem struct head dpm_classes;
extern struct list head dpm_opts:
其中一個操作策略對應多個操作狀態(tài)即操作類,一個操作狀態(tài)對應多個操作點.
策略管理者通過底層的設備驅動管理設備的能耗,選擇滿足約束條件的操作點,保證設備在操作點下正常工作.約束數(shù)據(jù)結構表示如下:
struct constraints
{
int asserted;//設備約束是否起作用標志
int count;//約束參數(shù)的個數(shù)
int violations;//違反約束的操作點數(shù)
struct constraint_param param[DPM_CONSTRA INT_PARAMS_MAX];//約束參數(shù)
struct list_head entry;//初始化的約束列表
};
struct constraint_param
{
int id;//約束參數(shù)ID
int min;//最小約束值
int max;//最大約束值
};
目前,大多數(shù)研究中的DPM策略都著力于對目標設備進行負載檢測的角度,而忽略了不同負載任務的工作形式,不可避免地造成設備利用率降低以及預測策略的預測錯誤等情況[9-10].為排除這種不良狀況的發(fā)生,本研究從任務級的角度著手,考慮設備運行狀態(tài),提出了一種全新的在線設備調(diào)度策略IDSP(Improved Device SchedulingPolicy).引入任務隊列機制,基于先進先出的系統(tǒng)任務調(diào)度方式,實現(xiàn)任務運行前的設備實時調(diào)度,從而減少任務運行過程中設備的等待時間,減少狀態(tài)轉換功耗.有效節(jié)省運行總功耗.
假設系統(tǒng)共有M+1個用戶任務,表示為Ti(1≤i≤M)和系統(tǒng)空閑任務TM+1.任務隊列表示為TQ,長度為N(N>M),首任務表示為TQ{0},后續(xù)任務以此類推.系統(tǒng)將任務隊列中進入就緒狀態(tài)的任務按照FIFO(先進先出)規(guī)則進行調(diào)度.
首先按照規(guī)則:①相鄰子任務間至少使用了一個不同的外設;②保證某一外設在子任務執(zhí)行期間完全被使用;將任務Ti劃分為相互獨立的N個子任務{(diào)STi,1,STi,2,...,STi,n},子任務隊列表示為{STQ{0},STQ{1}...,STQ{n-1}}.根據(jù)實際任務分類空閑任務、單任務、多任務三種情況,作相應的策略處理.即:
其次將每個子任務STi,k都表示成一個二維數(shù)據(jù)結構 {SDi,SEi}.SDi表示每個子任務在執(zhí)行過程中所使用到的IO設備集,SEi表示每個子任務的執(zhí)行時間.
然后根據(jù)任務執(zhí)行隊列調(diào)度相對應設備.可以分為以下幾種情況[7]:①運行STi,k之前,若設備sdi∈SDi處于正常工作狀態(tài),且當STi,k與STi,k+1都不會使用sdi時關閉sdi;當STi,k不使用sdi但STi,k+1使用時,若子任務執(zhí)行時間sei≥TBE時關閉sdi,否則將sdi置為正常模式等待喚醒;②運行子任務STi,k之前,若設備sdi處于睡眠狀態(tài),則當STi,k不使用但STi,k+1使用sdi時,則STi,k運行完畢之前提前喚醒sdi.運行子任務STi,k之前,對子任務STi,k和子任務STi,k+1CPU負載情況進行操作點評估,并在任務STi,k運行中對當前CPU負載進行調(diào)整,以達到性能最優(yōu)化.
Android平臺系統(tǒng)中,/proc/loadavg文件中定義了系統(tǒng)在最近時間段中的系統(tǒng)平均負載.在系統(tǒng)運行過程中,內(nèi)核中全局變量current來標識運行進程[11-12],每過一段時間內(nèi)核中斷程序將執(zhí)行一次,可以在內(nèi)核中斷程序的下半部分增加CPU平均負載計算函數(shù):
Unsigned long actice_tasks;
Static int count=LOAD_FREQ;
Count-=iticks;
If(count<0)
{
Count+=LOAD_FREQ;
Active_tasks=count_active_tasks();
CALC_LOAD(avenrun[0],EXP_1,active_tasks);
CALC_LOAD(avenrun[1],EXP_5,active_tasks);
CALC_LOAD(avenrun[2],EXP_15,active_tasks);
}
通過上面代碼的調(diào)用可實現(xiàn)對系統(tǒng)平均負載的獲取.當?shù)玫较到y(tǒng)負載之后,將進行如下過程,調(diào)整CPU頻率:
(1)如果當前頻率大于設備約束條件,且向下調(diào)整頻率則無法滿足需求,則不做調(diào)整;
(2)如果當前頻率大于設備約束條件,且能夠在降低當前頻率也能夠保證約束條件,則在下個子任務執(zhí)行前,下調(diào)CPU工作頻率;
(3)如果當前頻率無法滿足設備約束條件,則在子任務執(zhí)行前,上調(diào)CPU工作頻率.
本文基于IDSP策略對多組任務進行了實驗,具體的實驗環(huán)境設置為:使用的CPU正常最高工作頻率為 1 500 MHz;工作頻率可在 1 500 MHz、1 000 MHz、700 MHz、300 MHz之間調(diào)整.任務組中共有 4 個可調(diào)度任務(T1、T2、T3、T4),各個任務對應的子任務的執(zhí)行時間及其所調(diào)用外設見表1.
表1 子任務執(zhí)行時間及相關設備表Tab.1 Son task execution time and related equipment
系統(tǒng)中設備均具有高能耗的正常狀態(tài)和低能耗的睡眠狀態(tài)這些設備的電氣特性,見表2,其中的功耗數(shù)值為單位功耗.
表2 設備電器特性Tab.2 Clectrical characteristics of equipment
該組的實驗目的是將本文提出的任務級IDSP策略與設備級的DPM策略TimOut進行功耗及性能的比較.TimeOut的固定超時時限設置為4個時間單元,即設備在經(jīng)過4個單元時間的空閑之后將進入休眠狀態(tài).該組實驗中兩種策略的實時功耗對比結果見圖2.IDSP策略任務組中CPU頻率調(diào)整與正常工作頻率對比結果見圖3.
圖2 策略功耗結果對比Fig.2 Comparison of strategy power consumption
圖3 CPU頻率調(diào)整結果對比Fig.3 Comparison of CPU frequency Adjustment
由圖2、圖3可知,IDSP策略中實施的CPU頻率調(diào)整后的數(shù)據(jù)明顯低于調(diào)整前的正常工作值,能夠有效降低CPU功耗.
本文基于動態(tài)電源管理基本框架,擴展了CPU頻率檢測功能和策略優(yōu)化功能,應用于Android平臺.根據(jù)任務分類提出一種新的任務級設備調(diào)度策略ISDP,并根據(jù)實時檢測到的調(diào)度過程中相關設備約束條件調(diào)整操作點,在保證設備正常工作條件下,減少了CPU功耗.相對傳統(tǒng)DLPM策略,本策略在一定程度上延長了設備使用時間,顯著降低了外設整體功耗.
[1]蘇健.Android智能手機平臺電源管理技術[J].微處理機,2011,10(5):66-69.
[2]張海絨.基于Android平臺的動態(tài)電源管理技術研究[D].昆明:云南大學,2011.
[3]IBMand Monta Vista Software.Dynamic power manag ement for embedded systems(V11.1)[EB/OL].(2002-11-19).http://www.resea rch.ibm.com/arl/projects/dpm.html
[4]劉發(fā)貴,麥偉鵬,黃凱耀.動態(tài)電源管理框架的擴展與實現(xiàn)[J].華南理工大學學報:自然科學版,2007,35(5):60-64.
[5]Binweinberg.基于Linux的動態(tài)電源管理:使嵌入式設備更節(jié)能[M].Monta VistaSoftware,2003.
[6]陽富民,梁晶,張杰,等.嵌入式Linux電源管理技術的研究與實現(xiàn)[J].計算機工程與科學,2004,26(12):93-95.
[7]卜愛國,劉昊,胡晨,等.基于任務級的動態(tài)電源管理設備調(diào)度策略[J].電路與系統(tǒng)學報,2005,10(5):33-38.
[8]Peek J,O’Reilly T,Loukides M.UNIX Power Tools[M].Sebastopol,California:O’Reilly&Assoc.Inc.,1997.
[9]Cockcroft A.Sun Performacne and Tuning[M].Mountain View,California:SunSoft Press,1995.
[10]Sesic A,Daut ovic S,Malbasa V.Dynamic power management of a system with a two priority request queue using probabilistic model checking[J].IEEE Transactions on Computer Aided Design of Integrated Circuits and Systems,2008,27(2):403-407.
[11]萬恩海,劉宗田.基于Linux動態(tài)頻率調(diào)整的DPM方案[J].計算機工程,2011,37(10):237-242.
[12]史軍勇,齊艷珂.Linux操作系統(tǒng)環(huán)境下CPU平均負載的研究[J].福建電腦,2009(6):119-121.