Received: by 2002:a25:ad19:0:0:0:0:0 with SMTP id y25csp11167099ybi; Thu, 25 Jul 2019 11:08:39 -0700 (PDT) X-Google-Smtp-Source: APXvYqyTgaK2v8/msPtEBjll/mZhx3Ti/FhdBlV6yR07IetKIU6T4XMHmcXPxGreR8GSwy7jPEUu X-Received: by 2002:a17:902:aa8a:: with SMTP id d10mr93971224plr.154.1564078119249; Thu, 25 Jul 2019 11:08:39 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1564078119; cv=none; d=google.com; s=arc-20160816; b=Onbb8AL7IQPruMoKI2CFavGjI8G8KgDHygD4XYLpEd8XzleVIVZhmfBiRurGK8fj4I Kgmyp+bGmyW1EbdATsXHOAF7imZ/w+pbhAHS4WLjTb2+R0Ep/2BYoZRFY7g2P+ht6dWf xj42QgxkzGx38NrUCiuZg6jBtQavEbzkr23227ggmcjSTvHlJYtEA/YBTfLo9U5pMFpQ 2WlSCIsUzK3lAYBpN/80PeGo8hBfCG/1u9UuocsQ5eDNx2U5KvPJXyxnQ/Pt84wSqFwl Oiu8ehgODMCiV2UIYTltNAToP/pfpd90DbF1ahhdMaNt7h6+wlKna6QOGtBUkaD9+Jhv oBNg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-disposition :content-transfer-encoding:mime-version:robot-unsubscribe:robot-id :git-commit-id:subject:to:references:in-reply-to:reply-to:cc :message-id:from:date:dkim-signature:dkim-filter; bh=M8MSNdNT+I3OhyA1i0rnHeD2OKz70NAwEAGu3jLtLLY=; b=cMxI7CXeNMp6gBFTJjBuHHQS69+czR+fIEw3jIQfXs9jxhKS8xZ0wYOWK1WaCF+rBZ NOliCjjz5TPJqMyXULGlYKaoojAVWbK36AGTTjiulA8OBk6qG+RZKHyBqhqKYmC3Nv88 8PmDiswFWQ9hpYyTLerF4Sbo9RhFelCzMkbyfubv72W2homKLxf2/qg61JAxXqaZ2ekR RtJ1newuJKLB5MdbJO6SbLm+5Xe77/492GfNgnYHyPh/Nt3x8MM1Lict2fL4r4azmH4R GPLuNHeW/ln3M877aeEesjmoqk6e2LVKHW6dYq2vGmmwEzVySqp6qK/pOcjkc/rWva1i 94gA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@zytor.com header.s=2019071901 header.b=uPRPooei; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=zytor.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id t184si18091879pgd.211.2019.07.25.11.08.24; Thu, 25 Jul 2019 11:08:39 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@zytor.com header.s=2019071901 header.b=uPRPooei; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=zytor.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2388062AbfGYQSx (ORCPT + 99 others); Thu, 25 Jul 2019 12:18:53 -0400 Received: from terminus.zytor.com ([198.137.202.136]:48885 "EHLO terminus.zytor.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2387564AbfGYQSx (ORCPT ); Thu, 25 Jul 2019 12:18:53 -0400 Received: from terminus.zytor.com (localhost [127.0.0.1]) by terminus.zytor.com (8.15.2/8.15.2) with ESMTPS id x6PGIHv11075655 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384 bits=256 verify=NO); Thu, 25 Jul 2019 09:18:17 -0700 DKIM-Filter: OpenDKIM Filter v2.11.0 terminus.zytor.com x6PGIHv11075655 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=zytor.com; s=2019071901; t=1564071497; bh=M8MSNdNT+I3OhyA1i0rnHeD2OKz70NAwEAGu3jLtLLY=; h=Date:From:Cc:Reply-To:In-Reply-To:References:To:Subject:From; b=uPRPooeiEFyjdZDOog8mOnKt1IKh4y1Y3sg3W0itgTjdxrKVk0mWYreHJpe8eQHqb 0pC3b3VMtC4pvDoPmuEcWRT+kYD9SzZvC0NmrhvRVr/hclUKW/Hai6sAUU6sD57YkN dnBOR+zrEI8m4NDxVKNMLs3ujPwTOEzRJqBskWHEoBGtSpj3Zb04B0IkJk6nT0+wdL r/xNY/hcB4aSRqlRsoyXSXAIJQBekaQN+1OXAOtZQfqeTC6YZLWL+RuSuSHOr0zDUS 7EcAL3zXC14RqHEKHDm0KudY7AaJJaG1gIlfK5kuOw8l2NwGnF93q6UcKiZ6E5aZH0 dUuQGWpxXk0ZA== Received: (from tipbot@localhost) by terminus.zytor.com (8.15.2/8.15.2/Submit) id x6PGIFSu1075651; Thu, 25 Jul 2019 09:18:15 -0700 Date: Thu, 25 Jul 2019 09:18:15 -0700 X-Authentication-Warning: terminus.zytor.com: tipbot set sender to tipbot@zytor.com using -f From: tip-bot for Wanpeng Li Message-ID: Cc: torvalds@linux-foundation.org, srikar@linux.vnet.ibm.com, frederic@kernel.org, peterz@infradead.org, mingo@kernel.org, hpa@zytor.com, tglx@linutronix.de, wanpengli@tencent.com, linux-kernel@vger.kernel.org Reply-To: torvalds@linux-foundation.org, srikar@linux.vnet.ibm.com, peterz@infradead.org, frederic@kernel.org, hpa@zytor.com, mingo@kernel.org, tglx@linutronix.de, linux-kernel@vger.kernel.org, wanpengli@tencent.com In-Reply-To: <1561711901-4755-2-git-send-email-wanpengli@tencent.com> References: <1561711901-4755-2-git-send-email-wanpengli@tencent.com> To: linux-tip-commits@vger.kernel.org Subject: [tip:sched/core] sched/isolation: Prefer housekeeping CPU in local node Git-Commit-ID: e0e8d4911ed2695b12c3a01c15634000ede9bc73 X-Mailer: tip-git-log-daemon Robot-ID: Robot-Unsubscribe: Contact to get blacklisted from these emails MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Content-Type: text/plain; charset=UTF-8 Content-Disposition: inline X-Spam-Status: No, score=-0.3 required=5.0 tests=ALL_TRUSTED,BAYES_00, DATE_IN_FUTURE_96_Q,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF autolearn=no autolearn_force=no version=3.4.2 X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on terminus.zytor.com Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Commit-ID: e0e8d4911ed2695b12c3a01c15634000ede9bc73 Gitweb: https://git.kernel.org/tip/e0e8d4911ed2695b12c3a01c15634000ede9bc73 Author: Wanpeng Li AuthorDate: Fri, 28 Jun 2019 16:51:41 +0800 Committer: Ingo Molnar CommitDate: Thu, 25 Jul 2019 15:51:55 +0200 sched/isolation: Prefer housekeeping CPU in local node In real product setup, there will be houseeking CPUs in each nodes, it is prefer to do housekeeping from local node, fallback to global online cpumask if failed to find houseeking CPU from local node. Signed-off-by: Wanpeng Li Signed-off-by: Peter Zijlstra (Intel) Reviewed-by: Frederic Weisbecker Reviewed-by: Srikar Dronamraju Cc: Linus Torvalds Cc: Peter Zijlstra Cc: Thomas Gleixner Link: https://lkml.kernel.org/r/1561711901-4755-2-git-send-email-wanpengli@tencent.com Signed-off-by: Ingo Molnar --- kernel/sched/isolation.c | 12 ++++++++++-- kernel/sched/sched.h | 8 +++++--- kernel/sched/topology.c | 20 ++++++++++++++++++++ 3 files changed, 35 insertions(+), 5 deletions(-) diff --git a/kernel/sched/isolation.c b/kernel/sched/isolation.c index ccb28085b114..9fcb2a695a41 100644 --- a/kernel/sched/isolation.c +++ b/kernel/sched/isolation.c @@ -22,9 +22,17 @@ EXPORT_SYMBOL_GPL(housekeeping_enabled); int housekeeping_any_cpu(enum hk_flags flags) { - if (static_branch_unlikely(&housekeeping_overridden)) - if (housekeeping_flags & flags) + int cpu; + + if (static_branch_unlikely(&housekeeping_overridden)) { + if (housekeeping_flags & flags) { + cpu = sched_numa_find_closest(housekeeping_mask, smp_processor_id()); + if (cpu < nr_cpu_ids) + return cpu; + return cpumask_any_and(housekeeping_mask, cpu_online_mask); + } + } return smp_processor_id(); } EXPORT_SYMBOL_GPL(housekeeping_any_cpu); diff --git a/kernel/sched/sched.h b/kernel/sched/sched.h index aaca0e743776..16126efd14ed 100644 --- a/kernel/sched/sched.h +++ b/kernel/sched/sched.h @@ -1262,16 +1262,18 @@ enum numa_topology_type { extern enum numa_topology_type sched_numa_topology_type; extern int sched_max_numa_distance; extern bool find_numa_distance(int distance); -#endif - -#ifdef CONFIG_NUMA extern void sched_init_numa(void); extern void sched_domains_numa_masks_set(unsigned int cpu); extern void sched_domains_numa_masks_clear(unsigned int cpu); +extern int sched_numa_find_closest(const struct cpumask *cpus, int cpu); #else static inline void sched_init_numa(void) { } static inline void sched_domains_numa_masks_set(unsigned int cpu) { } static inline void sched_domains_numa_masks_clear(unsigned int cpu) { } +static inline int sched_numa_find_closest(const struct cpumask *cpus, int cpu) +{ + return nr_cpu_ids; +} #endif #ifdef CONFIG_NUMA_BALANCING diff --git a/kernel/sched/topology.c b/kernel/sched/topology.c index f751ce0b783e..4eea2c9bc732 100644 --- a/kernel/sched/topology.c +++ b/kernel/sched/topology.c @@ -1724,6 +1724,26 @@ void sched_domains_numa_masks_clear(unsigned int cpu) } } +/* + * sched_numa_find_closest() - given the NUMA topology, find the cpu + * closest to @cpu from @cpumask. + * cpumask: cpumask to find a cpu from + * cpu: cpu to be close to + * + * returns: cpu, or nr_cpu_ids when nothing found. + */ +int sched_numa_find_closest(const struct cpumask *cpus, int cpu) +{ + int i, j = cpu_to_node(cpu); + + for (i = 0; i < sched_domains_numa_levels; i++) { + cpu = cpumask_any_and(cpus, sched_domains_numa_masks[i][j]); + if (cpu < nr_cpu_ids) + return cpu; + } + return nr_cpu_ids; +} + #endif /* CONFIG_NUMA */ static int __sdt_alloc(const struct cpumask *cpu_map)