Received: by 2002:a89:2c3:0:b0:1ed:23cc:44d1 with SMTP id d3csp979855lqs; Wed, 6 Mar 2024 02:40:26 -0800 (PST) X-Forwarded-Encrypted: i=3; AJvYcCVjShJL3JyMkbWRQs0xO8zO5n6BdMJuax14ut5nFi5SDE0SdYZg/5lWURTBX0R23+1qAY1wDVAyJQ7zYzK20ZODyj6x/fXAkSnZuAIP2w== X-Google-Smtp-Source: AGHT+IEEuFYm2qNlzDokN51NjVFhrT8yF/jJzMN9JqVH/Q6cKF1VJ5BAUuLtJYBAZOkiTy6kTIC3 X-Received: by 2002:a05:6a20:7d92:b0:1a0:f5e6:110d with SMTP id v18-20020a056a207d9200b001a0f5e6110dmr5103561pzj.7.1709721626320; Wed, 06 Mar 2024 02:40:26 -0800 (PST) ARC-Seal: i=2; a=rsa-sha256; t=1709721626; cv=pass; d=google.com; s=arc-20160816; b=oyBrCpGCtzJJ1XKW0tT7tCMEKsVZtG3IFjK4zZ1V44C1m+Qyb4IQncOEJGL+9U/63c 9cYn9dKuUS9aQP0DnKOYWvynUQbXMsU/8O+55pDuj6c9SdGVOlkKi95aR1EEpTT8jUSp XioOnvALPF949hwF8fFcojNshiLJsy/Zk9lKezYfwHulGH09aW5Lb1bLX62sk1aTD78e 4OV+4GeqiCHh3chVWa3uQ+rJiLtSl504w96oGEy/siAm+6JTS9WiNFzCJljYTrAl778g UWd2ZYnBasViuQ8pwbqGdao3zBVD6eaqI3DPFsnaa5qX2oyZnPDok6ZBPL9UrP+D3xYh yA6A== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-transfer-encoding:mime-version:list-unsubscribe :list-subscribe:list-id:precedence:references:in-reply-to:message-id :date:subject:cc:to:from:dkim-signature; bh=qQV8Dr8+EG5mE3UrjJrOfthl6SzI26Jck4kVUsicktw=; fh=uS0ouBPNIPXjb8nmWljjgaNTubJr34yXKa1QQSX4Zxs=; b=XO4LOjXQ4T4kJhaDwwaJwBvGTZc9HEoS6rrh0qbHBKLa/jLXBSAfYX6bx4ay9ldZxU P9J26MQM4Q2tIfYg97zRb/0GlYlGy+AqPtkyK1lJEXBzZVUI11VVBofBcG1uq7QKNRlK 6rxSPgy9wAHR3va4owZ4AjGKt5db0Tom2vPXwVWKeyIA5m+BWwa7+Wa3rj7Rzxyh2u6W kx3bE9AzU4qrnpUrh8N+a+Q3preE4y4HXaOYWm8lxBWj1kq+w9Bs3SrUT98FL41+o8gq bUqub63WcpQlZyBydeZ+B3PNfHg4PHeC3T5uVKFPx3lfwUcywZ7rQ3G0HcNJyY7yxIbT Jn9A==; dara=google.com ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=LOvf1xpv; arc=pass (i=1 spf=pass spfdomain=intel.com dkim=pass dkdomain=intel.com dmarc=pass fromdomain=intel.com); spf=pass (google.com: domain of linux-kernel+bounces-93779-linux.lists.archive=gmail.com@vger.kernel.org designates 139.178.88.99 as permitted sender) smtp.mailfrom="linux-kernel+bounces-93779-linux.lists.archive=gmail.com@vger.kernel.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Return-Path: Received: from sv.mirrors.kernel.org (sv.mirrors.kernel.org. [139.178.88.99]) by mx.google.com with ESMTPS id f22-20020a631f16000000b005dc8762dce5si11682498pgf.51.2024.03.06.02.40.26 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 06 Mar 2024 02:40:26 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel+bounces-93779-linux.lists.archive=gmail.com@vger.kernel.org designates 139.178.88.99 as permitted sender) client-ip=139.178.88.99; Authentication-Results: mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=LOvf1xpv; arc=pass (i=1 spf=pass spfdomain=intel.com dkim=pass dkdomain=intel.com dmarc=pass fromdomain=intel.com); spf=pass (google.com: domain of linux-kernel+bounces-93779-linux.lists.archive=gmail.com@vger.kernel.org designates 139.178.88.99 as permitted sender) smtp.mailfrom="linux-kernel+bounces-93779-linux.lists.archive=gmail.com@vger.kernel.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: from smtp.subspace.kernel.org (wormhole.subspace.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by sv.mirrors.kernel.org (Postfix) with ESMTPS id F239B286905 for ; Wed, 6 Mar 2024 10:40:25 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id C151D605BE; Wed, 6 Mar 2024 10:40:18 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b="LOvf1xpv" Received: from mgamail.intel.com (mgamail.intel.com [192.198.163.15]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 0D43A5FDDC; Wed, 6 Mar 2024 10:40:15 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=192.198.163.15 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1709721617; cv=none; b=hU01BQa4fmOko1yWPMxU7rmbBf0VVt39sZ04IG5dadyOSsRuBZG8sPhwWLiDF3yPZLNoPtXVOtimhBfPkz1VV2hrXsP6FzjBPawHhjeqUhT+m1pKs/ttuqUiksCS9GWub+cp2vgVZiV6cVNzY3xpDVhyy32kH9/sq4/9rwdyAEU= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1709721617; c=relaxed/simple; bh=ytJVUPhnNOpLuteR3P9HW/TY0UWzPBgOZqqHRWr+b7U=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=IYgFXfHJ3tGHpW8nF0g+GC+Kt8SK6GdZdqMsfnMVGDAqzy+27Qo5sxfNAgFHycav3/N9hJMNIJAM16SccDJAquKl5JExQXM3dXHjy7Tj1OELC43sE13Lef/p2ZEJe1QGsFUGcLLhJk0q5uuxE2Gemyg3u7YAaIRmEA9Crp1Epsc= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=intel.com; spf=pass smtp.mailfrom=intel.com; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b=LOvf1xpv; arc=none smtp.client-ip=192.198.163.15 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=intel.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=intel.com DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1709721616; x=1741257616; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=ytJVUPhnNOpLuteR3P9HW/TY0UWzPBgOZqqHRWr+b7U=; b=LOvf1xpvBPnKtxkj93sGzS2u/48wszrZsVOc/Kwae74cgL0CXb06/oDC Ay/cIYt06Z9JntQaRuqW1g76NZk2GZdFHvvjLc7IHtInMpjE7r6VErPQ0 Xr/MRbqyabUEJ1uk10WhTPGHtnzxrdzJj6SISLrvhPCL1+rymj3loX4KV rux4YryGaWF6cb6L6jPl0HoO75Lm3D6GTtKG1mB7OedlPtJ4KA3l/uRmk j5UjqNPxkArgE+M2ZKl1nRF6Hx/NUCHO15C+2PYIMNpqSsWkyPanzAoam EUvDIhNdVo7ffHLwNqb2Y5rMpOOe3mEvhBBHXTaFtSgvudrndHwlCwtA0 w==; X-IronPort-AV: E=McAfee;i="6600,9927,11004"; a="4497564" X-IronPort-AV: E=Sophos;i="6.06,208,1705392000"; d="scan'208";a="4497564" Received: from fmviesa008.fm.intel.com ([10.60.135.148]) by fmvoesa109.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 06 Mar 2024 02:39:47 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.06,208,1705392000"; d="scan'208";a="9803667" Received: from ksznyce-mobl1.ger.corp.intel.com (HELO wieczorr-mobl1.intel.com) ([10.213.25.14]) by fmviesa008-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 06 Mar 2024 02:39:45 -0800 From: Maciej Wieczor-Retman To: Fenghua Yu , Reinette Chatre , Shuah Khan Cc: ilpo.jarvinen@linux.intel.com, tony.luck@intel.com, linux-kernel@vger.kernel.org, linux-kselftest@vger.kernel.org Subject: [PATCH 1/4] selftests/resctrl: Adjust effective L3 cache size with SNC enabled Date: Wed, 6 Mar 2024 11:39:18 +0100 Message-ID: X-Mailer: git-send-email 2.44.0 In-Reply-To: References: Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Sub-NUMA Cluster divides CPUs sharing an L3 cache into separate NUMA nodes. Systems may support splitting into either two or four nodes. When SNC mode is enabled the effective amount of L3 cache available for allocation is divided by the number of nodes per L3. Detect which SNC mode is active by comparing the number of CPUs that share a cache with CPU0, with the number of CPUs on node0. Signed-off-by: Tony Luck Co-developed-by: Maciej Wieczor-Retman Signed-off-by: Maciej Wieczor-Retman --- tools/testing/selftests/resctrl/resctrl.h | 4 ++ tools/testing/selftests/resctrl/resctrlfs.c | 59 +++++++++++++++++++++ 2 files changed, 63 insertions(+) diff --git a/tools/testing/selftests/resctrl/resctrl.h b/tools/testing/selftests/resctrl/resctrl.h index 2051bd135e0d..41811e87f81c 100644 --- a/tools/testing/selftests/resctrl/resctrl.h +++ b/tools/testing/selftests/resctrl/resctrl.h @@ -11,6 +11,7 @@ #include #include #include +#include #include #include #include @@ -43,6 +44,8 @@ #define DEFAULT_SPAN (250 * MB) +#define MAX_SNC 4 + #define PARENT_EXIT() \ do { \ kill(ppid, SIGKILL); \ @@ -129,6 +132,7 @@ extern pid_t bm_pid, ppid; extern char llc_occup_path[1024]; +int snc_ways(void); int get_vendor(void); bool check_resctrlfs_support(void); int filter_dmesg(void); diff --git a/tools/testing/selftests/resctrl/resctrlfs.c b/tools/testing/selftests/resctrl/resctrlfs.c index 1cade75176eb..e4d3624a8817 100644 --- a/tools/testing/selftests/resctrl/resctrlfs.c +++ b/tools/testing/selftests/resctrl/resctrlfs.c @@ -156,6 +156,63 @@ int get_domain_id(const char *resource, int cpu_no, int *domain_id) return 0; } +/* + * Count number of CPUs in a /sys bit map + */ +static unsigned int count_sys_bitmap_bits(char *name) +{ + FILE *fp = fopen(name, "r"); + int count = 0, c; + + if (!fp) + return 0; + + while ((c = fgetc(fp)) != EOF) { + if (!isxdigit(c)) + continue; + switch (c) { + case 'f': + count++; + case '7': case 'b': case 'd': case 'e': + count++; + case '3': case '5': case '6': case '9': case 'a': case 'c': + count++; + case '1': case '2': case '4': case '8': + count++; + } + } + fclose(fp); + + return count; +} + +/* + * Detect SNC by comparing #CPUs in node0 with #CPUs sharing LLC with CPU0. + * If some CPUs are offline the numbers may not be exact multiples of each + * other. Any offline CPUs on node0 will be also gone from shared_cpu_map of + * CPU0 but offline CPUs from other nodes will only make the cache_cpus value + * lower. Still try to get the ratio right by preventing the second possibility. + */ +int snc_ways(void) +{ + int node_cpus, cache_cpus, i; + + node_cpus = count_sys_bitmap_bits("/sys/devices/system/node/node0/cpumap"); + cache_cpus = count_sys_bitmap_bits("/sys/devices/system/cpu/cpu0/cache/index3/shared_cpu_map"); + + if (!node_cpus || !cache_cpus) { + fprintf(stderr, "Warning could not determine Sub-NUMA Cluster mode\n"); + return 1; + } + + for (i = 1; i <= MAX_SNC ; i++) { + if (i * node_cpus >= cache_cpus) + return i; + } + + return 1; +} + /* * get_cache_size - Get cache size for a specified CPU * @cpu_no: CPU number @@ -211,6 +268,8 @@ int get_cache_size(int cpu_no, const char *cache_type, unsigned long *cache_size break; } + if (cache_num == 3) + *cache_size /= snc_ways(); return 0; } -- 2.44.0