【WALT】WALT入口 update_task_ravg() 代码详解
代码版本:Linux4.9 android-msm-crosshatch-4.9-android12
代码展示
void update_task_ravg(struct task_struct *p, struct rq *rq, int event,
u64 wallclock, u64 irqtime) {
u64 old_window_start;
// ⑴ 判断是否进入 WALT 算法
if (!rq->window_start || sched_disable_window_stats ||
p->ravg.mark_start == wallclock)
return;
lockdep_assert_held(&rq->lock);
// ⑵ 获取 WALT 算法中上一个窗口的开始时间
old_window_start = update_window_start(rq, wallclock, event);
// ⑶ 如果任务刚初始化结束,不进入 WALT 算法,进入 `done`
if (!p->ravg.mark_start) {
update_task_cpu_cycles(p, cpu_of(rq), wallclock);
goto done;
}
// ⑷ 更新任务及 CPU 的 cycles
update_task_rq_cpu_cycles(p, rq, event, wallclock, irqtime);
// ⑸ 更新任务及 CPU 的 demand 及 pred_demand
update_task_demand(p, rq, event, wallclock);
// ⑹ 更新 CPU 的 busy time
update_cpu_busy_time(p, rq, event, wallclock,