linux kernel schedule 總結(jié)

一 概述

說到linux 的內(nèi)核調(diào)度算法,首先想到的是2.4內(nèi)核的時間片輪轉(zhuǎn)加簡單的優(yōu)先級策略酿愧,相對比較簡單沥潭。在2.4的內(nèi)核中分為實(shí)時進(jìn)程和普通進(jìn)程,實(shí)時進(jìn)程采用SCHED_FIFO 和 SCHED_RR嬉挡,F(xiàn)IFO是先進(jìn)先出钝鸽,而RR(Round Robin)采用輪轉(zhuǎn)策略。如果是普通進(jìn)程SCHED_NORMAL庞钢,在父進(jìn)程創(chuàng)建子進(jìn)程是coutner值減半拔恰,防止fork子進(jìn)程獲得多執(zhí)行權(quán)限。對于睡眠進(jìn)程基括,如果counter值沒用完颜懊,則會獲得更高優(yōu)先級,這樣保證交互進(jìn)程得到快速響應(yīng)风皿。
從2.6開始引入了O(1)的紅黑樹算法河爹,還是這三種算法SCHED_FIFO、SCHED_RR和SCHED_NORMAL桐款。相對2.4主要是進(jìn)行在進(jìn)程優(yōu)先級計算和pick next上進(jìn)行了優(yōu)化咸这。后面CFS公平調(diào)度算法的引入,奠定了后面kernel調(diào)度的主基調(diào)魔眨。CFS從RSDL/SD中吸取了完全公平的思想媳维,不再跟蹤進(jìn)程的睡眠時間,也不再企圖區(qū)分交互式進(jìn)程遏暴,它將所有的進(jìn)程都統(tǒng)一對待侄刽。2.6.23中,CFS實(shí)現(xiàn)了兩個調(diào)度算法朋凉,CFS算法模塊和實(shí)時調(diào)度模塊州丹。對應(yīng)實(shí)時進(jìn)程,將使用實(shí)時調(diào)度模塊侥啤。對應(yīng)普通進(jìn)程則使用CFS算法当叭。
CFS 支持三種調(diào)度測率,分別是:
SCHED_NORMAL (traditionally called SCHED_OTHER): 普通task
SCHED_BATCH: Does not preempt nearly as often as regular tasks would, thereby allowing tasks to run longer and make better use of caches but at the cost of interactivity. This is well suited for batch jobs.
SCHED_IDLE: This is even weaker than nice 19, but its not a true idle timer scheduler in order to avoid to get into priority inversion problems which would deadlock the machine.
SCHED_FIFO/_RR are implemented in sched/rt.c and are as specified by POSIX.
由于linux開始都是運(yùn)行在桌面或者服務(wù)器的SMP架構(gòu)盖灸,對于功耗和負(fù)載的關(guān)系沒有考慮太多蚁鳖,比如他會將4個task平均分配到4個核上。但是對于移動端的設(shè)備赁炎,這種情況顯得明顯不足醉箕。對于Mobile設(shè)備,如果有4個task在不影響交互的情況下徙垫,最好是都運(yùn)行在一個核上讥裤,其他三個CPU core可以關(guān)掉,這樣不影響交互姻报,電量的消耗最少己英,提高了設(shè)備的待機(jī)時間。
因此移動設(shè)備為了進(jìn)行功耗和性能任務(wù)調(diào)度需要進(jìn)行特殊設(shè)計吴旋。

二 移動設(shè)備調(diào)度算法

剛開始手機(jī)還沒有大小核結(jié)構(gòu)损肛,從雙核到4核都是同構(gòu)CPU,調(diào)度算法主要以拔插CPU核(CPU hotpulug)和CPU的頻率調(diào)節(jié)(DVFS)為主荣瑟。通過拔插CPU核和調(diào)節(jié)頻率適應(yīng)不同人物負(fù)載治拿。
后面發(fā)展到ARM CPU大小核的引入,對于任務(wù)繁重的情況啟動大核笆焰,實(shí)現(xiàn)大馬拉大車劫谅,輕負(fù)載用小核,小馬拉小車嚷掠。
對于大小核簇的調(diào)度有兩種方法一種是高通的HMP調(diào)度捏检,一種是linaro的EAS(Energy Aware Scheduling)
1) HMP(Heterogeneous mobile processing)
他的原理主要是將大小核分為大核調(diào)度域和小核調(diào)度域。不需要考慮兩個域之間的負(fù)載均衡問題不皆。主要檢測當(dāng)前CPU的負(fù)載未檩,如果判斷任務(wù)重那么就遷移到大核簇,反之遷移到小核簇粟焊。負(fù)載計算方法如下:
max_possible_capacity = 1024 * (fmax * / min_max_freq) *
(efficiency / min_possible_efficiency)
In the example HMP system quoted in Sec 2.3, "least" performing CPU is A53 and
thus min_max_freq = 1GHz and min_possible_efficiency = 1024.
Capacity of A57 = 1024 * (2GHz / 1GHz) * (2048 / 1024) = 4096
Capacity of A53 = 1024 * (1GHz / 1GHz) * (1024 / 1024) = 1024
Capacity of A57 when constrained to run at maximum frequency of 500MHz can be
calculated as:
Capacity of A57 = 1024 * (500MHz / 1GHz) * (2048 / 1024) = 1024
2) EAS(Energy Aware Scheduling)
EAS=DVFS+cpuidle+CFS,EAS將進(jìn)程/程序/應(yīng)用分為四個cgroup冤狡,即 top-app, system-background, foreground, and background,將要處理的任務(wù)放入其中一個類別中,然后為該類別提供CPU power项棠,并將工作委派給不同的CPU核心悲雳。top-app是完成的最高優(yōu)先級,其次是forground香追,background和system-background gorup. backgound group與system-background group具有相同的優(yōu)先級合瓢,但system-background group通常也可以訪問更多的核心.,EAS將選擇處于最淺空閑狀態(tài)的核心透典,從而最大限度地減少喚醒設(shè)備所需的能量.如果不需要晴楔,它不會喚醒big cluster顿苇。
對于CPU負(fù)載的跟蹤,EAS有兩種算法:
一種 PELT(Per-Entity Load Tracking)
一種是 WALT(Window-Assisted Load Tracking)
HMP相對于EAP税弃,HMP的優(yōu)點(diǎn)是性能表現(xiàn)比較明顯纪岁,而EAS/PELT在功耗上更勝一籌。而EAS/WALT則是在性能和功耗上的最優(yōu)選擇则果。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末幔翰,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子西壮,更是在濱河造成了極大的恐慌遗增,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,941評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件款青,死亡現(xiàn)場離奇詭異做修,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)抡草,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,397評論 3 395
  • 文/潘曉璐 我一進(jìn)店門缓待,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人渠牲,你說我怎么就攤上這事旋炒。” “怎么了?”我有些...
    開封第一講書人閱讀 165,345評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長畜挨。 經(jīng)常有香客問我晶疼,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,851評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上尚粘,老公的妹妹穿的比我還像新娘。我一直安慰自己敲长,他們只是感情好郎嫁,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,868評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著祈噪,像睡著了一般泽铛。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上辑鲤,一...
    開封第一講書人閱讀 51,688評論 1 305
  • 那天盔腔,我揣著相機(jī)與錄音,去河邊找鬼。 笑死弛随,一個胖子當(dāng)著我的面吹牛瓢喉,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播舀透,決...
    沈念sama閱讀 40,414評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼栓票,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了盐杂?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,319評論 0 276
  • 序言:老撾萬榮一對情侶失蹤哆窿,失蹤者是張志新(化名)和其女友劉穎链烈,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體挚躯,經(jīng)...
    沈念sama閱讀 45,775評論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡强衡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,945評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了码荔。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片漩勤。...
    茶點(diǎn)故事閱讀 40,096評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖缩搅,靈堂內(nèi)的尸體忽然破棺而出越败,到底是詐尸還是另有隱情,我是刑警寧澤硼瓣,帶...
    沈念sama閱讀 35,789評論 5 346
  • 正文 年R本政府宣布究飞,位于F島的核電站,受9級特大地震影響堂鲤,放射性物質(zhì)發(fā)生泄漏亿傅。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,437評論 3 331
  • 文/蒙蒙 一瘟栖、第九天 我趴在偏房一處隱蔽的房頂上張望葵擎。 院中可真熱鬧,春花似錦半哟、人聲如沸酬滤。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,993評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽敏晤。三九已至,卻和暖如春缅茉,著一層夾襖步出監(jiān)牢的瞬間嘴脾,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,107評論 1 271
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留译打,地道東北人耗拓。 一個月前我還...
    沈念sama閱讀 48,308評論 3 372
  • 正文 我出身青樓,卻偏偏與公主長得像奏司,于是被迫代替她去往敵國和親乔询。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,037評論 2 355