Messages in this thread | | | From | Vincent Guittot <> | Date | Mon, 16 Aug 2021 14:56:57 +0200 | Subject | Re: [PATCH 2/2] sched: adjust SCHED_IDLE interactions |
| |
On Mon, 16 Aug 2021 at 14:52, Peter Zijlstra <peterz@infradead.org> wrote: > > On Wed, Aug 11, 2021 at 03:31:49PM +0200, Vincent Guittot wrote: > > On Fri, 30 Jul 2021 at 04:00, Josh Don <joshdon@google.com> wrote: > > > > > @@ -4216,7 +4228,15 @@ place_entity(struct cfs_rq *cfs_rq, struct sched_entity *se, int initial) > > > if (sched_feat(GENTLE_FAIR_SLEEPERS)) > > > thresh >>= 1; > > > > > > - vruntime -= thresh; > > > + /* > > > + * Don't give sleep credit to a SCHED_IDLE entity if we're > > > + * placing it onto a cfs_rq with non SCHED_IDLE entities. > > > + */ > > > + if (!se_is_idle(se) || > > > + cfs_rq->h_nr_running == cfs_rq->idle_h_nr_running) > > I really dislike that second clause, either never do this for idle or > always, but not sometimes when the planets are aligned just right.
That was my point too
> > > Can't this condition above create unfairness between idle entities ? > > idle thread 1 wake up while normal thread is running > > normal thread thread sleeps immediately after > > idle thread 2 wakes up just after and gets some credits compared to the 1st one. > > No. Strictly speaking cfs is unfair here. But it's a really tricky case. > > Consider a task that is running 50% competing against a task that's > running 100%. What's fair in that situation, a 50/50 split, or a 25/75 > split? What if that 50% is 50% of a minute? > > What we do here is fudge the vruntime such that we end up with a 50/50 > split provided the period over which it blocks is less than a slice. > After that it gradually converges to the 'expected' 25/75 split that > results from strict runnable competition. > > By not letting idle tasks participate in this, we avoid idle tasks > 'stealing' the !runnable time and they revert back to strict runnable > competition only. > > > > + vruntime -= thresh; > > > + else > > > + vruntime += 1; > > > } > > > > > > /* ensure we never gain time by being placed backwards. */ > > > -- > > > 2.32.0.554.ge1b32706d8-goog > > >
| |