河南夢之網網絡科技有限公司
夢之網科技出品
掃描關注夢之網科技微信公眾賬號

掃小程序碼聯系客服

為什么Linux CFS調度器沒有帶來驚艷的碾壓效果?-夢之網科技

夢之網科技?2019-10-07?文章動態?

任何領域,革命性的碾壓式推陳出新并不是沒有,但是概率極低,人們普遍的狂妄在于,總是認為自己所置身的環境正在發生著某種碾壓式的變革,但其實,最終大概率不過是一場平庸。

為什么Linux CFS調度器沒有帶來驚艷的碾壓效果?-夢之網科技

作者| dog250

責編 | 劉靜

出品 | CSDN博客

但凡懂Linux內核的,都知道Linux內核的CFS進程調度算法,無論是從2.6.23將其初引入時的論文,還是各類源碼分析,文章,以及Linux內核專門的圖書,都給人這樣一種感覺,即CFS調度器是革命性的,它將徹底改變進程調度算法。預期中,人們期待它會帶來令人驚艷的效果。

然而這是錯覺。

人們希望CFS速勝,但是分析來分析去,卻只是在某些方面比O(1)調度器稍微好一點點。甚至在某些方面比不上古老的4.4BSD調度器。可是人們卻依然對其趨之若鶩,特別是源碼分析,汗牛塞屋!

為什么CFS對別的調度算法沒有帶來碾壓的效果呢?

首先,在真實世界,碾壓是不存在的,人與人,事與事既然被放在了同一個重量級梯隊比較,其之間的差別沒有想象的那么大,根本就不在誰碾壓誰。不能被小說電視劇電影蒙蔽了,此外,徐曉冬大擺拳暴打雷雷也不算數,因為他們本就不是一個梯隊。

任何領域,革命性的碾壓式推陳出新并不是沒有,但是概率極低,人們普遍的狂妄在于,總是認為自己所置身的環境正在發生著某種碾壓式的變革,但其實,最終大概率不過是一場平庸。

任何領域,革命性的碾壓式推陳出新并不是沒有,但是概率極低,人們普遍的狂妄在于,總是認為自己所置身的環境正在發生著某種碾壓式的變革,但其實,最終大概率不過是一場平庸。

最終就出現了角力,僵持。

其次,我們應該看到,CFS調度器聲稱它會給交互式進程帶來福音,在這方面CFS確實比O(1)做得好,但是驚艷的效果來自于粉絲的認同。Linux系統交互進程本來就不多,Linux更多地被裝在服務器,而在服務器看來,吞吐是要比交互響應更加重要的。

那么以交互為主的Android系統呢?我們知道,Android也是采用了CFS調度器,也有一些事BFS,為什么同樣沒有帶來驚艷的效果呢?

我承認,2008年前后出現CFS時還沒有Android,等到Android出現時,其采用的Linux內核已經默認了CFS調度器,我們看下Android版本,Linux內核版本以及發行時間的關系:

為什么Linux CFS調度器沒有帶來驚艷的碾壓效果?-夢之網科技

Linux內核在2.6.23就采用了CFS調度器。所以一個原因就是沒有比較。Android系統上,CFS沒有機會和O(1)做比較。

另外,即便回移一個O(1)調度器到Android系統去和CFS做AB,在我看來,CFS同樣不會驚艷,原因很簡單,Android系統幾乎都是交互進程,卻前臺進程永遠只有一個,你幾乎感受不到進程的切換卡頓,換句話說,即便CFS對待交互式進程比O(1)好太多,你也感受不到,因為對于手機,平板而言,你切換APP的時間遠遠大于進程切換的時間粒度。

那么,CFS到底好在哪里?

簡單點說,CFS的意義在于,在一個混雜著大量計算型進程和IO交互進程的系統中,CFS調度器對待IO交互進程要比O(1)調度器更加友善和公平。理解這一點至關重要。

其實,CFS調度器的理念非常古老,就說在業界,CFS的思想早就被應用在了磁盤IO調度,數據包調度等領域,甚至最最古老的SRV3以及4.3BSD UNIX系統的進程調度中早就有了CFS的身影,可以說,Linux只是使用CFS調度器,而不是設計了CFS調度器

就以4.3BSD調度器為例,我們看一下其調度原理。

4.3BSD采用了1秒搶占制,每間隔1秒,會對整個系統進程進行優先級排序,然后找到優先級最高的投入運行,非常簡單的一個思想,現在看看它是如何計算優先級的。

首先,每一個進程j均擁有一個CPU滴答的度量值Cj,每一個時鐘滴答,當前在運行的進程的CPU度量值C會遞增:

為什么Linux CFS調度器沒有帶來驚艷的碾壓效果?-夢之網科技

當一個1秒的時間區間ii過去之后,Cj被重置,該進程jj的優先級采用下面的公式計算:

可以計算,在一個足夠長的時間段內,兩個進程運行的總時間比例,將和它們的Base_PrioBase_Prio優先級的比例相等。

4.3BSD的優先級公平調度是CPU滴答驅動的。

現在看Linux的CFS,CFS采用隨時搶占制。每一個進程j均攜帶一個虛擬時鐘VCj,每一個時鐘滴答,當前進程k的VCk會重新計算,同時調度器選擇VC最小的進程運行,計算方法非常簡單:

可見, Linux的CFS簡直就是4.3BSD進程調度的自驅無級變速版本!

文章關鍵詞
Android
linux
調度器
linux內核
cfs
急速赛车国语 有在百万英雄赚钱的么 定投10元能赚钱吗 新疆11选5怎么把把重量 888开奖直播间 广西十一选五分析软件 澳洲幸运5计划软件手机版式 悠洋棋牌游戏手机版本 快乐扑克3玩法 手游魔力宝贝赚钱攻略 腾讯欢乐斗地主经典版 华彩网 做熊本家赚钱吗 百赢棋牌下载地址 埃及三分彩官网 澳洲幸运10有开奖记录 沪深300股票指数