序
2014年Linux內(nèi)核峰會(huì)(Linux Kernel Summit 2014)上舉辦了為期一天的EAS主題研討會(huì)。來(lái)自Arm的Morten Rasmussen做會(huì)議主持,來(lái)自Linaro的Daniel Lezcano和Mike Turquette介紹了最近發(fā)布的EAS相關(guān)工具,從此EAS開(kāi)始快速發(fā)展并被人所知,智能設(shè)備的廠商們爭(zhēng)先恐后地學(xué)著應(yīng)用此技術(shù)。
節(jié)約能源的觀念我們并不陌生,可是讓內(nèi)核學(xué)會(huì)自己節(jié)約能源卻是一件新鮮的事情,谷歌在2017年發(fā)布的Google Pixel 2就具備這一技術(shù)。EAS不僅讓Google Pixel 2功耗降低,還可以更快?快來(lái)看看這是怎么回事。
注:
1.“core” 一詞在CPU相關(guān)文章中經(jīng)常翻譯為“內(nèi)核”,但是在本文中翻譯為“核”,以區(qū)別軟件的內(nèi)核“kernel”。
2. big.LITTLE是由ARM公司于2011年提出的基于異構(gòu)計(jì)算的CPU架構(gòu)。在這個(gè)架構(gòu)中,分為相對(duì)較耗電但運(yùn)算能力強(qiáng)的核所組成的大核“big”,和相對(duì)耗電低但運(yùn)算能力弱的核組成的小核“LITTLE”,這些核共享存儲(chǔ)器區(qū)段, 因此可以在大核和小核之間即時(shí)交換工作負(fù)載。采用big.LITTLE架構(gòu)的CPU,可以同時(shí)擁有強(qiáng)大計(jì)算能力和節(jié)能的特點(diǎn), 一般運(yùn)用在移動(dòng)設(shè)備上。
3. OnePlus 3是一加手機(jī)第三代旗艦機(jī),搭配高通驍龍820 處理器;2016.06.15 上市。OnePlus 3T搭配高通驍龍821處理器;OnePlus 6搭配高通驍龍845 處理器, 2018.05.18上市。本文發(fā)表于2018.6.30,主要對(duì)比分析了當(dāng)時(shí)一加的最新產(chǎn)品OnePlus 6和Google最新產(chǎn)品Pixel 2 對(duì)EAS技術(shù)的應(yīng)用情況。
這對(duì)您的下一款智能手機(jī)意味著什么
當(dāng)Linux還只是Linus Torvalds頭腦中的一個(gè)想法時(shí),那個(gè)年代只有單核CPU,這些CPU的功耗很小。第一個(gè)商用處理器Intel 4004在單核上以740kHz的頻率運(yùn)行。那時(shí)還不需要使用負(fù)載調(diào)度器(load scheduler)。負(fù)載調(diào)度器的出現(xiàn)是為數(shù)十年之后出現(xiàn)的IBM Power 4等雙核“龐然大物”準(zhǔn)備的。它們運(yùn)行在驚人的1.1GHz到1.9GHz之間,并且需要程序和系統(tǒng)的支持才能正確運(yùn)行多核。我們?nèi)绾巫屵@些機(jī)器硬件(即多核CPU)使用多核的軟件算法?您可能以前在我們的論壇上聽(tīng)說(shuō)過(guò)功耗感知調(diào)度(EAS)。這是Google Pixel智能手機(jī)表現(xiàn)如此出色的部分原因。EAS到底是有什么了不起,以及我們?nèi)绾螒?yīng)用它?在解釋之前,我們需要討論Linux調(diào)度器。
Linux調(diào)度器的演變
輪轉(zhuǎn)調(diào)度
輪轉(zhuǎn)(round robin)是一個(gè)容易解釋也容易理解的概念,而且也不難理解其缺點(diǎn)。輪轉(zhuǎn)使用時(shí)間片為每個(gè)進(jìn)程分配時(shí)間。假設(shè)我們的計(jì)算機(jī)上正在運(yùn)行四個(gè)進(jìn)程。
進(jìn)程A
進(jìn)程B
進(jìn)程C
進(jìn)程D
現(xiàn)在,讓我們描述輪轉(zhuǎn)調(diào)度器的工作。在繼續(xù)進(jìn)行下一步之前,我們將為每個(gè)進(jìn)程分配100毫秒(時(shí)間片)。這意味著進(jìn)程A先執(zhí)行100毫秒,然后輪到進(jìn)程B執(zhí)行,依此類(lèi)推。如果應(yīng)用程序的工作需要250毫秒才能完成,則僅需完成3次此過(guò)程即可完成工作!現(xiàn)在,將以上方法擴(kuò)展到多核,以便將進(jìn)程A和進(jìn)程B分配給核1,將進(jìn)程C和進(jìn)程D分配給核2。這種方法被O(n)調(diào)度取代(O(n)調(diào)度類(lèi)似于輪轉(zhuǎn)調(diào)度,但是新增了 epoch ,并允許動(dòng)態(tài)分配時(shí)間),然后產(chǎn)生了O(1)調(diào)度(O(1)調(diào)度讓開(kāi)銷(xiāo)最小化,且支持無(wú)限制的進(jìn)程),最后產(chǎn)生了完全公平調(diào)度器(CFS)。CFS于2007年10月合并到Linux內(nèi)核版本2.6.23中。
完全公平調(diào)度器
完全公平調(diào)度器自誕生以來(lái)就用在Android中,并且在非big.LITTLE設(shè)備上使用。它使用一種智能算法來(lái)確定處理順序,時(shí)間分配等。這是經(jīng)過(guò)精心研究被稱(chēng)為“加權(quán)公平排隊(duì)”調(diào)度算法的應(yīng)用實(shí)例。CFS主要為機(jī)器上運(yùn)行的系統(tǒng)進(jìn)程和其他高優(yōu)先級(jí)的進(jìn)程提供優(yōu)先權(quán)。如果要在big.LITTLE設(shè)備上運(yùn)行,則所有核將被視為平等。這很不好,因?yàn)榈凸暮丝赡鼙黄冗\(yùn)行密集的應(yīng)用程序,或者更糟的是發(fā)生相反的情況(譯者注:即一段時(shí)間內(nèi)高功耗核運(yùn)行的應(yīng)用程序非常少,對(duì)高功耗核是一種浪費(fèi))。例如,聽(tīng)音樂(lè)的解碼過(guò)程也許會(huì)在大核上執(zhí)行,這就造成了不必要的功耗增加。這就是我們需要為big.LITTLE設(shè)備使用新調(diào)度器的原因,新調(diào)度器才能夠以節(jié)能方式識(shí)別和利用核差異。這就是異構(gòu)多處理(HMP)的出現(xiàn),它是大多數(shù)Android手機(jī)現(xiàn)在正在運(yùn)行的標(biāo)準(zhǔn)調(diào)度器。
異構(gòu)多處理
這是近年來(lái)發(fā)布的任何big.LITTLE設(shè)備(Google Pixel除外)的標(biāo)準(zhǔn)調(diào)度器。HMP利用big.LITTLE架構(gòu),將低優(yōu)先級(jí)且不那么繁重的工作委派給消耗更少功率的小核。HMP是“安全的”,即不會(huì)犯錯(cuò)誤的,它知道哪些任務(wù)應(yīng)該去大核,哪些應(yīng)該去小核。它確實(shí)可以工作,并且相比EAS在開(kāi)發(fā)方面所需的精力更少。(EAS會(huì)在下文詳細(xì)介紹。) HMP只是CFS的擴(kuò)展,以使其具有功耗意識(shí)。
HMP不會(huì)猜測(cè),即不會(huì)預(yù)測(cè)未來(lái)的進(jìn)程。這沒(méi)毛病但這就是為什么HMP設(shè)備不能像運(yùn)行EAS的設(shè)備那么流暢的原因,也是為什么它會(huì)更耗電的原因。最后,HMP的不足使我們迎來(lái)了功耗感知調(diào)度(EAS),我堅(jiān)信未來(lái)隨著更多OEM的采用,EAS將應(yīng)用于ROM和內(nèi)核開(kāi)發(fā)。
功耗感知調(diào)度
功耗感知調(diào)度(EAS)是我們論壇用戶(hù)談?wù)摰南乱患笫?。如果您正在使用OnePlus 3(或Google Pixel),您肯定在論壇上聽(tīng)說(shuō)過(guò)OnePlus。最新的OnePlus 6搭配高通驍龍 845進(jìn)入主流發(fā)布,因此,如果您擁有這些設(shè)備之一,那么您已經(jīng)擁有支持EAS的智能手機(jī)。諸如RenderZenith之類(lèi)的內(nèi)核形式的EAS 和諸如VertexOS和PureFusion之類(lèi)的ROM 席卷了OnePlus 3論壇。當(dāng)然,Google Pixel也附帶EAS。承諾延長(zhǎng)電池壽命并提高性能,還有什么貓膩呢?
功耗感知調(diào)度并非如此簡(jiǎn)單,并不是CFS或HMP之類(lèi)的每種設(shè)備都通用的。EAS要求我們基于功耗模型理解正在運(yùn)行的處理器。這些功耗模型是由工程師團(tuán)隊(duì)不斷測(cè)試并努力提供最佳性能而建立的。由于驍龍820和821基本相同,因此OnePlus 3上定制的內(nèi)核使用Google Pixel功耗模型。配備驍龍845的設(shè)備可以使用EAS,因此OnePlus 6可以在某種程度上使用EAS 。雖然它不像Google Pixel設(shè)備在調(diào)整參數(shù)方面做的那么好,但它也完成了這項(xiàng)工作。這是一個(gè)示例,盡管OnePlus 6在EAS方面擁有更好的處理器,但Pixel 2 XL在平滑度上仍勝過(guò)OnePlus 6。這兩個(gè)圖像均來(lái)自我們OnePlus 6以速度為導(dǎo)向的測(cè)試。
如果您看不懂這張圖片,可以試著看綠色指示線以下的圖像。超過(guò)綠線的任何內(nèi)容均表示丟幀,在最壞的情況下,會(huì)出現(xiàn)明顯的卡頓。
EAS在OnePlus 6上的實(shí)現(xiàn)很有趣,因?yàn)镺nePlus 6不像具有相同SoC的Google Pixel一樣熟練的使用EAS。調(diào)度器參數(shù)調(diào)整地不太合理,因此這可能解釋了為什么它的性能效率不如您預(yù)期的那樣。它在功耗方面非常保守,系統(tǒng)會(huì)在大多數(shù)工作中優(yōu)先考慮低功耗核。
可調(diào)參數(shù)只是傳遞給CPU governor的一組參數(shù),這些參數(shù)會(huì)改變governor在頻率方面對(duì)某些情況的反應(yīng)。然后,調(diào)度器決定將任務(wù)分配在不同處理器上。OnePlus 6的可調(diào)參數(shù)能在低功耗核上設(shè)置任務(wù)的優(yōu)先級(jí),可是這并不起什么作用。而 Google Pixel 2具有巨大的輸入提升能力,所有8個(gè)核始終保持在線狀態(tài)。Google還使用了一個(gè)中斷負(fù)載均衡,它有助于消除丟幀并提高性能。
那么EAS如何工作?為什么僅在特定條件下如此有效?
功耗感知調(diào)度(EAS)需要使用功耗模型,就像上面提到的,EAS需要大量測(cè)試工作才能使其完美。EAS試圖統(tǒng)一內(nèi)核的三個(gè)不同核心部分,它們各自獨(dú)立發(fā)揮作用,而功耗模型則有助于統(tǒng)一它們。
Linux調(diào)度程序(CFS,如上所述)
Linux cpuidle
Linux cpufreq
將調(diào)度器下的三個(gè)部分統(tǒng)一并且一起計(jì)算可以降低功耗,因?yàn)橐黄鹩?jì)算可以使它們盡可能高效。CPUIdle嘗試確定CPU何時(shí)應(yīng)進(jìn)入空閑模式,而CPUFreq嘗試確定何時(shí)升高或降低CPU頻率。這兩個(gè)模塊的主要目標(biāo)都是節(jié)能。不僅如此,它還將進(jìn)程分為四個(gè)cgroup,即top-app,system-background,foreground和background。將要處理的任務(wù)放入這些類(lèi)別之一,然后為該類(lèi)別分配CPU資源,并在不同的CPU核上委派工作。top-app要求最優(yōu)先地被完成,其次是foreground,background,然后是system-background。從技術(shù)上講,background與system-background具有相同的優(yōu)先級(jí),但是system-background通常也可以訪問(wèn)更多的小核。實(shí)際上,EAS正在將Linux內(nèi)核的核心部分整合到一個(gè)進(jìn)程中。
喚醒設(shè)備時(shí),EAS將選擇處于最淺的空閑狀態(tài)的核,從而將喚醒設(shè)備所需的功耗降至最低。這有助于減少使用設(shè)備時(shí)所需的功率,因?yàn)槿绻恍枰?,它不?huì)喚醒大簇(big cluster)【big cluster的概念見(jiàn)下圖】。負(fù)載跟蹤也是EAS極其重要的一部分,有兩種選擇?!懊繉?shí)體負(fù)載跟蹤”(Per-Entity Load Tracking PELT)通常用于負(fù)載跟蹤,然后該信息用于確定頻率以及如何在CPU上委派任務(wù)。也可以使用“窗口輔助的負(fù)載跟蹤”(Window-Assisted Load Tracking WALT),它是Google Pixel上使用的。我們論壇上的許多EAS ROM(例如VertexOS)都選擇使用WALT。許多ROM會(huì)發(fā)行WALT和PELT兩個(gè)版本的內(nèi)核,因此由用戶(hù)決定。WALT更具突發(fā)性,CPU頻率峰值很高,而PELT試圖讓頻率保持連貫性。負(fù)載跟蹤器實(shí)際上并不影響CPU頻率,它只是告訴系統(tǒng)CPU使用率是多少。較高的CPU使用率需要較高的頻率,因此PELT的連貫性意味著它將緩慢地調(diào)高或調(diào)低CPU頻率。PELT確實(shí)會(huì)趨向于更高的CPU負(fù)載報(bào)告,因此它可能會(huì)以更高的耗s電來(lái)提供更高的性能。但是,由于兩種負(fù)載跟蹤方法都在不斷地修補(bǔ)和完善,因此目前尚無(wú)法真正說(shuō)出哪種負(fù)載跟蹤系統(tǒng)更好。
很明顯,無(wú)論使用哪種負(fù)載跟蹤方法,效率都會(huì)提高。使用跟蹤方法不是僅僅在任何處理器上處理任務(wù),而是可以分析任務(wù)并估算運(yùn)行該任務(wù)所需的功耗。這種巧妙的任務(wù)分配方式意味著任務(wù)可以更加高效的完成,同時(shí)還可以使整個(gè)系統(tǒng)更快。EAS旨在以最小的功耗獲得最流暢的UI。負(fù)載跟蹤需要其他外部組件(例如schedtune)的參與。
Schedtune在每個(gè)cgroup中由兩個(gè)可調(diào)參數(shù)定義,以確保對(duì)要完成的任務(wù)進(jìn)行更好的控制。它不僅可以在多核CPU上分散任務(wù),而且為了確保更快地完成時(shí)間敏感型任務(wù),來(lái)決定是否增加感知的負(fù)載。這樣,用戶(hù)使用的前臺(tái)應(yīng)用程序和服務(wù)不會(huì)減慢速度,也不會(huì)引起不必要的性能問(wèn)題。
雖然EAS是今后的一件大事,但也可以說(shuō)它已經(jīng)存了好一段兒時(shí)間。隨著越來(lái)越多的設(shè)備采用EAS而進(jìn)軍主流市場(chǎng),移動(dòng)設(shè)備處理效率的新時(shí)代即將到來(lái)。
輪轉(zhuǎn),CFS,HMP和EAS的優(yōu)缺點(diǎn)
雖然我的畫(huà)圖技術(shù)略差,但我努力拼湊了一張圖片,其中應(yīng)該總結(jié)出了每種調(diào)度器的優(yōu)缺點(diǎn)。
(譯者翻畫(huà)的圖片,紅字為缺點(diǎn),白字為優(yōu)點(diǎn))
我要特別感謝XDA公認(rèn)的貢獻(xiàn)者M(jìn)ostafa Wael, 他對(duì)EAS各個(gè)方面的解釋極大地幫助了本文的實(shí)現(xiàn)。我還要感謝XDA注冊(cè)開(kāi)發(fā)人員joshuous,XDA注冊(cè)開(kāi)發(fā)人員RenderBroken 和Mostafa Wael有關(guān)EAS的文章。那些對(duì)EAS相關(guān)內(nèi)容感興趣的人,Linaro有很多關(guān)于EAS的文檔,您可以閱讀。
-
智能設(shè)備
+關(guān)注
關(guān)注
5文章
1098瀏覽量
52156 -
高通驍龍
+關(guān)注
關(guān)注
7文章
1228瀏覽量
44257
原文標(biāo)題:能感知功耗的Linux調(diào)度器(EAS)
文章出處:【微信號(hào):LinuxDev,微信公眾號(hào):Linux閱碼場(chǎng)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
一文讀懂:嵌入式Linux實(shí)時(shí)性進(jìn)階
深度剖析 RT-Thread 線程調(diào)度流程

安全生產(chǎn)調(diào)度管理系統(tǒng)的核心功能模塊
2025年常用實(shí)時(shí)Linux系統(tǒng)深度評(píng)測(cè)
淺談光模塊的演變與創(chuàng)新

電動(dòng)汽車(chē)的SiC演變和GaN革命

簡(jiǎn)單認(rèn)識(shí)全調(diào)度以太網(wǎng)技術(shù)

車(chē)隊(duì)運(yùn)營(yíng)調(diào)度管理系統(tǒng)

Linux之CPU調(diào)度策略和CPU親和性

算力調(diào)度的基礎(chǔ)知識(shí)

企業(yè)微電網(wǎng)調(diào)度控制器

如何優(yōu)化Linux服務(wù)器的性能
Linux調(diào)度器的核心scheduler_tick介紹
深入探討Linux的進(jìn)程調(diào)度器

基于望獲實(shí)時(shí)Linux的高性能運(yùn)動(dòng)控制器適配

評(píng)論