- 論壇徽章:
- 0
|
這兩個調(diào)度算法的文件中都有一個更新CPU clock的函數(shù),sched_rt為:
static void update_curr_rt(struct rq *rq)
{
struct task_struct *curr = rq->curr;
struct sched_rt_entity *rt_se = &curr->rt;
struct rt_rq *rt_rq = rt_rq_of_se(rt_se);
u64 delta_exec;
if (!task_has_rt_policy(curr))
return;
delta_exec = rq->clock - curr->se.exec_start;
if (unlikely((s64)delta_exec < 0))
delta_exec = 0;
schedstat_set(curr->se.exec_max, max(curr->se.exec_max, delta_exec));
curr->se.sum_exec_runtime += delta_exec;
account_group_exec_runtime(curr, delta_exec);
...... ......
sched_fair為:
static void update_curr(struct cfs_rq *cfs_rq)
{
struct sched_entity *curr = cfs_rq->curr;
u64 now = rq_of(cfs_rq)->clock;
unsigned long delta_exec;
if (unlikely(!curr))
return;
/*
* Get the amount of time the current task was running
* since the last time we changed load (this cannot
* overflow on 32 bits):
*/
delta_exec = (unsigned long)(now - curr->exec_start);
if (!delta_exec)
return;
....... .......
為什么sched_fair中的delta_exec不用判斷是否小于0,而直接判斷等于0
現(xiàn)在碰到一個問題,多核CPU上,每個CPU的sched_clock_cpu的值不一樣,就出現(xiàn)了CPU0上一會更新為CPU0自己的CLOCK,一會更新為CPU1的CLOCK,但是后者比前者小,結(jié)果減出來是個負數(shù),導(dǎo)致很多地方的進程時間不正確.
各位大狹們多多指教,非常感謝! |
|