摘 要:Linux是一個優(yōu)秀的開源操作系統(tǒng),廣泛應(yīng)用于各類計算設(shè)備,如基于X86處理器的臺式機和筆記本電腦、基于ARM處理器的智能手機以及各類嵌入式系統(tǒng)。Android系統(tǒng)作為智能手機中市場占有率最大的手機操作系統(tǒng),其內(nèi)核使用的是Linux。智能手機依靠鋰電池供電,一次充電后可供使用的電能有限,因此需要在滿足良好用戶體驗前提下盡可能地節(jié)省電能的使用。智能手機有眾多的硬件部件,CPU是消耗電能的大戶。本文簡要分析了Linux中的CPU的以降低電能使用量為目標(biāo)的能耗管理技術(shù)。
關(guān)鍵詞:Linux;Android;處理器;能耗
基金項目:四川省軟科學(xué)研究計劃項目資助(項目編號:2019JDR0042)。
1 引言
根據(jù)全球領(lǐng)先的信息技術(shù)研究和顧問公司Gartner發(fā)布的數(shù)據(jù),2017年第一至四季度智能手機的銷售量分別為3.8億臺、3.662億臺、3.83億臺和4.08億臺,全年的總銷售量達(dá)到了15.372億臺。根據(jù)美國加州大學(xué)圣地亞哥分校GreenDroid項目組2009年的調(diào)研報告,當(dāng)時上市銷售的基于Android 2.2的HTC G7智能手機標(biāo)配電池是1400mAh,處理器使用的是高通公司的驍龍QSD8250,主頻只有1GHz,正常使用時平均功率為0.6W,可連續(xù)工作8.63h,基本上需要一天一充;空閑時平均功率為0.05W,可正常待機103.6h,大約為4.32天。若按此耗電量計算,全年新銷售的智能手機每天需要消耗的電能是79.62696億瓦時,即7900000度電。這還不包括在每天在充電過程中由220 伏交流電轉(zhuǎn)換為5伏直流電的過程中的電能損失。2020年上市銷售的小米10手機,處理器使用的是高通公司的驍龍865,內(nèi)置的電池容量高達(dá)4780mAh,是HTC G7手機電池容易的3.4倍。手機的平均更換周期為12個月,考慮到未來移動互聯(lián)網(wǎng)的快速發(fā)展和廣泛應(yīng)用,預(yù)計到2020年,90%以上的手機都將是智能手機,如果不加以改進(jìn)的話,智能手機等智能嵌入式系統(tǒng)將占ICT 行業(yè)總電能消耗的25%以上。
此外,智能手機電池管理對用戶使用體驗影響很大。Alex Shye等研究人員通過一個持續(xù)6個月、涉及25個用戶的研究發(fā)現(xiàn),電池管理是用戶體驗的一個重要組成部分,包括幾乎是每天一充以及頻繁的低電量指示。對于外出工作或旅游的人,通常會攜帶體積較大的充電寶來臨時解決低電量的窘境,極大影響了手機使用的體驗。
軟件肆無忌憚地使用CPU計算資源的日子將終結(jié),軟件需要以盡可能節(jié)能的方式使用計算資源,否則會帶來高能耗的后果。1965年,戈登·摩爾(Gordon Moore)提出摩爾定律,同時也指出“集成電路特征尺寸的縮小,使得在相同的功耗密度下,芯片能更高速地運行”。大約10年后,這個創(chuàng)新途徑被IBM的羅伯特·登納德(Robert Dennard)歸納為“登納德按比例縮小定律”,從而開創(chuàng)了以指數(shù)方式降低器件工作電壓和提高時鐘頻率的可能性。但是登納德按比例縮小定律在2004年失效,導(dǎo)致CMOS(互補金屬氧化物半導(dǎo)體)邏輯系統(tǒng)出現(xiàn)功耗-頻率危機。
因此,有效地使用CPU的計算能力進(jìn)而提高電池電量的使用的有效性變得越來越重要。Linux內(nèi)核提供了一些技術(shù)手段來實現(xiàn)這一目的。
2 CPU的能耗管理技術(shù)與Linux內(nèi)核的支持
1997年由Intel等公司共同制定了ACPI(Advanced Configuration Power Interface)規(guī)范,它的主要目標(biāo)是使整個計算機系統(tǒng)能夠動態(tài)地管理電源。ACPI定義了計算機系統(tǒng)的全局狀態(tài)、設(shè)備電源狀態(tài)和處理器電源狀態(tài)。計算機系統(tǒng)的全局狀態(tài)為G0,G1,G2,G3,其中睡眠狀態(tài)G1又細(xì)分為S1到S4共4種狀態(tài)。設(shè)備狀態(tài)D0,D1,D2,D3是與設(shè)備相關(guān)的狀態(tài),對用戶來說往往是不可見的。其中D0是工作狀態(tài),D1,D2是中間狀態(tài),D3是關(guān)閉狀態(tài)。處理器電源狀態(tài)C0到Cn是指在全局狀態(tài)G0下(只對G0狀態(tài)有效)處理器的狀態(tài),只有C0狀態(tài)下CPU才會執(zhí)行指令,C1到Cn狀態(tài)下CPU都處于各種不同程度的睡眠狀態(tài)。處理器性能狀態(tài)(即Px狀態(tài))是在C0狀態(tài)下定義的電源消耗和性能的狀態(tài)。當(dāng)處理器在運行時,它可以處于P狀態(tài)中的一個狀態(tài)中。每一個P狀態(tài)指明一個特定的DVFS設(shè)置組合。P狀態(tài)與實現(xiàn)有關(guān),但P0始終是最高性能狀態(tài),而P1到Pn是連續(xù)的較低運行性能的狀態(tài),直到實現(xiàn)所指定的限制。
在Linux中,CPU處于C0狀態(tài)時,若當(dāng)前沒有就緒進(jìn)程可供調(diào)度執(zhí)行,則任務(wù)調(diào)度器會調(diào)度空閑任務(wù)來執(zhí)行。CPU在運行狀態(tài)時,可以根據(jù)需要使用CPU支持的DVFS技術(shù)設(shè)置到不同的運行頻率,即不同的P狀態(tài)。在Linux中,空閑任務(wù)是由cpuidle模塊負(fù)責(zé)的,而頻率的調(diào)節(jié)工作是由cpufreq模塊負(fù)責(zé)的。下文以ZTE Blade V880智能手機所使用的2.6.35版本的Linux內(nèi)核為例,分析這兩個模塊。
1)cpuidle。cpuidle是一個通用的內(nèi)核基礎(chǔ)設(shè)施,用于分隔開空閑策略(governors)與空閑機制(drivers),并提供一個標(biāo)準(zhǔn)化的基礎(chǔ)設(shè)施來支持governors和drivers的獨立開發(fā)。cpuidle的總體架構(gòu)如圖1所示。cpuidle core負(fù)責(zé)實現(xiàn)cpuidle的整體框架。cpuidle drivers負(fù)責(zé)idle機制的實現(xiàn),不同的硬件平臺及CPU會使用不同的cpuidle驅(qū)動程序。不同的空閑機制會帶來不同的能耗效果以及不同的空閑狀態(tài)退出延遲,通常高能耗的空閑狀態(tài)退出延遲較低,而低能耗的空閑狀態(tài)退出延遲較高,這將可能導(dǎo)致用戶體驗的不同。
空閑進(jìn)程程序的主函數(shù)是cpu_idle(),它主要工作是間接調(diào)用msm_pm_swfi()將CPU設(shè)置“等待中斷”低能耗狀態(tài),直至接收到一個中斷或調(diào)試請求。
2)cpufreq。當(dāng)CPU在運行時,選擇一個合適而不是過高的頻率可以需要滿足性能需求又可以降低電能消耗。與cpuidle的結(jié)構(gòu)類似,cpufreq也由core部分,governors部分與drivers部分組成。drivers部分與硬件平臺相關(guān),使用CPU支持的DVFS技術(shù)進(jìn)行CPU頻率動態(tài)設(shè)置。governors提供CPU頻率的選定策略,即使用何種算法來確定合適的CPU頻率。core部分協(xié)調(diào)governors與drivers。在cpufreq中,將CPU執(zhí)行頻率的上下界和使用的governor一起稱為policy。driver部分的注冊由cpufreq_register_driver()在驅(qū)動程序加載時完成。governor是可以選擇的,可以編寫自己的governor。在drivers\cpufreq\makefile編譯文件配置需要編譯到內(nèi)核的governors。內(nèi)核中常見的governor有: Performance,Powersave,Userspace,Ondemand和Conservative。Performance總是將CPU頻率設(shè)置在最高可用頻率上,以達(dá)到最高性能,而與之相反,Powersave總是將頻率設(shè)置在最低頻率,以達(dá)到最低的能耗。Userspace通過sys提供接口供運行在用戶空間中的應(yīng)用程序直接設(shè)置CPU的運行頻率,為應(yīng)用程序使用自己的頻率設(shè)置算法提供了支持。Ondemand和Conservative在確定CPU頻率時都依據(jù)定時檢測的CPU利用率。前者在檢查到利用率超過預(yù)設(shè)的臨界值時,將設(shè)置CPU運行在最高頻率上,否則設(shè)置CPU為當(dāng)前頻率的下一個更低頻率;后者在檢查到利用率超過預(yù)設(shè)的較高臨界值時,將設(shè)置CPU運行在當(dāng)前頻率的下一個更高頻率上,而不是直接設(shè)置到最高頻率。一些定制的內(nèi)核還會包括其它的governors,如Interactive、SmartassV2等。
3 結(jié)語
Android系統(tǒng)使用的是Linux內(nèi)核。智能手機依靠鋰電池供電,一次充電后可供使用的電能有限,因此需要在滿足良好用戶體驗前提下盡可能地節(jié)省電能的使用。智能手機有眾多的硬件部件,CPU是消耗電能的大戶。Linux中CPU的能耗管理技術(shù),主要是通過cpuidle和cpufreq來實現(xiàn)的,前者解決在CPU空閑時設(shè)置CPU到何種低能耗狀態(tài),后者解決的是CPU在執(zhí)行非空閑任務(wù)時CPU應(yīng)設(shè)置到何種頻率,以能滿足用戶需求同時能以最低能耗為代價。
參考文獻(xiàn)
[1]Linux cpuidle framework(1)_概述和軟件架構(gòu)[OL].http://www.wowotech.net/pm_subsystem/cpuidle_overview.html,2020-05-31.
[2]林錦標(biāo).Android移動終端的電源管理策略的研究與實現(xiàn)[D].廣州:華南理工大學(xué)[碩士論文],2015.6.
作者簡介
劉云本(1981-),男,漢族,湖北大冶人,講師,碩士學(xué)位,研究方向:綠色計算。