Messages in this thread Patch in this message | | | Date | Thu, 31 Oct 2019 11:45:33 -0700 | Subject | [PATCH] sched/fair: Do not set skip buddy up the sched hierarchy | From | Josh Don <> |
| |
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; } /* -- 2.23.0.700.g56cf767bdb-goog
| |