CFS帶寬控制學習(1)-入門

2021-02-21 Linux內核之旅

在談到具體實現之前,還需要明確幾個任務調度相關的概念。從2.6內核以後,為了緩解多用戶下進程調度不公平的情況(舉個例子:A用戶有個實時進程,B用戶有個非交互進程,因為A的優先級比較高,那麼A佔用了大量的CPU時間,那麼對B就不夠公平)被調度的對象就從單一進程變成了任務組,這樣一來可以每個用戶對應一個任務組,從而分配得到一定的CPU時間,在這個組裡不同的任務再去獲取相應的CPU時間。這樣的任務組叫做task_group,

定義在kernel/sched/sched.h:363中:

struct task_group {#ifdef CONFIG_FAIR_GROUP_SCHED 
struct sched_entity **se; struct cfs_rq       **cfs_rq;#endifstruct cfs_bandwidth    cfs_bandwidth; }

其中包含了一個類型為sched_entity的成員。sched_entity也即調度實體,它可以是進程,也可以是進程組,甚至用戶。這些調度實體按照vruntime時間序,以紅黑樹的形式組織,並由cfs_rq管理,同樣是task_group的欄位,它的定義在:kernel/sched/sched.h:488:

struct cfs_rq {#ifdef CONFIG_FAIR_GROUP_SCHEDstruct rq       *rq;    };

它包含了一個rq結構的成員,這是該cfs_rq附著到每個CPU run queue的指針。

在回到task_group的定義裡,還可以看到cfs_bandwidth的結構體成員,它的定義在:`kernel/sched/sched.h:337`:

struct cfs_bandwidth {#ifdef CONFIG_CFS_BANDWIDTHktime_t     period;   u64     quota;        #endif};

可以看到period和quota正是cfs_bandwidth的成員。那麼綜上所述,CPU帶寬控制的對象是task_group,配置好的period和quota都是作用在task_group上,然後再分配給task_group下的cfs_rq。可以以下圖作為示例:

進一步說,可以認為給task_group分配的quota是一個global quota pool,然後假定每個cfs_rq又擁有一個local quota pool,那麼cfs_rq要從global quota pool中申請一定數量的CPU時間,這個時間叫做slice,可以通過/proc/sys/kernel/sched_cfs_bandwidth_slice_us,目前默認值為5ms。見下圖:

當某個cfs_rq申請到slice以後就會開始執行,當前slice消耗完後就會繼續申請。當在一個period的時間global quota pool已經分配乾淨,此時該cfs_rq就會進入一個叫做throttled的狀態,在這個狀態中任務因為無法獲取CPU時間所以無法被執行。這個throttle的統計狀態可以通過cpu.stat cgroup進行查看。當該period結束後,global quota pool會被刷新並可以分配slice,如此進入下一個周期。

那麼回到前面所說的cfs_bandwidth定義裡:

struct cfs_bandwidth {#ifdef CONFIG_CFS_BANDWIDTHktime_t     period;   u64     quota;        u64     runtime;      
struct hrtimer    period_timer; struct hrtimer    slack_timer;  struct list_head  throttled_cfs_rq;                int     nr_periods;          int     nr_throttled;        u64     throttled_time;      #endif};

可以了解到period的周期性由一個高精度定時器period_timer實現,被throttle的cfs_rq會掛到throttle_cfs_rq鍊表中。runtime的值最初跟quota一樣,但隨著任務執行會逐步減少。cpu.stats的值來自廈門的nr_periods、nr_throttled和throttled_time。

相關焦點

  • cfs835吃飯生活,官方唯一指定入口!(cfs835吃飯生活)
    一個cfs835吃飯生活充滿公眾號力的月份~校園開始逐步恢復活力,大高校一一開學,又是一個全新的開始,廣大學cfs835吃飯生活子都步入全新>cfs835吃飯生活階ABA270內部券段。在職場cfs835吃飯生活同樣是一個全新的開端,各大行業都有「金九銀十」之說,奔波在各個職場的大佬們在9月的業績一定會蹭cfs835吃飯生活上漲。
  • 《cf》cfs2018總決賽門票賣多少錢 2018CFS總決賽門票售價
    導 讀 cfs2018總決賽將於12月8日和9日兩天在南京青奧體育公園劇情,屆時達到現場的玩家們可以與喜歡的戰隊來個近距離的接觸
  • 企業帶寬高級應用,彈性流量控制
    廣大的大中型公司企業,他們所應用的網絡帶寬是有限的,如何在僅有的資源中合理的分配和利用,並且使用中不影響用戶正常使用網絡的速率,這個成為了當代企業家們首要解決的疑難。  為了解決帶寬的有效分配,飛魚星推出了最新的網絡帶寬管理功能,彈性流量控制。在原來的IP/IP段的流量限制的基礎上,在帶寬還充裕的情況下,可實現突破流量限制的範圍,能最大限度的使用剩餘的資源。
  • 自抗擾一點入門經驗分享
    為了對自抗擾思想和其發展演變過程有一個全局的認識,在入門階段,閱讀一些經典的綜述文章是很有必要的。下面舉列了一些自抗擾綜述文章 [1-9],這些文章都是自抗擾領域有多年研究經驗的學者撰寫,內容深入淺出、高屋建瓴,值得反覆閱讀。如果文章中涉及一些理論知識開始不能很好理解可以先放下,暫時不必深究,此時領會思想為關鍵。到後續理論學習到一定程度,再回頭來翻看,自然又會有不同的理解。
  • 國外隊伍眼中的CFS S1到底是什麼樣
    本文由52PK原創,轉載請註明出處CFS S2即將於2月在中國成都舉行了,很多的隊伍都已經集結完畢,有老隊伍也有新隊伍,相信眾多的老牌強隊對於在中國舉辦的CFS S1記憶猶新,雖然國外的戰隊都沒有取得最高獎盃,但是他們對於在中國舉辦的比賽還是給予了肯定的態度,那麼在國外隊伍的眼中在中國舉辦的CFS S1到底是什麼樣的呢,就讓我們跟隨著國外選手的視角,回顧下CFS S1。
  • 神作:帶寬!
    儘管如此還是在學習和工作實踐中會遇到或多或少的迷惑,這個專題,我試著把和「帶寬」相關的內容做個再學習和總結,希望自己能夠通過這個內容,溫故而知新。內容提要1、帶寬相關概念2、特徵頻率fT3、帶寬和上升時間乘積4、理想方波5、開路(短路)時間常數法6、級聯繫統的帶寬計算和優值7、帶寬提升方法帶寬(上)Part1
  • 視頻帶寬是什麼?視頻帶寬怎麼計算?專業音視頻帶寬參數重要嗎?
    圖源自大視內部群趁此機會,小編也去報名參加,好好地學習了一番。上周培訓的主題是「怎樣算視頻帶寬?」,其中涉及了帶寬的理論知識以及視頻帶寬計算方法。小編覺得這個知識還挺有趣的,所以在周末消化、整理了一下,準備從下面三個問題入手,給大家分享一下我學到的「帶寬」小知識。視頻帶寬是什麼?視頻帶寬怎麼計算?專業音視頻帶寬參數重要嗎?
  • Arduino入門6: 控制多個LED
    在上一篇《Arduino入門5: 經典儀式Blinking a LED》中我們學習了如何點亮並閃爍一顆LED。那麼如何用Arduino控制很多個LED呢?    準備材料    在開始實踐前,請準備好以下硬體和軟體:Arduino UNO 1塊當然你也可以使用Arduino其它版本,比如Arduino Leonardo, Arduino Duemilanove。
  • 別讓網文毀了你的環路分析(1)---穿越頻率,帶寬和動態
    想先開始有關環路控制的一個系列,希望能以有限的水平幫到大家打開思路,能夠獨立思考環路的種種---經典控制理論,十遍百遍也值得品味。
  • 專欄 | 內存帶寬與計算能力,誰才是決定深度學習執行性能的關鍵?
    隨著深度學習的不斷發展,計算能力得到了深度學習社區越來越多的注意。
  • 玩轉HDMI2.1 源端測試之【入門基礎篇】
    玩轉HDMI2.1 源端測試之【入門基礎篇】 廠商供稿 發表於 2019-08-16 15:50:26 在HDMI2.1源端測試中,示波器模擬了sink的行為,提供了端接電阻和端接電壓
  • 帶寬與速率的區別簡單介紹
    信道的帶寬:對信道來說,帶寬是衡量其通信能力的大小的指標。對模擬信道,使用信道的頻帶寬度來衡量。如果一個信道,其最低可傳輸頻率為f1的信號,最高可傳輸頻率為f2的信號,則該模擬信道的帶寬是:模擬信道的帶寬 = f2 - f1 (f2 > f1)描述模擬信道帶寬時,帶寬的單位是Hz。對於數字信道的通信能力,使用信道的最大傳輸速率來衡量。
  • PS5的HDMI 2.1接口實測殘血:帶寬縮水了1/3
    為了支撐4K 120Hz和8K輸出,今年的Xbox Series X以及PS5主機都配備了HDMI 2.1接口。不過,HDTVTest發燒友Vincent Teoh實測發現(電視機是LG 48寸CX),PS5的HDMI 2.1輸出帶寬被限制在了32Gbps。HDMI 2.1的理論帶寬是48Gbps,也就是說縮水了1/3。相較之下,Xbox Series X稍微好點,能到40Gbps。
  • 信號帶寬是什麼看了就知道
    「我們現在沒有足夠的帶寬來處理這些工作。」也許沒人注意到這些,但我發現它很有意思。 信號帶寬 工程師會問「這個信號需要多少帶寬?」通常,這一問題涉及確保信號可以通過一個組件或系統傳輸、並在信號質量沒有降低的情況下傳輸到另一端。 圖1顯示了信號通過帶寬有限的系統的情況。如圖所示,系統有足夠的帶寬來傳遞信號且保持不變,這通常是期望的結果。
  • 信號帶寬是什麼?
    「帶寬」這個術語在許多情況下已被濫用。我記得在一次會議上,這個詞被用來指:特定信號的頻率組成、特定電路的頻率響應、區域網的速度,甚至組織的人數。「我們現在沒有足夠的帶寬來處理這些工作。」也許沒人注意到這些,但我發現它很有意思。
  • 學習三菱PLC編程入門應先學習什麼?想學習三菱PLC的朋友一定要看的入門第一課
    ,如果學習三菱PLC編程入門應先學習什麼?新手編程入門應該先學習三菱PLC編程與應用入門 ,主要內容包括三菱FX系列PLC的數字電路基礎、了解PLC、編程基礎、軟體使用、基本指令系統和程序編制、定時器和計數器等入門知識。要注意的是,學習PLC編程應具備一定的電工基礎知識,如果沒有這方面知識,可以先學習一定的電工基礎知識。
  • 示波器帶寬你真的理解嗎?
    示波器最主要的指標參數是:   (1)帶寬;   (2)採樣率;   (3)記錄長度。   帶寬- 這個指標能告訴我們什麼?   模擬帶寬是一個測量指標,簡單的定義是:示波器測得正弦波的幅度不低於真實正弦波信號3dB 的幅度時的最高頻率(見的IEEE - 1057)。
  • 漫談我的環路控制學習之路(還在路上……)
    ,本文內容非常豐富,因題材格式有限,只公布少數精華內容,如想了解詳細內容請點擊文章下方的「閱讀原文」進行查閱1)工程應用級:(這也只是我目前勉強達到的層次)利用已有的軟硬資源指導和輔助設計過程,達到一個好的Performance即可.
  • CY-CY和CFS-CFS 是否有區別
    二者具體如下,CY-CY yard to yardCy-cfs yard to container terminal前者所說的是堆場到堆場