Messages in this thread | | | From | Vincent Guittot <> | Date | Mon, 4 Nov 2019 15:54:50 +0100 | Subject | Re: [PATCH] sched/fair: Do not set skip buddy up the sched hierarchy |
| |
On Thu, 31 Oct 2019 at 19:45, Josh Don <joshdon@google.com> wrote: > > From: Venkatesh Pallipadi <venki@google.com> > > Setting skip buddy all the way up the hierarchy does not play well > with intra-cgroup yield. One typical usecase of yield is when a > thread in a cgroup wants to yield CPU to another thread within the > same cgroup. For such a case, setting the skip buddy all the way up > the hierarchy is counter-productive, as that results in CPU being > yielded to a task in some other cgroup. > > So, limit the skip effect only to the task requesting it. > > Signed-off-by: Josh Don <joshdon@google.com> > --- > kernel/sched/fair.c | 11 +++++++++-- > 1 file changed, 9 insertions(+), 2 deletions(-) > > diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c > index 682a754ea3e1..52ab06585d7f 100644 > --- a/kernel/sched/fair.c > +++ b/kernel/sched/fair.c > @@ -6647,8 +6647,15 @@ static void set_next_buddy(struct sched_entity *se) > > static void set_skip_buddy(struct sched_entity *se) > { > - for_each_sched_entity(se) > - cfs_rq_of(se)->skip = se; > + /* > + * One typical usecase of yield is when a thread in a cgroup > + * wants to yield CPU to another thread within the same cgroup. > + * For such a case, setting the skip buddy all the way up the > + * hierarchy is counter-productive, as that results in CPU being > + * yielded to a task in some other cgroup. So, only set skip > + * for the task requesting it. > + */ > + cfs_rq_of(se)->skip = se; > }
You should also update __clear_buddies_skip to only clear this skip
> > /* > -- > 2.23.0.700.g56cf767bdb-goog >
| |