- 论坛徽章:
- 0
|
给出定义和调用。
struct cfs_rq {
struct load_weight load;
unsigned long nr_running;
u64 exec_clock;
u64 min_vruntime;
u64 pair_start;
。。。
}
sched_fair.c中
static struct sched_entity *
pick_next(struct cfs_rq *cfs_rq, struct sched_entity *se)
{
struct rq *rq = rq_of(cfs_rq);
u64 pair_slice = rq->clock - cfs_rq->pair_start;
if (!cfs_rq->next || pair_slice > sched_slice(cfs_rq, cfs_rq->next)) {
cfs_rq->pair_start = rq->clock;
return se;
}
return cfs_rq->next;
}
============
还有,sched_fair.c中
static inline unsigned long
calc_delta_weight(unsigned long delta, struct sched_entity *se)
{
for_each_sched_entity(se) {
delta = calc_delta_mine(delta,
se->load.weight, &cfs_rq_of(se)->load);
}
return delta;
}
calc_delta_weight() 是算一个se的delta吧?为什么把第一个用calc_delta_mine()算出来的delta再一次带到循环中去,一直循环下去直到遍历到空。
这个函数不明白再干嘛? |
|