色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

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

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

3天內不再提示

虛擬運行時間計算的代碼邏輯

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

代碼邏輯比較簡單:

1、確定就緒隊列的當前執行的調度實體

/*  確定就緒隊列的當前執行進程curr  */
struct sched_entity *curr = cfs_rq- >curr;

2、根據獲取的當前執行進程,計算當前和上一次更新負荷權重時兩次的時間的差值

u64 now = rq_clock_task(rq_of(cfs_rq));
 u64 delta_exec;

 if (unlikely(!curr))
  return;

 delta_exec = now - curr- >exec_start;
 if (unlikely((s64)delta_exec <= 0))
  return;

3、重新更新啟動時間exec_start為now,以備下次計算時使用,最后將計算出的時間差加到先前的統計時間上。

/*  重新更新啟動時間exec_start為now  */
curr- >exec_start = now;

schedstat_set(curr- >statistics.exec_max,
              max(delta_exec, curr- >statistics.exec_max));

/*  將時間差加到先前統計的時間即可  */
curr- >sum_exec_runtime += delta_exec;
schedstat_add(cfs_rq, exec_clock, delta_exec);

這也是通過cat /proc/$pid/sched看到的一些統計信息

4、開始計算虛擬時間

curr- >vruntime += calc_delta_fair(delta_exec, curr);

5、計算虛擬時間函數calc_delta_fair如下,忽略舍入和溢出檢查,calc_delta_fair函數所做的計算如下:

/*
 * delta /= w
 */
static inline u64 calc_delta_fair(u64 delta, struct sched_entity *se)
{
 if (unlikely(se- >load.weight != NICE_0_LOAD))
  delta = __calc_delta(delta, NICE_0_LOAD, &se- >load);

 return delta;
}

圖片

其中NICE_0_LOAD的值為:1024,當進程的nice=0時,不需要進行加權處理,其虛擬時間就等于其實際運行時間。

# define SCHED_FIXEDPOINT_SHIFT  10
#define NICE_0_LOAD_SHIFT (SCHED_FIXEDPOINT_SHIFT)
#define NICE_0_LOAD  (1L < < NICE_0_LOAD_SHIFT)

?1024也就是Nice值為0對應的權重值,權重值在內核中是預先定義好的,如下所示:

const int sched_prio_to_weight[40] = {
 /* -20 */     88761,     71755,     56483,     46273,     36291,
 /* -15 */     29154,     23254,     18705,     14949,     11916,
 /* -10 */      9548,      7620,      6100,      4904,      3906,
 /*  -5 */      3121,      2501,      1991,      1586,      1277,
 /*   0 */      1024,       820,       655,       526,       423,
 /*   5 */       335,       272,       215,       172,       137,
 /*  10 */       110,        87,        70,        56,        45,
 /*  15 */        36,        29,        23,        18,        15,
};

通過公式和內核預先設定的權重表,可以看出來:

Nice值越高(對應的優先級越低),權重越小,虛擬時間累加的越快(虛擬時間過得越快),Nice值越低(對應的優先級越高),權值越高,虛擬時間累加的越慢(虛擬時間過得越慢)。CFS的思想核心也就是這樣,讓每個調度實體的虛擬時間增加速度不同,使用虛擬時間來衡量調度實體在CPU上已經執行的時間。

總結:

不同優先級的進程以各自對應的速度推進虛擬時間,只要保證在一個調度延遲內虛擬時間的推進進展相同,就實現了完成公平,公平指的是相對公平,即按進程的權重給予不同的運行時間,虛擬時間越小,代表著受到了"不公平"對待,因此下一個參與調度的調度實體就是紅黑樹中的最左邊(虛擬時間最小)的節點,如此一來既能公平選擇進程,又能保證高權重進程獲得較多的運行時間。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • Linux
    +關注

    關注

    87

    文章

    11336

    瀏覽量

    210097
  • 代碼
    +關注

    關注

    30

    文章

    4819

    瀏覽量

    68878
收藏 人收藏

    評論

    相關推薦

    如何縮短Vivado的運行時間

    在Vivado Implementation階段,有時是有必要分析一下什么原因導致運行時間(runtime)過長,從而找到一些方法來縮短運行時間
    的頭像 發表于 05-29 14:37 ?1.4w次閱讀
    如何縮短Vivado的<b class='flag-5'>運行時間</b>

    如何檢查Linux服務器的運行時間

    Linux 中的 uptime 用于查看系統啟動后的運行時間。它是一個比較簡單的 Linux 命令,可以不帶參數直接運行
    發表于 11-25 15:25 ?1.5w次閱讀
    如何檢查Linux服務器的<b class='flag-5'>運行時間</b>

    stm32cubeIDE代碼運行時間如何查看?

    stm32cubeIDE 代碼運行時間,如何查看?就如 keil 調試時候那樣,可以測試代碼運行時間。但是在stm32cubeIDE 中,一直沒有找到這個功能,不知道哪位高人可以提示
    發表于 04-16 08:10

    請問6747如何測量代碼運行時間

    1. 我想用片上的硬件定時器的方法測量代碼運行時間,使用timer,加頭文件:csl_timer.h,但是6747沒有csl,我下載了6747的cslr package,發現里面也沒有
    發表于 07-28 10:25

    C語言教程之顯示程序運行時間

    C語言教程之顯示程序運行時間,很好的C語言資料,快來學習吧。
    發表于 04-25 16:09 ?0次下載

    如何用SysTick實現測量程序運行時間

    在實際的項目開發過程中,常常遇到需要得到一段代碼運行時間,通常的方法是用示波器來測量,這篇博文將用 SysTick 來實現 精確測量 程序運行時間。 STM32F4 的內核定時
    的頭像 發表于 05-09 14:07 ?6091次閱讀
    如何用SysTick實現測量程序<b class='flag-5'>運行時間</b>

    KEIL的代碼運行時間功能

    郭老師說,這個時間單位是秒(sec),是從單片機運行第一條代碼開始計算的,但是當你真正用示波器驗證這個時間差(因為不知道單片機什么時候才開始
    的頭像 發表于 06-05 15:48 ?8967次閱讀
    KEIL的<b class='flag-5'>代碼</b><b class='flag-5'>運行時間</b>功能

    如何高效測量ECU的運行時間

    ,最終可能會引起運行時間方面的問題。這在項目后期需要大量的時間和金錢來解決。如果不能掌握系統的運行狀態,則很難發現系統內缺陷的根源。 解決方案 將TA軟件工具套件與VX1000測量標定硬件相結合,可同步分析 ECU內部
    的頭像 發表于 10-28 11:05 ?2279次閱讀

    淺析STM32代碼運行時間的技巧

    前言 ????測試代碼運行時間的兩種方法: 使用單片機內部定時器,在待測程序段的開始啟動定時器,在待測程序段的結尾關閉定時器。為了測量的準確性,要進行多次測量,并進行平均取值。 借助示波器的方法
    的頭像 發表于 11-09 09:52 ?3944次閱讀
    淺析STM32<b class='flag-5'>代碼</b><b class='flag-5'>運行時間</b>的技巧

    利用StopWatch監控Java代碼運行時間和分析性能

    利用StopWatch監控Java代碼運行時間和分析性能。
    的頭像 發表于 07-21 16:51 ?2904次閱讀

    AN021 測量MCU代碼運行時間的幾種方法

    AN021 測量MCU代碼運行時間的幾種方法
    發表于 02-27 18:23 ?0次下載
    AN021 測量MCU<b class='flag-5'>代碼</b><b class='flag-5'>運行時間</b>的幾種方法

    Linux虛擬運行時間計算

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

    ch32v307記錄程序運行時間

    ch32v307記錄程序運行時間 在程序開發中,很重要的一項任務就是對程序的運行時間進行評估。對于大型的程序系統來說,它們通常需要處理大量的數據或進行復雜的計算操作。因此,如果程序的運行時間
    的頭像 發表于 08-22 15:53 ?940次閱讀

    jvm運行時內存區域劃分

    JVM是Java Virtual Machine(Java虛擬機)的縮寫,它是Java編程語言的運行環境。JVM的主要功能是將Java源代碼轉換為機器代碼,并且在
    的頭像 發表于 12-05 14:08 ?556次閱讀

    三菱plc累計運行時間怎么編程

    具有重要意義。本文將詳細介紹如何使用三菱PLC編程實現累計運行時間的統計功能。 一、概述 累計運行時間是指設備或系統在一定時間內的總運行時間。在工業生產中,對設備的累計
    的頭像 發表于 06-20 11:31 ?2460次閱讀
    主站蜘蛛池模板: 光棍天堂在线a| 耻辱の奴隷淑女中文字幕| 超大BBWWW| 免费在线a| 99久久网站| 男女交性视频无遮挡全过程| 中文字幕欧美日韩VA免费视频| 黄色三级图片| 亚洲欧美一区二区三区九九九| 国产麻豆福利AV在线观看| 我要女人的全黄录像| 国产成人午夜精品免费视频| 四虎免费影院| 国产精品免费一区二区区| 双腿被绑成M型调教PLAY照片| 高H辣肉办公室| 无码专区久久综合久综合字幕 | 雪恋电影完整版免费观看| 国产精品第1页在线观看| 香蕉视频国产精品| 黑人巨茎大战白人女40CMO| 伊人久久大香线蕉avapp下载| 久久视频这里只精品99热在线| 2018国产天天弄谢| 泡妞高手在都市免费观看| 丰满女朋友在线观看中文| 无码AV熟妇素人内射V在线| 国产婷婷综合在线视频中文| 亚洲色综合中文字幕在线| 看看妇女的B免费看| a免费在线观看视频| 色欲AV无码乱码精品国产| 国产在线视精品在亚洲| 中文字幕无码亚洲字幕成A人蜜桃 中文字幕无码亚洲视频 | 亚洲国产日韩欧美高清片a| 精品日韩二区三区精品视频| 樱花草在线影视WWW日本动漫| 免费国产久久拍久久爱| 动漫美女被吸奶| 亚洲视频在线观看免费| 能看的黄页最新网站|