0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內(nèi)不再提示

Linux CFS虛擬時間

麥辣雞腿堡 ? 來源:技術簡說 ? 作者:董旭 ? 2023-07-31 11:11 ? 次閱讀

**CFS調(diào)度算法:**摒棄固定時間片,采用進程權重值的比重來量化計算實際運行時間,并引入虛擬時間和真實時間的概念,真實時間就是在物理時鐘下實際運行的時間,虛擬時間是實際運行時間與nice值為0對應的權值的比值。

**虛擬時間片引入:**假設進程不存在優(yōu)先級區(qū)分,那么只要保證每個進程的實際運行時間相同即可,能做到絕對公平。調(diào)度時,調(diào)度器只需要記錄每個進程的實際時間,每次調(diào)度時挑出【已經(jīng)運行時間最短的進程】。

然而事實上每個進程會涉及不同的優(yōu)先級,此時不同的進程應該由于優(yōu)先級的原因?qū)е隆菊鎸嵾\行時間的所占權重】不同才行,那么如何評估進程運行時間的長短?如何選擇下一個進程進行調(diào)度?

由此引入虛擬運行時間【希望不同的進程根據(jù)優(yōu)先級在一個調(diào)度延遲【調(diào)度延遲就是保證每一個可運行進程都至少運行一次的時間間隔】內(nèi)分配的物理時間通過一個公式計算得到一個相同的值,稱這個值為虛擬時間】,當選擇下一個進程執(zhí)行的時候,找出虛擬時間最小的進程即可。虛擬時間要保證優(yōu)先級高的進程的虛擬時間過得慢一些,優(yōu)先級低的進程的虛擬時間快一些。

引入虛擬運行時間,CFS中就緒隊列使用一棵以虛擬時間為鍵的紅黑樹將調(diào)度實體組織起來,利用紅黑樹的特性,虛擬時間最短的進程在紅黑樹的最左端,調(diào)度器每次選擇位于紅黑樹最左端的虛擬時間對應的調(diào)度實體參與調(diào)度。

如下所示,通過cat/proc/$pid/sched查看某個進程調(diào)度信息,第二行se.vruntime就是虛擬運行時間:

圖片

由上面的展示也可以看出來調(diào)度相關的這些信息是存儲在調(diào)度實體se中,【每個進程描述符中都有每種調(diào)度類對應的調(diào)度實體,調(diào)度實體存放與該調(diào)度類相關的調(diào)度信息,并參與調(diào)度,CFS調(diào)度器對應的調(diào)度實體為struct sched_entity se,例如實時調(diào)度器對應的調(diào)度實體為struct sched_rt_entity rt】,CFS調(diào)度器的調(diào)度實體如下:

struct sched_entity
{
    struct load_weight      load;           /* for load-balancing負荷權重,這個決定了進程在CPU上的運行時間和被調(diào)度次數(shù) */
    struct rb_node          run_node;
    unsigned int            on_rq;          /*  是否在就緒隊列上  */

    u64                     exec_start;         /*  上次啟動的時間*/

    u64                     sum_exec_runtime;
    u64                     vruntime;        /* 虛擬運行時間*/
    u64                     prev_sum_exec_runtime;
    /* rq on which this entity is (to be) queued: */
    struct cfs_rq           *cfs_rq;
    ...
};
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • Linux
    +關注

    關注

    87

    文章

    11164

    瀏覽量

    208469
  • CFS
    CFS
    +關注

    關注

    0

    文章

    7

    瀏覽量

    9044
收藏 人收藏

    評論

    相關推薦

    嵌入式工程師必會的 Linux 進程調(diào)度所有知識點

    vriture_runtime 最小的任務來調(diào)度。 為了能夠快速找到虛擬運行時間最小的進程,Linux 內(nèi)核使用紅黑樹來保存可運行的進程。CFS跟蹤調(diào)度實體sched_entity的
    發(fā)表于 08-01 07:00

    基于RFID技術CFS智能倉庫系統(tǒng)的解決方案

    系統(tǒng)簡介集裝箱貨運站(簡稱CFS)是以裝箱、拆箱和集拼、分撥為主要業(yè)務的運輸服務機構,同時提供集裝箱公路運輸、箱務管理、報關報驗、洗箱修箱等其他集裝箱運輸?shù)南嚓P服務?;赗FID的CFS智能倉庫管理
    發(fā)表于 09-19 08:20

    基于Linux虛擬網(wǎng)卡的測試系統(tǒng)

    為了實現(xiàn)網(wǎng)絡通信算法能夠在單主機平臺獲得驗證分析,提出基于Linux虛擬網(wǎng)卡的測試系統(tǒng)設計方案。并完成了系統(tǒng)軟件設計.分析了Linux網(wǎng)絡驅(qū)動框架原理,完成Linux
    發(fā)表于 11-13 11:23 ?2次下載
    基于<b class='flag-5'>Linux</b><b class='flag-5'>虛擬</b>網(wǎng)卡的測試系統(tǒng)

    Linux容器和虛擬機之間的區(qū)別差異分析

    自從Linux上的容器變得流行以來,了解Linux容器和虛擬機之間的區(qū)別變得更加棘手。本文將向您提供詳細信息,以了解Linux容器和虛擬機之
    的頭像 發(fā)表于 12-27 13:52 ?8987次閱讀

    Linux負載均衡算法的瑕疵將修復

    Linux 內(nèi)核開發(fā)者 Vincent Guittot 發(fā)現(xiàn)Linux 完全調(diào)度算法 CFS 存在瑕疵,修復之后將進一步提升調(diào)度性能。
    的頭像 發(fā)表于 03-14 09:23 ?1872次閱讀

    linux虛擬機的聯(lián)網(wǎng)方法

    虛擬機安裝linux系統(tǒng)無法上網(wǎng)的解決方法。
    發(fā)表于 05-31 09:27 ?1489次閱讀
    <b class='flag-5'>linux</b><b class='flag-5'>虛擬</b>機的聯(lián)網(wǎng)方法

    linux虛擬機怎么聯(lián)網(wǎng)

    虛擬機安裝linux系統(tǒng)無法上網(wǎng)的解決方法。
    發(fā)表于 06-03 09:29 ?2332次閱讀

    虛擬機:Linux如何測試 DBUS Daemon

    虛擬機:Linux如何測試 DBUS Daemon
    的頭像 發(fā)表于 06-22 16:35 ?4239次閱讀
    <b class='flag-5'>虛擬</b>機:<b class='flag-5'>Linux</b>如何測試 DBUS Daemon

    Linux虛擬網(wǎng)絡技術的資料講解

    Linux虛擬化技術中,網(wǎng)絡級別上最重要的三項技術是網(wǎng)絡名稱空間、線對和Veth橋接器或虛擬交換機技術。 今天,我們將指導您學習Linux網(wǎng)絡虛擬
    的頭像 發(fā)表于 06-27 09:35 ?3584次閱讀

    Linux虛擬內(nèi)存究竟是什么?

    前不久組內(nèi)又有一次我比較期待的分享:”Linux虛擬內(nèi)存”。
    的頭像 發(fā)表于 06-21 16:41 ?1941次閱讀
    <b class='flag-5'>Linux</b>的<b class='flag-5'>虛擬</b>內(nèi)存究竟是什么?

    Linux虛擬運行時間的計算

    虛擬運行時間的計算 關于tick: tick是周期性的時鐘中斷,時鐘中斷驅(qū)動調(diào)度器runing,其周期間隔根據(jù)硬件頻率的設定相關(T=1/f),如下: T=1/250 = 4ms,也就說時鐘中斷以
    的頭像 發(fā)表于 07-31 11:15 ?657次閱讀
    <b class='flag-5'>Linux</b><b class='flag-5'>虛擬</b>運行<b class='flag-5'>時間</b>的計算

    linux虛擬機使用教程

    引言:Linux虛擬機是一種方便且常用的技術,它允許用戶在現(xiàn)有操作系統(tǒng)的基礎上創(chuàng)建和運行另一個獨立的操作系統(tǒng)。在本篇文章中,我們將提供一份詳盡的教程,幫助你了解如何安裝、配置和使用Linux
    的頭像 發(fā)表于 11-17 10:06 ?1170次閱讀

    虛擬linux怎么編寫程序

    虛擬Linux上編寫程序是一項非常常見且有用的任務。無論是開發(fā)一個簡單的腳本、一個Web應用程序還是一個復雜的軟件項目,Linux提供了強大的工具和環(huán)境來幫助你進行編程。本文將詳細介紹如何在
    的頭像 發(fā)表于 11-17 10:08 ?1503次閱讀

    linux虛擬機怎么運行代碼

    運行代碼是Linux虛擬機中的常見操作,本文將詳細介紹如何運行代碼。 首先,要運行代碼,你需要先安裝好Linux虛擬機,并確保能夠順利運行。接下來,你需要打開
    的頭像 發(fā)表于 11-17 10:12 ?4483次閱讀

    怎么安裝linux虛擬

    在計算機領域,虛擬機是一種軟件程序,它允許在主操作系統(tǒng)上運行多個虛擬操作系統(tǒng)。Linux虛擬機在開發(fā)、測試和學習等環(huán)境中得到廣泛應用。本文將詳細介紹如何安裝
    的頭像 發(fā)表于 11-23 10:50 ?995次閱讀