From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751827AbdFHTlL (ORCPT ); Thu, 8 Jun 2017 15:41:11 -0400 Received: from mga06.intel.com ([134.134.136.31]:56427 "EHLO mga06.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751809AbdFHTlK (ORCPT ); Thu, 8 Jun 2017 15:41:10 -0400 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.39,315,1493708400"; d="scan'208";a="97236585" Subject: [PATCH] x86, sched: allow topolgies where NUMA nodes share an LLC To: linux-kernel@vger.kernel.org Cc: Dave Hansen , tony.luck@intel.com, tim.c.chen@linux.intel.com, peterz@infradead.org, bp@alien8.de, rientjes@google.com, imammedo@redhat.com, torvalds@linux-foundation.org, prarit@redhat.com, toshi.kani@hp.com, brice.goglin@gmail.com, hpa@linux.intel.com, mingo@kernel.org From: Dave Hansen Date: Thu, 08 Jun 2017 12:39:28 -0700 Message-Id: <20170608193928.A3B5497F@viggo.jf.intel.com> Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Dave Hansen Our SMP boot code has a series of assumptions about what NUMA nodes are that are enforced via topology_sane(). Once upon a time, we verified that a CPU package only contained a single node (fixed in cebf15eb0). Today, we verify that SMT siblings and LLCs do not span nodes. The SMT siblings assumption is safe, but the LLC is violated on current hardware. Remove the "sanity" check on LLC spanning NUMA nodes. Also make sure to set 'x86_has_numa_in_package = true' which ensures that we use the x86_numa_in_package_topology[]. The default topology layers NUMA "outside" of the cache, which is wrong when the cache spans multiple nodes. This fixes the warnings, but it does theoretically throw away the LLC from being consulted in scheduling decisions, if the LLC is shared at a boundary that is not also a NUMA node. Signed-off-by: Dave Hansen Cc: Luck, Tony Cc: Tim Chen Cc: Peter Zijlstra (Intel) Cc: Borislav Petkov Cc: David Rientjes Cc: Igor Mammedov Cc: Linus Torvalds Cc: Prarit Bhargava Cc: Toshi Kani Cc: brice.goglin@gmail.com Cc: "H. Peter Anvin" Cc: Ingo Molnar --- b/arch/x86/kernel/smpboot.c | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff -puN arch/x86/kernel/smpboot.c~x86-numa-nodes-share-llc arch/x86/kernel/smpboot.c --- a/arch/x86/kernel/smpboot.c~x86-numa-nodes-share-llc 2017-06-01 14:46:40.562159566 -0700 +++ b/arch/x86/kernel/smpboot.c 2017-06-01 15:01:43.994157313 -0700 @@ -460,7 +460,7 @@ static bool match_llc(struct cpuinfo_x86 if (per_cpu(cpu_llc_id, cpu1) != BAD_APICID && per_cpu(cpu_llc_id, cpu1) == per_cpu(cpu_llc_id, cpu2)) - return topology_sane(c, o, "llc"); + return true; return false; } @@ -520,7 +520,8 @@ static struct sched_domain_topology_leve /* * Set if a package/die has multiple NUMA nodes inside. - * AMD Magny-Cours and Intel Cluster-on-Die have this. + * AMD Magny-Cours, Intel Cluster-on-Die, and Intel + * Sub-NUMA Clustering have this. */ static bool x86_has_numa_in_package; @@ -548,9 +549,13 @@ void set_cpu_sibling_map(int cpu) if ((i == cpu) || (has_smt && match_smt(c, o))) link_mask(topology_sibling_cpumask, cpu, i); - if ((i == cpu) || (has_mp && match_llc(c, o))) - link_mask(cpu_llc_shared_mask, cpu, i); - + if ((i == cpu) || (has_mp && match_llc(c, o))) { + /* LLC may be shared across NUMA nodes */ + if (topology_same_node(c, o)) + link_mask(cpu_llc_shared_mask, cpu, i); + else + x86_has_numa_in_package = true; + } } /* _