Received: by 2002:a05:6a10:6d10:0:0:0:0 with SMTP id gq16csp2340966pxb; Sun, 24 Apr 2022 11:36:04 -0700 (PDT) X-Google-Smtp-Source: ABdhPJyxc1NMDUQADffpG68duIpPNN8mwzOh95sz6uKM07RHDEDgSD4HPbzUdcCrsnS1+VybRT7T X-Received: by 2002:a17:90a:4fe5:b0:1d0:e5e1:5bbc with SMTP id q92-20020a17090a4fe500b001d0e5e15bbcmr27302407pjh.235.1650825364028; Sun, 24 Apr 2022 11:36:04 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1650825364; cv=none; d=google.com; s=arc-20160816; b=qN6IPL0S+XF7ZJl9v/rIAX7qYgfyjaXtMP43AcoxXMm1xMJ+bu51HHN5O4XJA9L2BX WzgnV3hrRXK/wMpwRMkPs2ToeBPqobQ4Qa0PNsBpzrSUVC/YMMo8Zo1ODr4i3YFw2R/X gd69CN7/SwFj/CiWSVgFwryDLdoyauEEBjE9Z0Bbr664YOighZWfxY4UIip5yXTavLVz fCb1z6RN71VBn5umH+mi29dlQFrTQvbu2Gjn5ye+/Gdb5xaiNjzpm0jT3DI1v0mGoB3i 9UyImjh7DLbjHOQhQDuQzxIF0nSmyAKqIOJgKQoarA4GNHjj3seCKKXn637DKRC7uYwe brlA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:message-id:date:subject:cc:to:from; bh=C+RTEc+5lGftbKP1B6uZ8522oFFdjH8MOMzwceleaRY=; b=Tc/2kq3vaoDqemvkW8N+kgrVX81C5K++lyIUUVrMCKGer+ZDEZM1HW5aLVbbr8HQBy 0o0zlyFF2/DIAKiOK61hgLwasfuwUYtBXY+PXbxZWVkmzuD+HaYfzjs/P+1/iO8sSI/H nc/R2HSMtXROnaHcGi/OFT3TB7SE7caTbOZe4dLA0/phdp/jT24cblO8CmDNSWwkIIry e4S3InTqcPaOVpHyVTrB0zhGdFGhvcCO/G3ehDbxjoiB1DNT92AuynA+dggJVB+Fbz72 WHdCEKbeokR8Ka7BmVuPsB9E8ovj9FRuJU1QKdBHqoSu/BXU03gstEJZ7g8N5GxHAyR4 FULg== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=alibaba.com Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id z13-20020a63b90d000000b003aaba22d1casi8904260pge.399.2022.04.24.11.35.48; Sun, 24 Apr 2022 11:36:04 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=alibaba.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S235589AbiDXQlM (ORCPT + 99 others); Sun, 24 Apr 2022 12:41:12 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:45788 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S235178AbiDXQlJ (ORCPT ); Sun, 24 Apr 2022 12:41:09 -0400 Received: from out30-45.freemail.mail.aliyun.com (out30-45.freemail.mail.aliyun.com [115.124.30.45]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id C6506127A51 for ; Sun, 24 Apr 2022 09:38:07 -0700 (PDT) X-Alimail-AntiSpam: AC=PASS;BC=-1|-1;BR=01201311R851e4;CH=green;DM=||false|;DS=||;FP=0|-1|-1|-1|0|-1|-1|-1;HT=e01e04394;MF=cruzzhao@linux.alibaba.com;NM=1;PH=DS;RN=18;SR=0;TI=SMTPD_---0VB2XPHZ_1650818277; Received: from rt2b04371.sqa.tbc.tbsite.net(mailfrom:CruzZhao@linux.alibaba.com fp:SMTPD_---0VB2XPHZ_1650818277) by smtp.aliyun-inc.com(127.0.0.1); Mon, 25 Apr 2022 00:38:03 +0800 From: Cruz Zhao 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, akpm@linux-foundation.org, tglx@linutronix.de, luto@kernel.org, legion@kernel.org, fenghua.yu@intel.com, david@redhat.com, bristot@redhat.com, bigeasy@linutronix.de, ebiederm@xmission.com Cc: linux-kernel@vger.kernel.org Subject: [PATCH] sched/core: Skip sched_core_fork/free() when core sched is disabled Date: Mon, 25 Apr 2022 00:37:56 +0800 Message-Id: <1650818276-129374-1-git-send-email-CruzZhao@linux.alibaba.com> X-Mailer: git-send-email 1.8.3.1 X-Spam-Status: No, score=-9.9 required=5.0 tests=BAYES_00, ENV_AND_HDR_SPF_MATCH,RCVD_IN_DNSWL_NONE,SPF_HELO_NONE,SPF_PASS, UNPARSEABLE_RELAY,USER_IN_DEF_SPF_WL autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org As __put_task_struct() and copy_process() are hot path functions, the call of sched_core_fork/free() will bring overhead when core sched is disabled, and we skip them when core sched is disabled(). Signed-off-by: Cruz Zhao --- include/linux/sched.h | 10 ++++++++++ kernel/fork.c | 9 ++++++--- kernel/sched/sched.h | 10 ---------- 3 files changed, 16 insertions(+), 13 deletions(-) diff --git a/include/linux/sched.h b/include/linux/sched.h index f64f8f2..a2266df 100644 --- a/include/linux/sched.h +++ b/include/linux/sched.h @@ -2406,9 +2406,19 @@ static inline void rseq_syscall(struct pt_regs *regs) extern void sched_core_fork(struct task_struct *p); extern int sched_core_share_pid(unsigned int cmd, pid_t pid, enum pid_type type, unsigned long uaddr); +DECLARE_STATIC_KEY_FALSE(__sched_core_enabled); +static inline bool sched_core_disabled(void) +{ + return !static_branch_unlikely(&__sched_core_enabled); +} + #else static inline void sched_core_free(struct task_struct *tsk) { } static inline void sched_core_fork(struct task_struct *p) { } +static inline bool sched_core_disabled(void) +{ + return true; +} #endif #endif diff --git a/kernel/fork.c b/kernel/fork.c index 0d13baf..611f80b 100644 --- a/kernel/fork.c +++ b/kernel/fork.c @@ -843,7 +843,8 @@ void __put_task_struct(struct task_struct *tsk) exit_creds(tsk); delayacct_tsk_free(tsk); put_signal_struct(tsk->signal); - sched_core_free(tsk); + if (!sched_core_disabled()) + sched_core_free(tsk); free_task(tsk); } EXPORT_SYMBOL_GPL(__put_task_struct); @@ -2381,7 +2382,8 @@ static __latent_entropy struct task_struct *copy_process( klp_copy_process(p); - sched_core_fork(p); + if (!sched_core_disabled()) + sched_core_fork(p); spin_lock(¤t->sighand->siglock); @@ -2469,7 +2471,8 @@ static __latent_entropy struct task_struct *copy_process( return p; bad_fork_cancel_cgroup: - sched_core_free(p); + if (!sched_core_disabled()) + sched_core_free(p); spin_unlock(¤t->sighand->siglock); write_unlock_irq(&tasklist_lock); cgroup_cancel_fork(p, args); diff --git a/kernel/sched/sched.h b/kernel/sched/sched.h index 5b21448..c6aeeda 100644 --- a/kernel/sched/sched.h +++ b/kernel/sched/sched.h @@ -1157,11 +1157,6 @@ static inline bool sched_core_enabled(struct rq *rq) return static_branch_unlikely(&__sched_core_enabled) && rq->core_enabled; } -static inline bool sched_core_disabled(void) -{ - return !static_branch_unlikely(&__sched_core_enabled); -} - /* * Be careful with this function; not for general use. The return value isn't * stable unless you actually hold a relevant rq->__lock. @@ -1257,11 +1252,6 @@ static inline bool sched_core_enabled(struct rq *rq) return false; } -static inline bool sched_core_disabled(void) -{ - return true; -} - static inline raw_spinlock_t *rq_lockp(struct rq *rq) { return &rq->__lock; -- 1.8.3.1