虛擬運(yùn)行時(shí)間的計(jì)算
關(guān)于tick:
tick是周期性的時(shí)鐘中斷,時(shí)鐘中斷驅(qū)動(dòng)調(diào)度器runing,其周期間隔根據(jù)硬件頻率的設(shè)定相關(guān)(T=1/f),如下:
T=1/250 = 4ms,也就說時(shí)鐘中斷以4ms為周期【tips:每發(fā)生一次時(shí)鐘中斷,jiffies的數(shù)值就加上1】,每一個(gè)進(jìn)程的虛擬時(shí)間在時(shí)鐘中斷里面被維護(hù),每次時(shí)鐘中斷都要更新當(dāng)前進(jìn)程的虛擬時(shí)間。更新調(diào)用的主要函數(shù)如下:
static void update_curr(struct cfs_rq *cfs_rq)
{
struct sched_entity *curr = cfs_rq- >curr
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
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)
curr- >vruntime += calc_delta_fair(delta_exec, curr)
update_min_vruntime(cfs_rq)
if (entity_is_task(curr)) {
struct task_struct *curtask = task_of(curr);
trace_sched_stat_runtime(curtask, delta_exec, curr- >vruntime);
cgroup_account_cputime(curtask, delta_exec);
account_group_exec_runtime(curtask, delta_exec);
}
account_cfs_rq_runtime(cfs_rq, delta_exec);
}
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。
舉報(bào)投訴
相關(guān)推薦
在Vivado Implementation階段,有時(shí)是有必要分析一下什么原因?qū)е?b class='flag-5'>運(yùn)行時(shí)間(runtime)過長(zhǎng),從而找到一些方法來(lái)縮短運(yùn)行時(shí)間。
發(fā)表于 05-29 14:37
?1.4w次閱讀
Linux 中的 uptime 用于查看系統(tǒng)啟動(dòng)后的運(yùn)行時(shí)間。它是一個(gè)比較簡(jiǎn)單的 Linux 命令,可以不帶參數(shù)直接運(yùn)行。
發(fā)表于 11-25 15:25
?1.5w次閱讀
可能這個(gè)對(duì)大家來(lái)說不是什么大問題,也有很多人有很多方法來(lái)實(shí)現(xiàn)程序的運(yùn)行時(shí)間的計(jì)算,要么兩個(gè)計(jì)時(shí)器,要么用到事件結(jié)構(gòu)。我這里用移位寄存器實(shí)現(xiàn)。 希望大家不要吐槽,如果大家有更好的,希望共享啊。
發(fā)表于 05-23 21:52
對(duì)于相同優(yōu)先級(jí)的任務(wù)采用時(shí)間片輪詢的方式運(yùn)行,那比如說有兩個(gè)優(yōu)先級(jí)都為5的任務(wù),那這兩個(gè)任務(wù)的運(yùn)行時(shí)間如何設(shè)置呢?在rt-thread中創(chuàng)建任務(wù)時(shí)就可以設(shè)置任務(wù)的運(yùn)行時(shí)間,在freer
發(fā)表于 07-19 08:03
C語(yǔ)言教程之顯示程序運(yùn)行時(shí)間,很好的C語(yǔ)言資料,快來(lái)學(xué)習(xí)吧。
發(fā)表于 04-25 16:09
?0次下載
在實(shí)際的項(xiàng)目開發(fā)過程中,常常遇到需要得到一段代碼的運(yùn)行時(shí)間,通常的方法是用示波器來(lái)測(cè)量,這篇博文將用 SysTick 來(lái)實(shí)現(xiàn) 精確測(cè)量 程序運(yùn)行 的時(shí)間。 STM32F4 的內(nèi)核定時(shí)器SysTick是一個(gè)24位的定時(shí)器,需要注
發(fā)表于 05-09 14:07
?6062次閱讀
前幾天有個(gè)學(xué)員咨詢一個(gè)程序設(shè)計(jì)的問題,程序的控制要求如下:需要控制5臺(tái)電機(jī)的運(yùn)行,每臺(tái)電機(jī)運(yùn)行時(shí)需要記錄運(yùn)行時(shí)間,電機(jī)啟動(dòng)運(yùn)行時(shí),根據(jù)記錄的運(yùn)行時(shí)間
發(fā)表于 07-19 08:57
?7203次閱讀
最大化延長(zhǎng)即使具有老化電池的汽車電池組運(yùn)行時(shí)間
發(fā)表于 03-20 12:44
?9次下載
,最終可能會(huì)引起運(yùn)行時(shí)間方面的問題。這在項(xiàng)目后期需要大量的時(shí)間和金錢來(lái)解決。如果不能掌握系統(tǒng)的運(yùn)行狀態(tài),則很難發(fā)現(xiàn)系統(tǒng)內(nèi)缺陷的根源。 解決方案 將TA軟件工具套件與VX1000測(cè)量標(biāo)定硬件相結(jié)合,可同步分析 ECU內(nèi)部
發(fā)表于 10-28 11:05
?2230次閱讀
前言 ????測(cè)試代碼的運(yùn)行時(shí)間的兩種方法: 使用單片機(jī)內(nèi)部定時(shí)器,在待測(cè)程序段的開始啟動(dòng)定時(shí)器,在待測(cè)程序段的結(jié)尾關(guān)閉定時(shí)器。為了測(cè)量的準(zhǔn)確性,要進(jìn)行多次測(cè)量,并進(jìn)行平均取值。 借助示波器的方法
發(fā)表于 11-09 09:52
?3886次閱讀
**CFS調(diào)度算法:**摒棄固定時(shí)間片,采用進(jìn)程權(quán)重值的比重來(lái)量化計(jì)算實(shí)際運(yùn)行時(shí)間,并引入虛擬時(shí)間和真實(shí)
發(fā)表于 07-31 11:11
?724次閱讀
ch32v307記錄程序運(yùn)行時(shí)間 在程序開發(fā)中,很重要的一項(xiàng)任務(wù)就是對(duì)程序的運(yùn)行時(shí)間進(jìn)行評(píng)估。對(duì)于大型的程序系統(tǒng)來(lái)說,它們通常需要處理大量的數(shù)據(jù)或進(jìn)行復(fù)雜的計(jì)算操作。因此,如果程序的運(yùn)行時(shí)間
發(fā)表于 08-22 15:53
?908次閱讀
當(dāng)RUN信號(hào)為TRUE時(shí),開始計(jì)時(shí),為FALSE時(shí)停止計(jì)時(shí),單次運(yùn)行時(shí)間清零,長(zhǎng)按RESET為5秒時(shí),單次和總運(yùn)行時(shí)間都清零。
發(fā)表于 11-27 09:59
?1895次閱讀
JVM是Java Virtual Machine(Java虛擬機(jī))的縮寫,它是Java編程語(yǔ)言的運(yùn)行環(huán)境。JVM的主要功能是將Java源代碼轉(zhuǎn)換為機(jī)器代碼,并且在運(yùn)行時(shí)管理Java程序的內(nèi)存。JVM
發(fā)表于 12-05 14:08
?537次閱讀
具有重要意義。本文將詳細(xì)介紹如何使用三菱PLC編程實(shí)現(xiàn)累計(jì)運(yùn)行時(shí)間的統(tǒng)計(jì)功能。 一、概述 累計(jì)運(yùn)行時(shí)間是指設(shè)備或系統(tǒng)在一定時(shí)間內(nèi)的總運(yùn)行時(shí)間。在工業(yè)生產(chǎn)中,對(duì)設(shè)備的累計(jì)
發(fā)表于 06-20 11:31
?2310次閱讀
評(píng)論