虛擬運(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,也就說(shuō)時(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);
}
-
Linux
+關(guān)注
關(guān)注
87文章
11511瀏覽量
213835 -
時(shí)鐘
+關(guān)注
關(guān)注
11文章
1901瀏覽量
133241
發(fā)布評(píng)論請(qǐng)先 登錄
如何縮短Vivado的運(yùn)行時(shí)間

如何檢查Linux服務(wù)器的運(yùn)行時(shí)間

labview中計(jì)算程序的運(yùn)行時(shí)間
C語(yǔ)言教程之顯示程序運(yùn)行時(shí)間
如何用SysTick實(shí)現(xiàn)測(cè)量程序運(yùn)行時(shí)間

電機(jī)運(yùn)行時(shí)間進(jìn)行排列 是分為兩個(gè)部分來(lái)完成這個(gè)程序的設(shè)計(jì)的

高效的雙向主動(dòng)平衡器可延長(zhǎng)電池運(yùn)行時(shí)間

最大化延長(zhǎng)即使具有老化電池的汽車電池組運(yùn)行時(shí)間

如何高效測(cè)量ECU的運(yùn)行時(shí)間
淺析STM32代碼運(yùn)行時(shí)間的技巧

Linux CFS虛擬時(shí)間

ch32v307記錄程序運(yùn)行時(shí)間
西門子SCL編程50臺(tái)電機(jī)運(yùn)行時(shí)間累計(jì)方法

評(píng)論