虛擬運(yùn)行時間的計算
關(guān)于tick:
tick是周期性的時鐘中斷,時鐘中斷驅(qū)動調(diào)度器runing,其周期間隔根據(jù)硬件頻率的設(shè)定相關(guān)(T=1/f),如下:
T=1/250 = 4ms,也就說時鐘中斷以4ms為周期【tips:每發(fā)生一次時鐘中斷,jiffies的數(shù)值就加上1】,每一個進(jìn)程的虛擬時間在時鐘中斷里面被維護(hù),每次時鐘中斷都要更新當(dāng)前進(jìn)程的虛擬時間。更新調(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文章
11509瀏覽量
213736 -
時鐘
+關(guān)注
關(guān)注
11文章
1901瀏覽量
133201
發(fā)布評論請先 登錄
如何縮短Vivado的運(yùn)行時間

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

labview中計算程序的運(yùn)行時間
如何用SysTick實(shí)現(xiàn)測量程序運(yùn)行時間

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

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

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

評論