From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-16.8 required=3.0 tests=BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 8B68DC4338F for ; Wed, 25 Aug 2021 06:27:53 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 63B5E613A7 for ; Wed, 25 Aug 2021 06:27:53 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S238948AbhHYG2h (ORCPT ); Wed, 25 Aug 2021 02:28:37 -0400 Received: from mx423.baidu.com ([119.249.100.231]:8217 "EHLO mx423.baidu.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S237913AbhHYG2g (ORCPT ); Wed, 25 Aug 2021 02:28:36 -0400 Received: from bjhw-sys-rpm015653cc5.bjhw.baidu.com (bjhw-sys-rpm015653cc5.bjhw.baidu.com [10.227.53.39]) by mx423.baidu.com (Postfix) with ESMTP id 8C2F716E00D50; Wed, 25 Aug 2021 14:27:49 +0800 (CST) Received: from localhost (localhost [127.0.0.1]) by bjhw-sys-rpm015653cc5.bjhw.baidu.com (Postfix) with ESMTP id 7F43DD9932; Wed, 25 Aug 2021 14:27:49 +0800 (CST) From: Li RongQing To: mingo@redhat.com, peterz@infradead.org, juri.lelli@redhat.com, vincent.guittot@linaro.org, dietmar.eggemann@arm.com, rostedt@goodmis.org, bsegall@google.com, mgorman@suse.de, bristot@redhat.com, linux-kernel@vger.kernel.org, lirongqing@baidu.com Subject: [Resend][PATCH] sched/fair: micro-optimize pick_next_entity() Date: Wed, 25 Aug 2021 14:27:49 +0800 Message-Id: <1629872869-19829-1-git-send-email-lirongqing@baidu.com> X-Mailer: git-send-email 1.7.1 Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Only check the skip buddy when next buddy and last buddy are not picked up, this can save the cycles of checking the skip buddy and computation of the second buddy, when next and last buddy will be picked up for example, yield_to_task_fair() set both next and skip buddy Signed-off-by: Li RongQing --- kernel/sched/fair.c | 33 ++++++++++++++++----------------- 1 file changed, 16 insertions(+), 17 deletions(-) diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c index 44c452072a1b..9c6569ddf3eb 100644 --- a/kernel/sched/fair.c +++ b/kernel/sched/fair.c @@ -4503,11 +4503,22 @@ pick_next_entity(struct cfs_rq *cfs_rq, struct sched_entity *curr) se = left; /* ideally we run the leftmost entity */ - /* - * Avoid running the skip buddy, if running something else can - * be done without getting too unfair. - */ - if (cfs_rq->skip && cfs_rq->skip == se) { + + if (cfs_rq->next && wakeup_preempt_entity(cfs_rq->next, left) < 1) { + /* + * Someone really wants this to run. If it's not unfair, run it. + */ + se = cfs_rq->next; + } else if (cfs_rq->last && wakeup_preempt_entity(cfs_rq->last, left) < 1) { + /* + * Prefer last buddy, try to return the CPU to a preempted task. + */ + se = cfs_rq->last; + } else if (cfs_rq->skip && cfs_rq->skip == se) { + /* + * Avoid running the skip buddy, if running something else can + * be done without getting too unfair. + */ struct sched_entity *second; if (se == curr) { @@ -4522,18 +4533,6 @@ pick_next_entity(struct cfs_rq *cfs_rq, struct sched_entity *curr) se = second; } - if (cfs_rq->next && wakeup_preempt_entity(cfs_rq->next, left) < 1) { - /* - * Someone really wants this to run. If it's not unfair, run it. - */ - se = cfs_rq->next; - } else if (cfs_rq->last && wakeup_preempt_entity(cfs_rq->last, left) < 1) { - /* - * Prefer last buddy, try to return the CPU to a preempted task. - */ - se = cfs_rq->last; - } - return se; } -- 2.33.0.69.gc420321.dirty