linux調度器_第三代cfs(2)_分解代碼_vruntime和min_vruntime大概理解

接上文,上文我都記不太清楚了,沒關係,看題目,我們是要來分解代碼的。把《linux調度器_第三代cfs(1)_引入》中的代碼放上來先。

//kernel\sched_fair.c 138行

static inline s64 entity_key(struct cfs_rq *cfs_rq, struct sched_entity *se) 
{
return se-> se->vruntime- cfs_rq->min_vruntime;
}


哦,大概有點印象了,話說,cfs是把所有可運行進程都扔到一個紅黑樹(或者就認爲是一個有序隊列裏),看誰關鍵值小誰在前面,就讓誰先運行。而上面這段代碼就是爲了算出這個關鍵值。

 se->vruntime的分解

先算前面一個值。 se->vruntime,實體的虛擬運行時間。實體前面已經解釋過了,因爲有時候排隊的有可能是進程組。虛擬倆字,後面再解釋,先來理解運行時間這個概念。

假設(時間單位可能與計算機內部的有區別,但這裏是爲了方便理解)有三個進程,A,B,C。A已經運行了一秒,所以A的運行時間爲1秒,A-runtime (是運行時間,而不是虛擬運行時間)= 1;B已經運行了3秒,因此B->runtime = 3;C已經運行了5秒,因此C->runtime = 5;來排個隊,A1=1,B3= 2,C5=3,A排第一。cfs(暫時不考慮後面的cfs_rq->min_vruntime,因爲這對所有進程都會減去這個值,可以暫時不考慮它)這時候就會選擇A運行,因爲它排最前面。如果讓A運行3秒,這時候A的運行時間就是1+3=4秒了,再排隊,B3=1,A4=2,C5=3,這時候就該選B進程運行了,運行了幾秒之後再排隊,cfs總選排在前面的運行。這基本上就是cfs的主要思想,再加上一些精妙的考慮,簡直美死了。

細心的同學會發現前面的假設中並沒有加上虛擬倆字,是的,那時是爲了方便理解,現在來加上,肯定會問爲什麼要加上虛擬倆字?如果你有這樣的疑問,我只能說問的好。問出了水平,想象一下,1秒鐘飛機跟自行車走的距離肯定不一樣吧,cfs爲了讓那些重要的進程有更多的時間運行,實際運行1秒,虛擬運行時間漲5秒,而那些不重要的進程,時間運行1秒,虛擬運行時間漲20秒。那麼重要的進程肯定更容易排在前面,有更多的時間來運行。關於虛擬運行時間與進程的重要性的具體關係,再這裏先不討論,只需有一個大概的概念即可。

cfs_rq->min_vruntime

接着來分解第二個參數,cfs即Completely Fair Scheduler完全公平調度,rq就是Runnable Queue可運行隊列,min最小,v,virtual虛擬的,運行時間。就是cfs的最小虛擬運行時間。需要記住的是這個參數是單調遞增的就可以了。至於爲什麼需要這個參數,也查了一些資料。另外下文會給一些相關的網址,方便感興趣的朋友深入研究。

這裏會有一個相對的概念,最近剛剛高考完,然而你說理科600分高還是不高呢?湖北理科一本線是510分,假如你在湖北600分就老高了,然而浙江的理科一本線是626,所以在浙江理科600分並不算太高,所以cfs中也需要一個放之不同cpu之間,可以衡量此進程對cpu需求的標準,來衡量進程對cpu的相對需求程度。下面兩段分別摘自別處。

     In order to remove the cfs_rq dependency from set_task_cpu() we need to ensure the task is cfs_rq invariant for all callsites.

爲了移除cfs_rq對set_task_cpu() 【在smp(對稱多處理結構的簡稱)中定義的函數,對稱多處理結構的簡稱】的依賴性,我們需要一個不變的標準對各個調用的位置。
      The simple approach is to substract cfs_rq->min_vruntime from se->vruntime on dequeue, and add cfs_rq->min_vruntime on enqueue.

       最簡單的方法就是在出隊列時,減去一個cfs_rq->min_vruntime,在入隊列時加上cfs_rq->min_vruntime。

總結:

      分別對排隊的兩個參數進行了一定的解釋,仍是隻需大概理解即可。

虛擬運行時間,因爲進程的優先級不一樣加入了權值的因素。

最小虛擬運行時間,則是爲了創造一個相對的概念,有一個相對的認識。

參考文獻

http://m.blog.csdn.net/blog/ctthunagchneg/8925591

http://bbs.chinaunix.net/forum.php?mod=viewthread&action=printable&tid=3665947


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章