精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

Linux 調(diào)度器 BFS

系統(tǒng) Linux
BFS 是一款專門為 Linux 桌面環(huán)境所設(shè)計的內(nèi)核調(diào)度器,它基于 Staircase Deadline 和 EEVDF 算法,支持 Linux 2.6.31 之后的內(nèi)核。它提供了前所未有的流暢桌面性能,不僅得到了用戶的認(rèn)可,也為一些商業(yè)系統(tǒng)所采用。本文簡單介紹了 BFS 的基本原理,希望能對想深入了解 Linux 調(diào)度器的讀者提供一些幫助。

BFS 是一個進(jìn)程調(diào)度器,可以解釋為“腦殘調(diào)度器”。這古怪的名字有多重含義,比較容易被接受的一個說法為:它如此簡單,卻如此出色,這會讓人對自己的思維能力產(chǎn)生懷疑。

BFS 不會被合并進(jìn)入 Linus 維護(hù)的 Linux mainline,BFS 本身也不打算這么做。但 BFS 擁有眾多的擁躉,這只有一個原因:BFS 非常出色,它讓用戶的桌面環(huán)境達(dá)到了前所未有的流暢。在硬件越來越先進(jìn),系統(tǒng)卻依然常顯得遲鈍的時代,這實在讓人興奮。

進(jìn)入 2010 年,Android 使用 BFS 作為其操作系統(tǒng)的標(biāo)準(zhǔn)調(diào)度器,這也證明了 BFS 的價值。

BFS vs CFS,性能測試比拼

BFS 出現(xiàn)后得到了很多用戶的好評,得到了諸如“快,感覺的到的快”,“桌面的急速未來”等評價。這些詞讓人側(cè)目,于是我便開始四下尋找關(guān)于 BFS 的測試數(shù)據(jù),希望能找到說明這一切的數(shù)字或者曲線。但結(jié)果卻頗令人失望。。。

Jens Axboe 的測試

BFS 發(fā)布后不久,即 2009 年 9 月,Ingo Molnar 發(fā)布了他的測評報告,比較了 CFS 和 BFS。作為 CFS 的作者 , 他所宣稱的測試結(jié)果并不讓人覺得意外:CFS 在各個方面優(yōu)于 BFS。不過人們對他的測評結(jié)果有不同的反應(yīng),有人認(rèn)同,也有人心存疑惑。Jens Axboe 就是心存懷疑的一位,他自己寫了一個名為 Latt.c 的程序,試圖測試調(diào)度器的兩個神秘屬性:”Interactivity”和 “Fluidness”。

他的測試結(jié)果剛好相反,表明 BFS 在交互性方面優(yōu)于 CFS,而且其 CPU 利用率更高。不過 BFS 穩(wěn)定性較差,并且在某些情況下也表現(xiàn)出了糟糕的交互性問題。

從 Jens 的測試數(shù)據(jù)來看,BFS 稍微優(yōu)于 CFS,但優(yōu)勢并非如同坊間流傳的那樣夸張。感興趣的讀者可以在 lkml 的郵件列表中找到 Jens 測試的詳細(xì)數(shù)據(jù):http://thread.gmane.org/gmane.linux.kernel/886319/focus=887636

結(jié)果讓翹首以盼的我有些失望,并沒有看到 BFS 遙遙領(lǐng)先。反而有些類似奧運會男子百米的決賽,究竟誰是冠軍一時竟難以分辨。但值得注意的是,該測試意外地讓人們認(rèn)識到了 CFS 本身的一個嚴(yán)重問題。

CFS 的 sleeper fairness 特性導(dǎo)致在一些情況下將出現(xiàn)嚴(yán)重的調(diào)度延遲,在 Jens 的 xmodmap測試中甚至出現(xiàn)了 10s 的延遲。并且圍繞 Jens 的測試,人們紛紛發(fā)表聲明,使用 CFS 時有很多交互性問題,比如編譯內(nèi)核時,同時的音頻視頻會出現(xiàn)嚴(yán)重的停頓,而使用 BFS 則沒有這些問題。不過這些 CFS 的問題都在關(guān)閉了 sleeper fairness 特性后神秘地消失了。

這讓 CFS 調(diào)度器的開發(fā)者不得不暫時關(guān)閉了 sleeper fairness 特性,并一度曾號稱將在即將發(fā)布的 2.6.32 中正式關(guān)閉該特性,直到問題被解決為止。令人吃驚的是,Ingo 在一周之內(nèi)就拋出了新的 patch,即 Gentle Fairness。使用這個 patch,10s 延遲消失了,其他的關(guān)于鼠標(biāo)滯后,視頻停頓的關(guān)于 CFS 的負(fù)面報告也都消失了。。。

Phoronix 的測試

您可以在 http://www.phoronix.com/scan.php?page=article&item=bfs_scheduler_benchmarks&num=1http://global.phoronix-test-suite.com/?k=profile&u=zero-9274-28890-6247看到 Phoronix 對 BFS 的專業(yè)測試。該測試也是在 2009 年 9 月完成的,如前所述,此后 BFS 和 CFS 都有了一些更新,因此該測試也不能完全反映這兩款調(diào)度器最新的狀態(tài)。但作為權(quán)威的測評機構(gòu),該測評結(jié)果還是值得一看。

從 Phoronix 的測試結(jié)果來看,BFS 在多項測試中稍微領(lǐng)先,CFS 則在其余一些測試項目中反超。我不禁又有些黯然。

唯一能體現(xiàn) BFS“急速”的測試項目來自針對網(wǎng)絡(luò)服務(wù)器吞吐量的測試,特在此處張貼這張最具有說服力和震撼力的直方圖。

圖 1. 網(wǎng)絡(luò)吞吐量測試

 

圖 1. 網(wǎng)絡(luò)吞吐量測試

 

但除此一項之外,總的來講,Phoronix 的測試結(jié)果終究只是表明 BFS 和 CFS 旗鼓相當(dāng)。

University of New Mexico 計算機系的測評

新墨西哥大學(xué)的 Taylor Groves, Je Knockel, Eric Schulte 在 2009 年 12 月也發(fā)布了一個 BFS vs. CFS 的評測報告。

他們的測評關(guān)注于三個方面:延遲 , Turnaround Time 還有交互性。下面摘錄他們的測試結(jié)果。

圖 2. 延遲

 

圖 2. 延遲

 

圖 3. Turnaround Time

 

圖 3. Turnaround Time

 

圖 4. 交互性

 

圖 4. 交互性

 

這三張圖總算聊以安慰我四處找尋的辛苦,根據(jù)這個評測結(jié)果,終于可以得到這樣的結(jié)論:

在 turnaround time 方面,CFS 優(yōu)于 BFS。但是 BFS 的調(diào)度延遲小于 CFS。這說明 BFS 更加適應(yīng)于交互式應(yīng)用環(huán)境。CFS 更加適合于批處理作業(yè)環(huán)境。這跟許多用戶的體驗相同。

小結(jié)

以上三個測評都是在 Linux2.6.32 發(fā)布前完成的。然而 CFS 在 Linux2.6.32 中引入了 GENTLE_FAIR_SLEEPERS 特性,正如 2.1 節(jié)中所說,這個 patch 據(jù)說是極大地提高了交互性。不幸的是,在那以后,卻似乎再也沒有人做關(guān)于 CFS 和 BFS 的比較測試了。因此在 Linux 已經(jīng)進(jìn)入 2.6.35 的時代,我們更無法輕易得出 BFS 和 CFS 孰優(yōu)孰劣的結(jié)論。

從另一方面講,雖然專業(yè)評測沒有顯示出 BFS 的明顯優(yōu)勢,但從 Internet 上能收集到的信息來看,大多數(shù)用戶都覺得 BFS 能夠顯著地提高交互式應(yīng)用的體驗,這是一種個人的體驗,比如鼠標(biāo)的移動是否流暢等等。在這類體驗中,兩款調(diào)度器的差異卻是相當(dāng)大,這無法用前面的測試數(shù)據(jù)來加以說明。

因此我認(rèn)為,目前人們并沒有理解影響交互性的真正原因,專業(yè)測試所關(guān)注的數(shù)據(jù)尚無法準(zhǔn)確描述諸如“流暢”這類主觀的感覺。因此,對于 BFS,我們不妨相信感覺一次吧。

那么 BFS 究竟做了哪些改進(jìn),如果這些改進(jìn)如此有效,為什么主流內(nèi)核不愿意接納 BFS 呢?

BFS vs CFS,設(shè)計上的不同

白天 Con Kolivas 在醫(yī)院里當(dāng)麻醉師,為人們解除痛苦,業(yè)余的時候借 Linux 解除自己的痛苦。額,Kolivas 學(xué)習(xí) Linux 并不是為了解決痛苦,我臆測而已。但據(jù) Kolivas 自述,他接觸 Linux 內(nèi)核時連 C 語言也沒有學(xué)習(xí)過。。。這個事實證明,語言只是一項工具,對問題本質(zhì)的深入理解才是寫程序的關(guān)鍵。可能還有執(zhí)著,CFS 和 RSDL 之爭導(dǎo)致 Kolivas 離開 Linux 社區(qū),此去經(jīng)年,當(dāng) Kolivas 再次開始看內(nèi)核代碼的時候,他立即發(fā)現(xiàn) CFS 存在以下幾個設(shè)計上的問題:

CFS 的目標(biāo)是支持從桌面到高端服務(wù)器的所有應(yīng)用場景,這種大而全的設(shè)計思路導(dǎo)致其必須做一些實現(xiàn)上的折中,此外,那些只有在高端機器中才需要的特性將引入不必要的復(fù)雜代碼。

其次,為了維護(hù)多 CPU 上的公平性,CFS 采用了負(fù)載平衡機制,Kolivas 認(rèn)為,這些復(fù)雜代碼抵消了 per cpu queue 曾帶來的好處。

最后,主流內(nèi)核的 CFS 還是對睡眠進(jìn)程存在一些偏好,這意味著“不公平”。

設(shè)計目標(biāo)的不同

在現(xiàn)實中,調(diào)度算法類似一個處境尷尬的主婦,滿足孩子對晚餐的要求便有可能傷害到老人的食欲。Linux 內(nèi)核一直試圖做出一道讓全家老少都喜歡的菜,在這方面,CFS 已經(jīng)做的很好。但一道能被所有人接受的菜,或許就意味著稍許平淡。而 BFS 只打算滿足一種口味,以便將這種口味發(fā)展到極限。

根據(jù) Linux Magazine 的說法,Con Kolivas 是看到了下面這則來自 xkcd 的漫畫而開始思考 BFS 的。

圖 5. 譏諷 Linux 調(diào)度器的 xkcd 漫畫

 

圖 5. 譏諷 Linux 調(diào)度器的 xkcd 漫畫

 

事情源于一些 Linux 用戶,他們發(fā)現(xiàn) Linux 雖然號稱能夠充分發(fā)揮 4096 顆 CPU 系統(tǒng)的計算能力,但在普通的 laptop 上卻無法流暢地播放 Youtube 視頻。

這讓人們開始思考,對于 Desktop 環(huán)境來講,CFS 哪些復(fù)雜的特性究竟是否還有意義?人們是否有必要在自己的個人電腦中使用一個支持 4096 個 CPU 的調(diào)度器?

BFS 正是對這種質(zhì)疑的自然反應(yīng)。它不打算支持 4096 個 CPU 的龐然大物,BFS 的目標(biāo)是普通人使用的桌面電腦。此外,BFS 還刪除了那些只有在服務(wù)器上才需要的特性。比如,BFS 拋棄了 CFS 的組調(diào)度特性,類似 CGROUP 這樣的特性對于普通的桌面用戶是多余的技術(shù)。

這很容易理解:在只有一個 CPU 的系統(tǒng)中,誰還會設(shè)計多個 CGroup,哪里還能用到 NUMA domain 等概念呢?

此外 BFS 使用單一的 run queue,不再需要復(fù)雜的負(fù)載均衡機制。由于不再有 CGROUP 概念,也不再需要 Group 間的負(fù)載均衡。

這些簡單的裁剪使得 BFS 的代碼極大地簡化,簡化的代碼意味著執(zhí)行一次調(diào)度所需要的指令數(shù)減少了,相應(yīng)的 footprint 自然也減少了。

當(dāng)然簡化代碼只是一個顯而易見的方面,更重要的是,這種理念的不同會對最終的調(diào)度器實現(xiàn)產(chǎn)生更加深遠(yuǎn)的影響,這實在是難以盡述。

多隊列 vs 單一隊列

在 Linux 內(nèi)核進(jìn)入 2.6 時,調(diào)度器采用 per cpu run queue 從而克服了單一 run queue 的局限。在多 CPU 系統(tǒng)中,單一 run queue 意味著 run queue 成為了系統(tǒng)的瓶頸,因為在同一時刻,一個 CPU 訪問 run queue 時,其他的 CPU 即使空閑也必須等待。當(dāng)使用 per CPU 的 run queue 之后,每個 CPU 不必再使用大鎖,從而能夠并行地處理調(diào)度。

但很多事情都不像第一眼看上去那樣簡單。

Kolivas 發(fā)現(xiàn),采用 per cpu run queue 所帶來的好處會被追求公平性的 load balance 代碼所抵消。在目前的 CFS 調(diào)度器中,每顆 CPU 只維護(hù)本地 run queue 中所有進(jìn)程的公平性,為了實現(xiàn)跨 CPU 的調(diào)度公平性,CFS 必須定時進(jìn)行 load balance,將一些進(jìn)程從繁忙的 CPU 的 run queue 中移到其他空閑的 run queue 中。

這個 load balance 的過程需要獲得其他 run queue 的鎖,這種操作降低了多運行隊列帶來的并行性。

并且在復(fù)雜情況下,這種因 load balance 而引入的 footprint 將非常可觀。

當(dāng)然,load balance 引入的加鎖操作依然比全局鎖的代價要低,這種代價差異隨著 CPU 個數(shù)的增加而更加顯著。但請您注意,BFS 并不打算為那些擁有 1024 個 CPU 的系統(tǒng)工作,假若系統(tǒng)中的 CPU 個數(shù)有限時,多 run queue 的優(yōu)勢便不明顯了。

而 BFS 采用單一隊列之后,每一個需要調(diào)度的新進(jìn)程都可以在全局范圍內(nèi)查找最合適的 CPU,而無需 CFS 那樣等待 load balance 代碼來決定,這減少了多 CPU 之間裁決的延遲,最終的結(jié)果是更小的調(diào)度延遲。#p#

向前看還是向后看?

多年來 Kolivas 一直關(guān)注著 Linux 在 desktop 上的表現(xiàn)。對于 desktop 的用戶,最注重的不是系統(tǒng)的吞吐量,而是交互性程序的流暢體驗。從 SD 開始,Kolivas 就告訴內(nèi)核黑客們,完全公平能夠從根本上保證交互性。他始終堅持一個基本觀點:調(diào)度器應(yīng)該 forward look only。決不要去考慮一個進(jìn)程的過去。

CFS 卻偏偏要考慮進(jìn)程的過去。2.6.23 的時候,CFS 記錄并使用 sleep time。之后不久,在 2.6.24 發(fā)布的時候,CFS 合并了“Real Fair Scheduler”,刪除了 sleep time。因此在 2.6.24 之后的內(nèi)核中,CFS 終于也不再考慮進(jìn)程過去的睡眠時間。

但 CFS 還是保留了 sleeper fairness 的思想,當(dāng)進(jìn)程 wakeup 的時候,在 place_entity() 函數(shù)中,CFS 將對 sleeper 進(jìn)行獎勵,以便其能盡快得到 CPU。這個策略是非常微妙的,我們在 2.1 節(jié)中詳細(xì)介紹了 sleeper fairness 的演進(jìn)過程。假如您花些時間回頭再看看,就會發(fā)現(xiàn) sleeper fairness 曾造成怎樣嚴(yán)重的延遲問題。雖然 Ingo 自稱 Gentle fairness 解決了延遲問題,但從代碼上看,Gentle Fairness 只是對 sleeper 的獎勵減半而已。因此我們可以說,CFS 依然對 Sleeper 進(jìn)程進(jìn)行獎勵,這代表著一種偏好,一種“不公平”。而這,正是 BFS 所反對的。

BFS 中,當(dāng)一個進(jìn)程 wakeup 時,調(diào)度器將根據(jù)進(jìn)程的 deadline 來進(jìn)行選擇(關(guān)于 deadline 本文將在第 4 章中詳細(xì)描述),其結(jié)果是,更早睡眠的進(jìn)程能更快地得到調(diào)度;CFS 的 sleeper fairness 則意味著要根據(jù) wakeup 的時間來選擇下一個被調(diào)度的進(jìn)程,更早 wakeup 的進(jìn)程會更快得到調(diào)度。

這種不同究竟會對桌面應(yīng)用造成何種影響尚沒有理論依據(jù)可以參考。但我個人認(rèn)為,BFS 的策略更加合理。

您現(xiàn)在可能已經(jīng)讀得有些煩躁了 ( 這些英文加中文的說些啥啊 ),所以我還是盡快介紹一下 BFS 的實現(xiàn)細(xì)節(jié)吧。然后或許您會理解我,有些詞還是不翻譯更好。

BFS 實現(xiàn)原理

調(diào)度器是非常復(fù)雜的話題,尤其是 CFS 調(diào)度器,想要描述清楚,需要一支非凡的筆,我還沒有找到。但 BFS 非常簡單,所以我才有勇氣在這里寫點兒 BFS 的實現(xiàn)原理什么的。首先介紹幾個關(guān)鍵概念。

虛擬 Deadline ( Virtual Deadline )

當(dāng)一個進(jìn)程被創(chuàng)建時,它被賦予一個固定的時間片,和一個虛擬 Deadline。該虛擬 deadline 的計算公式非常簡單:

Virtual Deadline = jiffies + (user_priority * rr_interval)
公式一

其中 jiffies 是當(dāng)前時間 , user_priority 是進(jìn)程的優(yōu)先級,rr_interval 代表 round-robin interval,近似于一個進(jìn)程必須被調(diào)度的最后期限,所謂 Deadline 么。不過在這個 Deadline 之前還有一個形容詞為 Virtual,因此這個 Deadline 只是表達(dá)一種愿望而已,并非很多領(lǐng)導(dǎo)們常說的那種 deadline。

虛擬 Deadline 將用于調(diào)度器的 picknext 決策,這將在后續(xù)章節(jié)詳細(xì)描述。

進(jìn)程隊列的表示方法和調(diào)度策略

在操作系統(tǒng)內(nèi)部,所有的 Ready 進(jìn)程都被存放在進(jìn)程隊列中,調(diào)度器從進(jìn)程隊列中選取下一個被調(diào)度的進(jìn)程。因此如何設(shè)計進(jìn)程隊列是我們研究調(diào)度器的一個重要話題。BFS 采用了非常傳統(tǒng)的進(jìn)程隊列表示方法,即 bitmap 加 queue。

BFS 將所有進(jìn)程分成 4 類,分別表示不同的調(diào)度策略 :

●Realtime,實時進(jìn)程

●SCHED_ISO,isochronous 進(jìn)程,用于交互式任務(wù)

●SCHED_NORMAL,普通進(jìn)程

●SCHED_IDELPRO,低優(yōu)先級任務(wù)

實時進(jìn)程總能獲得 CPU,采用 Round Robin 或者 FIFO 的方法來選擇同樣優(yōu)先級的實時進(jìn)程。他們需要 superuser 的權(quán)限,通常限于那些占用 CPU 時間不多卻非常在乎 Latency 的進(jìn)程。

SCHED_ISO 在主流內(nèi)核中至今仍未實現(xiàn),Con 早在 2003 年就提出了這個 patch,但一直無法進(jìn)入主流內(nèi)核,這種調(diào)度策略是為了那些 near-realtime 的進(jìn)程設(shè)計的。如前所述,實時進(jìn)程需要用戶有 superuser 的權(quán)限,這類進(jìn)程能夠獨占 CPU,因此只有很少的進(jìn)程可以被配置為實時進(jìn)程。對于那些對交互性要求比較高的,又無法成為實時進(jìn)程的進(jìn)程,BFS 將采用 SCHED_ISO,這些進(jìn)程能夠搶占 SCHED_NORMAL 進(jìn)程。他們的優(yōu)先級比 SCHED_NORMAL 高,但又低于實時進(jìn)程。此外當(dāng) SCHED_ISO 進(jìn)程占用 CPU 時間達(dá)到一定限度后,會被降級為 SCHED_NORMAL,防止其獨占整個系統(tǒng)資源。

SCHED_NORMAL 類似于主流調(diào)度器 CFS 中的 SCHED_OTHER,是基本的分時調(diào)度策略。

SCHED_IDELPRO 類似于 CFS 中的 SCHED_IDLE,即只有當(dāng) CPU 即將處于 IDLE 狀態(tài)時才被調(diào)度的進(jìn)程。

在這些不同的調(diào)度策略中,實時進(jìn)程分成 100 個不同的優(yōu)先級,加上其他三個調(diào)度策略,一共有 103 個不同的進(jìn)程類型。對于每個進(jìn)程類型,系統(tǒng)中都有可能有多個進(jìn)程同時 Ready,比如很可能有兩個優(yōu)先級為 10 的 RT 進(jìn)程同時 Ready,所以對于每個類型,還需要一個隊列來存儲屬于該類型的 ready 進(jìn)程。

BFS 用 103 個 bitmap 來表示是否有相應(yīng)類型的進(jìn)程準(zhǔn)備進(jìn)行調(diào)度。如下圖所示:

圖 6. BFS 進(jìn)程隊列

 

圖 6. BFS 進(jìn)程隊列

 

當(dāng)任何一種類型的進(jìn)程隊列非空時,即存在 Ready 進(jìn)程時,相應(yīng)的 bitmap 位被設(shè)置為 1。

調(diào)度器如何在這樣一個 bitmap 加 queue 的復(fù)雜結(jié)構(gòu)中選擇下一個被調(diào)度的進(jìn)程的問題被稱為 Task Selection 或者 pick next。

Task Selection i.e. Pick Next

當(dāng)調(diào)度器決定進(jìn)行進(jìn)程調(diào)度的時候,BFS 將按照下面的原則來進(jìn)行任務(wù)的選擇:

圖 7. Task Selection

 

圖 7. Task Selection

 

首先查看 bitmap 是否有置位的比特。比如上圖,對應(yīng)于 SCHED_NORMAL 的 bit 被置位,表明有類型為 SCHED_NORMAL 的進(jìn)程 ready。如果有 SCHED_ISO 或者 RT task 的比特被置位,則優(yōu)先處理他們。

選定了相應(yīng)的 bit 位之后,便需要遍歷其相應(yīng)的子隊列。假如是一個 RT 進(jìn)程的子隊列,則選取其中的第一個進(jìn)程。如果是其他的隊列,那么就采用 EEVDF 算法來選取合適的進(jìn)程。

EEVDF,即 earliest eligible virtual deadline first。BFS 將遍歷該子隊列,一個雙向列表,比較隊列中的每一個進(jìn)程的 Virtual Deadline 值,找到最小的那個。最壞情況下,這是一個 O(n) 的算法,即需要遍歷整個雙向列表,假如其中有 n 個進(jìn)程,就需要進(jìn)行 n 此讀取和比較。

但實際上,往往不需要遍歷整個 n 個進(jìn)程,這是因為 BFS 還有這樣一個搜索條件:

當(dāng)某個進(jìn)程的 Virtual Deadline 小于當(dāng)前的 jiffies 值時,直接返回該進(jìn)程。并將其從就緒隊列中刪除,下次再 insert 時會放到隊列的尾部,從而保證每個進(jìn)程都有可能被選中,而不會出現(xiàn)饑餓現(xiàn)象。

這條規(guī)則對應(yīng)于這樣一種情況,即進(jìn)程已經(jīng)睡眠了比較長的時間,以至于已經(jīng)睡過了它的 Virtual Deadline,如下圖所示:

圖 8. 睡眠和喚醒

 

圖 8. 睡眠和喚醒

 

T1 本來的 virtual deadline 為 t1,它 sleep 之后,其他的進(jìn)程比如 T2 開始運行,等到 T1 再次 wakeup 的時候,當(dāng)時的 jiffies 已經(jīng)大于 t1,在這種情況下,T1 無需和其他進(jìn)程的 virtual deadline 相比較,而直接被 BFS 調(diào)度器選取。

基本的調(diào)度場景

三個基本的 scenario 可以概括多數(shù)的調(diào)度情景。系統(tǒng)中發(fā)生的每一次調(diào)度都屬于以下三種情景之一。

進(jìn)程 wakeup:Task Insertion

睡眠進(jìn)程 wakeup 時,調(diào)度器需要執(zhí)行 task insertion 的操作,將該進(jìn)程插入到 run queue 中。BFS 將進(jìn)程插入相應(yīng)隊列的操作就是執(zhí)行一個雙向隊列的插入操作,計算機常用算法結(jié)構(gòu)告訴我們,這個操作是 O(1) 的。不過,BFS 在執(zhí)行插入操作之前需要首先查看當(dāng)前進(jìn)程是否可以搶占當(dāng)前正在系統(tǒng)中運行的進(jìn)程。因此它會用新進(jìn)程的 virtual deadline 值和當(dāng)前在每個 CPU 上正在運行的進(jìn)程的 virtual deadline 值進(jìn)行比較,如果新進(jìn)程的值小,則直接搶占該 CPU 上正在運行的進(jìn)程。這個算法是 O(m) 的,其中 m 是 CPU 的個數(shù),假如系統(tǒng)中有 16 個 CPU,那么每次都需要進(jìn)行 16 次比較。但這個設(shè)計卻保證了非常好的 low-latency 特性。

進(jìn)程 Sleep

當(dāng)前正在運行的進(jìn)程有可能主動睡眠,此時,調(diào)度器需要將該進(jìn)程從 run queue 中移除,并選擇另外一個進(jìn)程運行。但該進(jìn)程的 virtual deadline 的值保持不變。

這樣該進(jìn)程 wakeup 時,其 virtual deadline 將相對較小,因為 jiffies 隨著時間流逝而不斷增加。較小的 Virtual Deadline 可以保證該進(jìn)程能更快得到調(diào)度。

仍然以圖 8 為例,系統(tǒng)中有兩個進(jìn)程,T1 和 T2,T1 進(jìn)入 sleep 狀態(tài)后其 virtual deadline 仍然為 t1。T2 此時被調(diào)度,根據(jù)公式一,計算得出其 virtual deadline 為 t2。此后,T1 進(jìn)程 wakeup 了,此時雖然 T2 的時間片尚未用完,但由于 T1 的 virtual deadline 小于 T2 的,(t1

進(jìn)程用完自己的時間片

每個進(jìn)程都擁有自己的時間片,即使不被其他進(jìn)程搶占,假如屬于自己的時間片用完時,當(dāng)前進(jìn)程也一定會被剝奪 CPU 時間,以便讓別的進(jìn)程有機會執(zhí)行。

當(dāng)前進(jìn)程的時間片用完后就必須讓出 CPU, 此時將它的 virtual deadline 按照公式一重新計算。

這保證了一個特性:只有其他就緒進(jìn)程都獲得 CPU 之后,用完當(dāng)前時間片的進(jìn)程才可以再次得到運行,這避免了饑餓。

此時此刻我有一種力不從心之感,介紹似乎不該在此處就戛然截止,但我的確已經(jīng)講完了我想要講的。唯一能做的,便是想在這里抓住最后一個機會進(jìn)行一個小小的總結(jié)。

BFS 專注于單一的目標(biāo),因此能夠?qū)⒋a精簡到極致。它采用單一 Queue,從而免除了 load balance 的需要,雖然并發(fā)性減低,但對于少量 CPU 的桌面系統(tǒng)而言,其快速切換 CPU 的能力應(yīng)該能夠補償并發(fā)的損失,說不定還有盈余。

BFS 只關(guān)注未來,它完全公平,一個進(jìn)程的睡眠習(xí)慣以及其過去的種種都不能影響它下一次調(diào)度的時機。在 BFS 世界中,調(diào)度器嚴(yán)格按照每個進(jìn)程的 Deadline 進(jìn)行公平調(diào)度,簡單,嚴(yán)肅甚至有些單調(diào)。

嗯,我必須承認(rèn),無法從這些描述中看出什么先進(jìn)的思想或者特性,但廣大用戶的真實體驗說明了那一切。我想,這或許也正說明用于描述桌面交互性的理論基礎(chǔ)還極其缺乏,我只能通過感性而非理性來總結(jié)它了。想說的是,我的使用體驗是“快,真的很快”。

或許我并不客觀,人的感受往往受到感情的影響。我認(rèn)為 Kovalis 得到了不公正的對待,直到我寫這篇文章的今天,主流的內(nèi)核黑客們還是依然指責(zé) Kovalis,Kovalis 不合群。我想在人群擁擠的咖啡館里,Kovalis 應(yīng)該是那個不想也不知道如何表達(dá)自己,只能在某個角落里獨自寫點兒什么的人吧。這種同情讓我覺得 BFS 更加流暢了?

無論如何,我還是希望能有更多的人關(guān)注 BFS,也希望能有更專業(yè)的分析和評測。

【編輯推薦】

  1. 2.6.2 CFS操作(1)
  2. Linux、Solaris和FreeBSD的內(nèi)核比較
  3. 改變20件事情 讓Linux下安裝軟件更輕松

 

責(zé)任編輯:黃丹 來源: IBMDW
相關(guān)推薦

2011-01-13 13:59:14

2021-05-12 07:50:02

CFS調(diào)度器Linux

2023-12-18 09:31:35

Go容器Linux

2010-01-28 10:11:13

Linux 2.6公平調(diào)度器

2017-03-25 21:33:33

Linux調(diào)度器

2025-05-13 06:41:08

2020-10-13 09:23:57

LinuxKernel調(diào)度器

2009-09-16 08:40:53

linux進(jìn)程調(diào)度linuxlinux操作系統(tǒng)

2025-07-04 08:43:51

2017-09-01 12:26:18

Linux調(diào)度器系統(tǒng)

2025-06-03 07:15:00

Linux操作系統(tǒng)CFS 調(diào)度器

2017-02-09 09:00:14

Linux IO調(diào)度器

2021-07-05 06:51:45

Linux內(nèi)核調(diào)度器

2019-12-02 09:45:45

Linux IO系統(tǒng)

2021-07-02 06:54:44

Linux內(nèi)核主調(diào)度器

2023-11-26 18:54:29

Linux調(diào)度器

2021-01-29 08:22:03

調(diào)度器Yarn架構(gòu)

2023-11-20 22:55:00

Goroutine調(diào)度器

2023-04-17 08:13:13

KubernetesPod

2022-02-15 18:45:35

Linux進(jìn)程調(diào)度器
點贊
收藏

51CTO技術(shù)棧公眾號

久久伊人色综合| 欧美日韩不卡在线| 蜜桃视频日韩| 毛片在线免费播放| 99久久国产综合精品成人影院| 欧美麻豆精品久久久久久| 欧美日韩视频免费在线观看| 性欧美videos另类hd| 亚洲作爱视频| 神马国产精品影院av| 精品亚洲视频在线| 超免费在线视频| 中文字幕欧美日韩一区| 91传媒视频在线观看| 欧美日韩综合在线观看| 日韩综合在线| 日韩电影中文字幕在线| 久久久九九九热| 一区二区电影免费观看| 中文字幕亚洲区| 国产女人水真多18毛片18精品 | 国产亚洲一区二区三区不卡| 欧美一区二区三区在线观看| 久久国产亚洲精品无码| 黄视频网站在线看| 久久精品欧美一区二区三区不卡| 99中文视频在线| 在线免费看91| 性伦欧美刺激片在线观看| 精品少妇v888av| 日本污视频网站| 欧美精品国产白浆久久久久| 日韩一区二区三区精品视频 | 日韩一区二区不卡视频| 精品大片一区二区| 亚洲国产欧美一区二区丝袜黑人 | 免费精品一区| 欧美日韩国产天堂| 欧美精品色婷婷五月综合| 欧美精品videossex少妇| 日韩美女视频一区| 亚洲欧美日韩国产yyy| 亚洲色图 校园春色| 豆国产96在线|亚洲| 成人淫片在线看| 久热这里只有精品6| 欧美激情亚洲| 久久九九精品99国产精品| 久久久免费看片| 深爱激情综合网| 亚洲免费电影在线观看| 久久午夜夜伦鲁鲁片| 动漫3d精品一区二区三区乱码| 欧美一区二区三区小说| 日本中文字幕精品—区二区| 成人久久网站| 欧美日韩国产首页| 亚洲综合欧美在线| 成人在线高清| 欧美日韩国产不卡| 婷婷激情四射五月天| 澳门av一区二区三区| 欧美在线一二三| 成人黄色一区二区| 视频在线日韩| 欧美日韩一级黄| 天天爽夜夜爽一区二区三区| 欧美91在线|欧美| 精品视频免费在线| 国内自拍第二页| 日本在线视频一区二区三区| 欧美成人伊人久久综合网| 丰满少妇中文字幕| 国产精品sss在线观看av| 亚洲精品一区二区三区香蕉| 中文成人无字幕乱码精品区| 日韩精品免费一区二区夜夜嗨 | 久热国产在线| 亚洲猫色日本管| 男女私大尺度视频| 九九精品调教| 婷婷久久综合九色国产成人 | heyzo高清中文字幕在线| 亚洲国产va精品久久久不卡综合| 日韩精品―中文字幕| 欧美黑人疯狂性受xxxxx野外| 欧美综合亚洲图片综合区| 日本人视频jizz页码69| 国产中文欧美日韩在线| 亚洲国产成人91精品| 精品无码人妻一区| 久久理论电影| 久久久人成影片一区二区三区观看| 国产精品suv一区二区| 欧美亚洲一区| 91免费视频网站| 亚洲av成人无码网天堂| 国产蜜臀97一区二区三区| 欧美日韩激情四射| 韩漫成人漫画| 日韩欧美成人一区| 亚洲黄色免费视频| 中文精品电影| 日韩av大片免费看| 99久久久无码国产精品免费| 26uuu国产在线精品一区二区| 亚洲国产另类久久久精品极度| 色婷婷av在线| 日本精品一级二级| 日批免费观看视频| 日韩一区欧美| 青草青草久热精品视频在线观看| 国产精品一区二区av白丝下载| 不卡的电视剧免费网站有什么| 日韩在线电影一区| 97人澡人人添人人爽欧美| 欧美日韩日本视频| 特级西西人体wwwww| 国产二区精品| 国产精品99蜜臀久久不卡二区| 黄色片一区二区三区| 国产精品女主播在线观看| 男女激情无遮挡| vam成人资源在线观看| 国产一区二区三区直播精品电影 | 欧美另类亚洲| 国产在线观看精品一区二区三区| 国内精品一区视频| 婷婷六月综合网| 国产大学生av| 综合五月婷婷| 91亚洲午夜在线| 在线观看免费高清完整| 欧美午夜视频网站| a级在线免费观看| 99精品福利视频| 国产精品二区在线| 亚洲综合影视| 日韩一区二区视频| 国产午夜手机精彩视频| 精品无人区卡一卡二卡三乱码免费卡| 日本亚洲自拍| 久久久一本精品| 亚洲石原莉奈一区二区在线观看| 亚洲视频免费播放| av电影在线观看完整版一区二区| 黄色三级中文字幕| 日韩精品一区二区三区中文在线| 久久天天躁狠狠躁夜夜躁2014| 亚洲自拍第二页| 国产精品剧情在线亚洲| 午夜剧场在线免费观看| 国产高清欧美| 99国产盗摄| 黑人玩欧美人三根一起进 | 蜜桃视频在线免费| 日韩欧美国产视频| 亚洲AV无码国产成人久久| 免费看的黄色欧美网站 | 亚洲成av人片乱码色午夜| 成人天堂噜噜噜| 97超碰资源站在线观看| 日韩亚洲欧美一区二区三区| 国产精品18p| 91丨porny丨中文| 北条麻妃在线视频| 欧美艳星介绍134位艳星| 国产深夜精品福利| 在线看三级电影| 亚洲精品成人网| 波多野结衣视频在线观看| 国产精品无圣光一区二区| 三年中文在线观看免费大全中国| 亚洲欧美一区在线| 精品免费一区二区三区蜜桃| 日韩性xxx| 超薄丝袜一区二区| 天堂在线视频观看| 色八戒一区二区三区| 中文字幕美女视频| 高清shemale亚洲人妖| 欧美成人xxxxx| 99久久婷婷这里只有精品| 超碰在线97av| 精品欧美日韩精品| 欧美精品免费在线观看| 午夜视频www| 欧美精品国产精品| 日本少妇bbwbbw精品| 国产午夜精品一区二区三区视频 | 久久久免费高清视频| 国产精品热久久久久夜色精品三区| 国产精品自在自线| 一本久久综合| 亚洲电影网站| 高清一区二区三区| 国产精品日韩在线| 婷婷在线播放| 在线播放国产一区二区三区| 国产99视频在线| 日本高清无吗v一区| 青青草手机视频在线观看| 久久久国产午夜精品| 久久黄色一级视频| 久久青草久久| www.日本在线视频| 久久精品国产99久久| 国产在线播放一区二区| 色综合视频一区二区三区44| 97在线视频观看| www国产在线观看 | 国产一级久久久久毛片精品| 国产河南妇女毛片精品久久久| 99热成人精品热久久66| 性欧美欧美巨大69| 欧美成人免费在线| 视频一区在线| 成人免费观看a| 中文另类视频| 欧美在线中文字幕| 激情av在线| 久久精品电影网站| 国产三级在线看| 日韩激情片免费| 精品国产乱码一区二区三| 欧美少妇xxx| 四虎成人在线观看| 午夜精彩视频在线观看不卡| 欧美黑人猛猛猛| 亚洲天堂免费看| 亚洲精品天堂网| 欧美激情综合五月色丁香| 蜜桃传媒一区二区亚洲av| 成人精品国产一区二区4080| 久久发布国产伦子伦精品| 精品一区二区三区在线视频| 亚洲成人av免费看| 日本亚洲欧美天堂免费| av免费网站观看| 久久久久久亚洲精品杨幂换脸| 久久久亚洲精品无码| 亚洲日本黄色| 国产妇女馒头高清泬20p多| 欧美日韩视频| 国产精品一色哟哟| 91久久综合| 男人用嘴添女人下身免费视频| 亚洲欧洲视频| 欧美精品一区二区三区三州| 亚洲人体偷拍| 免费在线观看日韩视频| 亚洲一区网站| 欧美牲交a欧美牲交aⅴ免费下载| 小嫩嫩精品导航| 久久精品视频91| 青娱乐精品在线视频| 午夜欧美福利视频| 蜜桃av一区二区在线观看| mm131亚洲精品| 国产美女视频91| av电影在线播放| 久久久久亚洲蜜桃| 日本污视频网站| 亚洲免费av网站| 九九精品在线观看视频| 午夜精品久久久久久不卡8050| 久热这里只有精品6| 色婷婷精品大视频在线蜜桃视频| 人人爽人人爽人人片av| 欧美午夜电影在线播放| 国产又粗又猛又色又| 91精选在线观看| 空姐吹箫视频大全| 亚洲欧洲一区二区三区在线观看| 成人av电影观看| 欧美另类极品videosbest最新版本 | 欧美极品另类videosde| 91精品少妇一区二区三区蜜桃臀| 一区二区三区不卡视频| 国产精品100| 欧美三级电影在线看| av男人天堂av| 亚洲精品久久久久中文字幕欢迎你| 精品久久av| 久久伊人精品天天| 欧美香蕉视频| 亚洲一区二区三区乱码aⅴ| 欧美人体视频| 99精品视频网站| 999在线观看精品免费不卡网站| 熟妇人妻无乱码中文字幕真矢织江 | 38少妇精品导航| 欧美性www| 国产在线精品二区| 99精品小视频| 日韩精品视频一区二区在线观看| 久草热8精品视频在线观看| 亚洲久久久久久| 中文字幕亚洲在| 91视频在线视频| 亚洲精品一区在线观看| 精品51国产黑色丝袜高跟鞋| 91爱视频在线| 免费一级欧美在线大片| 日韩影片在线播放| 国产欧美69| 天堂va欧美va亚洲va老司机| 国产日韩欧美高清| 日韩欧美大片在线观看| 在线电影院国产精品| 韩国三级在线观看久| 久久久久久18| 91嫩草国产线观看亚洲一区二区| 免费成人看片网址| 亚洲午夜极品| 亚洲热在线视频| 国产精品久久久久毛片软件| 成人午夜视频在线播放| 精品久久久影院| 伦xxxx在线| 国产精品一区专区欧美日韩| 尤物tv在线精品| 日韩免费一级视频| 国产91精品入口| 黄色一级视频免费| 欧美一三区三区四区免费在线看| 成人jjav| 国产精品免费在线免费| 国产精品视频一区二区三区四蜜臂| 久久99久久99精品| 国产91精品久久久久久久网曝门| 中日韩一级黄色片| 欧美日韩国产一级二级| 午夜小视频在线| 国产精品国模在线| 激情五月色综合国产精品| 97在线播放视频| 久久精品免视看| 波多野结衣不卡| 国产亚洲在线播放| 成人精品三级| 亚洲欧美日韩不卡一区二区三区| 青青草97国产精品免费观看无弹窗版| 这里只有久久精品| 色哟哟精品一区| 国产免费a∨片在线观看不卡| 国产ts人妖一区二区三区| 亚洲a级精品| 免费观看成人网| 国产精品网友自拍| 国产精品久久久久久免费| 久久亚洲国产精品| 狂野欧美xxxx韩国少妇| www.在线观看av| 91玉足脚交白嫩脚丫在线播放| 五月婷婷亚洲综合| 亚洲丝袜在线视频| 99久久婷婷国产综合精品首页 | 精品欧美色视频网站在线观看| 成人www视频在线观看| 欧美福利网址| 中文字幕在线国产| 欧美日韩国产一区二区| 六十路在线观看| 成人在线免费观看视视频| 欧美韩日精品| 香蕉网在线播放| 欧美日韩国产一区| 国内在线免费视频| 蜜桃999成人看片在线观看| 青娱乐精品视频| 九九视频免费在线观看| 国产视频精品久久久| 99精品国自产在线| 欧美做受777cos| 久久日韩粉嫩一区二区三区 | 精品免费99久久| 老司机2019福利精品视频导航| 日韩精品最新在线观看| 国产一区二区三区高清播放| 懂色av.com| 中文字幕一精品亚洲无线一区 | 一区二区视频免费看| 亚洲国产欧美一区二区三区同亚洲| 日韩免费va| 精品视频在线观看一区二区| 久久综合久久久久88| 国产又粗又长又大视频| 97视频在线观看视频免费视频| 欧美偷拍自拍| 国产艳妇疯狂做爰视频| 欧洲中文字幕精品| 大桥未久在线播放| 亚洲精品二区| 99热在这里有精品免费| 一级特黄色大片| 日本韩国欧美精品大片卡二| 一级欧洲+日本+国产| 国产精品美女高潮无套| 精品国产伦一区二区三区观看方式|