Messages in this thread | | | Date | Thu, 24 Feb 2011 12:34:05 +0530 | From | Bharata B Rao <> | Subject | Re: [CFS Bandwidth Control v4 4/7] sched: unthrottle cfs_rq(s) who ran out of quota at period refresh |
| |
On Wed, Feb 23, 2011 at 02:32:12PM +0100, Peter Zijlstra wrote: > On Tue, 2011-02-15 at 19:18 -0800, Paul Turner wrote: > > > +static void unthrottle_cfs_rq(struct cfs_rq *cfs_rq) > > +{ > > + struct rq *rq = rq_of(cfs_rq); > > + struct sched_entity *se; > > + > > + se = cfs_rq->tg->se[cpu_of(rq_of(cfs_rq))]; > > + > > + update_rq_clock(rq); > > + /* (Try to) avoid maintaining share statistics for idle time */ > > + cfs_rq->load_stamp = cfs_rq->load_last = rq->clock_task; > > Ok, so here you try to compensate for some of the weirdness from the > previous patch.. wouldn't it be much saner to fully consider the > throttled things dequeued for the load calculation etc.? > > > + > > + cfs_rq->throttled = 0; > > + for_each_sched_entity(se) { > > + if (se->on_rq) > > + break; > > + > > + cfs_rq = cfs_rq_of(se); > > + enqueue_entity(cfs_rq, se, ENQUEUE_WAKEUP); > > + if (cfs_rq_throttled(cfs_rq)) > > + break; > > That's just weird, it was throttled, you enqueued it but find it > throttled.
se got enqueued to cfs_rq, but we find that cfs_rq is throttled and hence refrain from enqueueing cfs_rq futher.
So essentially enqueing to a throttled cfs_rq is allowed, but a throttled group entitiy can't be enqueued further.
Regards, Bharata.
| |