public inbox for linux-kselftest@vger.kernel.org
 help / color / mirror / Atom feed
From: "Ilpo Järvinen" <ilpo.jarvinen@linux.intel.com>
To: linux-kselftest@vger.kernel.org,
	"Reinette Chatre" <reinette.chatre@intel.com>,
	"Shuah Khan" <shuah@kernel.org>,
	"Shaopeng Tan" <tan.shaopeng@jp.fujitsu.com>,
	"Maciej Wieczór-Retman" <maciej.wieczor-retman@intel.com>,
	"Fenghua Yu" <fenghua.yu@intel.com>
Cc: linux-kernel@vger.kernel.org,
	"Ilpo Järvinen" <ilpo.jarvinen@linux.intel.com>
Subject: [PATCH v2 25/26] selftests/resctrl: Get domain id from cache id
Date: Mon, 20 Nov 2023 13:13:39 +0200	[thread overview]
Message-ID: <20231120111340.7805-26-ilpo.jarvinen@linux.intel.com> (raw)
In-Reply-To: <20231120111340.7805-1-ilpo.jarvinen@linux.intel.com>

Domain id is acquired differently depending on CPU. AMD tests use id
from L3 cache, whereas CPUs from other vendors base the id on topology
package id. In order to support L2 CAT test, this has to be
generalized.

The driver side code seems to get the domain ids from cache ids so the
approach used by the AMD branch seems to match the kernel-side code. It
will also work with L2 domain IDs as long as the cache level is
generalized.

Using the topology id was always fragile due to mismatch with the
kernel-side way to acquire the domain id. It got incorrect domain id,
e.g., when Cluster-on-Die (CoD) is enabled for CPU (but CoD is not well
suited for resctrl in the first place so it has not been a big issue if
tests don't work correctly with it).

Taking all the above into account, generalize acquiring the domain id
by taking it from the cache id and do not hard-code the cache level.

Signed-off-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
---
 tools/testing/selftests/resctrl/resctrl.h     |  2 +-
 tools/testing/selftests/resctrl/resctrl_val.c |  4 +--
 tools/testing/selftests/resctrl/resctrlfs.c   | 27 ++++++++++++-------
 3 files changed, 21 insertions(+), 12 deletions(-)

diff --git a/tools/testing/selftests/resctrl/resctrl.h b/tools/testing/selftests/resctrl/resctrl.h
index 280ab6b6bd07..9b49065cc6da 100644
--- a/tools/testing/selftests/resctrl/resctrl.h
+++ b/tools/testing/selftests/resctrl/resctrl.h
@@ -124,7 +124,7 @@ extern char llc_occup_path[1024];
 int get_vendor(void);
 bool check_resctrlfs_support(void);
 int filter_dmesg(void);
-int get_domain_id(int cpu_no, int *domain_id);
+int get_domain_id(const char *resource, int cpu_no, int *domain_id);
 int mount_resctrlfs(void);
 int umount_resctrlfs(void);
 int validate_bw_report_request(char *bw_report);
diff --git a/tools/testing/selftests/resctrl/resctrl_val.c b/tools/testing/selftests/resctrl/resctrl_val.c
index f278f5c9195c..5a072adfe8d6 100644
--- a/tools/testing/selftests/resctrl/resctrl_val.c
+++ b/tools/testing/selftests/resctrl/resctrl_val.c
@@ -415,7 +415,7 @@ static void initialize_mem_bw_resctrl(const char *ctrlgrp, const char *mongrp,
 {
 	int domain_id;
 
-	if (get_domain_id(cpu_no, &domain_id) < 0) {
+	if (get_domain_id("MB", cpu_no, &domain_id) < 0) {
 		perror("Could not get domain ID");
 		return;
 	}
@@ -584,7 +584,7 @@ static void initialize_llc_occu_resctrl(const char *ctrlgrp, const char *mongrp,
 {
 	int domain_id;
 
-	if (get_domain_id(cpu_no, &domain_id) < 0) {
+	if (get_domain_id("L3", cpu_no, &domain_id) < 0) {
 		perror("# Could not get domain ID");
 		return;
 	}
diff --git a/tools/testing/selftests/resctrl/resctrlfs.c b/tools/testing/selftests/resctrl/resctrlfs.c
index c173e0fa5c94..5ca3022d8aa6 100644
--- a/tools/testing/selftests/resctrl/resctrlfs.c
+++ b/tools/testing/selftests/resctrl/resctrlfs.c
@@ -111,28 +111,37 @@ static int get_cache_level(const char *cache_type)
 	return -1;
 }
 
+static int get_resource_cache_level(const char *resource)
+{
+	/* "MB" use L3 (LLC) as resource */
+	if (!strcmp(resource, "MB"))
+		return 3;
+	return get_cache_level(resource);
+}
+
 /*
  * get_domain_id - Get resctrl domain ID for a specified CPU
+ * @resource:	resource name
  * @cpu_no:	CPU number
  * @domain_id:	domain ID (cache ID; for MB, L3 cache ID)
  *
  * Return: >= 0 on success, < 0 on failure.
  */
-int get_domain_id(int cpu_no, int *domain_id)
+int get_domain_id(const char *resource, int cpu_no, int *domain_id)
 {
 	char phys_pkg_path[1024];
+	int cache_num;
 	FILE *fp;
 
-	if (get_vendor() == ARCH_AMD)
-		sprintf(phys_pkg_path, "%s%d/cache/index3/id",
-			PHYS_ID_PATH, cpu_no);
-	else
-		sprintf(phys_pkg_path, "%s%d/topology/physical_package_id",
-			PHYS_ID_PATH, cpu_no);
+	cache_num = get_resource_cache_level(resource);
+	if (cache_num < 0)
+		return cache_num;
+
+	sprintf(phys_pkg_path, "%s%d/cache/index%d/id", PHYS_ID_PATH, cpu_no, cache_num);
 
 	fp = fopen(phys_pkg_path, "r");
 	if (!fp) {
-		perror("Failed to open physical_package_id");
+		perror("Failed to open cache id file");
 
 		return -1;
 	}
@@ -532,7 +541,7 @@ int write_schemata(char *ctrlgrp, char *schemata, int cpu_no, const char *resour
 		return -1;
 	}
 
-	if (get_domain_id(cpu_no, &domain_id) < 0) {
+	if (get_domain_id(resource, cpu_no, &domain_id) < 0) {
 		sprintf(reason, "Failed to get domain ID");
 		ret = -1;
 
-- 
2.30.2


  parent reply	other threads:[~2023-11-20 11:17 UTC|newest]

Thread overview: 62+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-11-20 11:13 [PATCH v2 00/26] selftests/resctrl: CAT test improvements & generalized test framework Ilpo Järvinen
2023-11-20 11:13 ` [PATCH v2 01/26] selftests/resctrl: Don't use ctrlc_handler() outside signal handling Ilpo Järvinen
2023-11-28 22:09   ` Reinette Chatre
2023-11-20 11:13 ` [PATCH v2 02/26] selftests/resctrl: Split fill_buf to allow tests finer-grained control Ilpo Järvinen
2023-11-28 22:10   ` Reinette Chatre
2023-12-07 14:04     ` Ilpo Järvinen
2023-11-20 11:13 ` [PATCH v2 03/26] selftests/resctrl: Refactor fill_buf functions Ilpo Järvinen
2023-11-28 22:10   ` Reinette Chatre
2023-11-20 11:13 ` [PATCH v2 04/26] selftests/resctrl: Refactor get_cbm_mask() and rename to get_full_cbm() Ilpo Järvinen
2023-11-28 22:11   ` Reinette Chatre
2023-11-20 11:13 ` [PATCH v2 05/26] selftests/resctrl: Mark get_cache_size() cache_type const Ilpo Järvinen
2023-11-28 22:11   ` Reinette Chatre
2023-11-20 11:13 ` [PATCH v2 06/26] selftests/resctrl: Create cache_portion_size() helper Ilpo Järvinen
2023-11-28 22:11   ` Reinette Chatre
2023-11-20 11:13 ` [PATCH v2 07/26] selftests/resctrl: Exclude shareable bits from schemata in CAT test Ilpo Järvinen
2023-11-28 22:12   ` Reinette Chatre
2023-11-20 11:13 ` [PATCH v2 08/26] selftests/resctrl: Split measure_cache_vals() Ilpo Järvinen
2023-11-28 22:13   ` Reinette Chatre
2023-12-07 14:32     ` Ilpo Järvinen
2023-12-07 18:02       ` Reinette Chatre
2023-12-07 18:33         ` Ilpo Järvinen
2023-12-07 18:35           ` Reinette Chatre
2023-11-20 11:13 ` [PATCH v2 09/26] selftests/resctrl: Split show_cache_info() to test specific and generic parts Ilpo Järvinen
2023-11-28 22:13   ` Reinette Chatre
2023-11-20 11:13 ` [PATCH v2 10/26] selftests/resctrl: Remove unnecessary __u64 -> unsigned long conversion Ilpo Järvinen
2023-11-28 22:14   ` Reinette Chatre
2023-11-20 11:13 ` [PATCH v2 11/26] selftests/resctrl: Remove nested calls in perf event handling Ilpo Järvinen
2023-11-28 22:15   ` Reinette Chatre
2023-11-20 11:13 ` [PATCH v2 12/26] selftests/resctrl: Consolidate naming of perf event related things Ilpo Järvinen
2023-11-28 22:15   ` Reinette Chatre
2023-11-20 11:13 ` [PATCH v2 13/26] selftests/resctrl: Improve perf init Ilpo Järvinen
2023-11-28 22:15   ` Reinette Chatre
2023-11-20 11:13 ` [PATCH v2 14/26] selftests/resctrl: Convert perf related globals to locals Ilpo Järvinen
2023-11-28 22:15   ` Reinette Chatre
2023-11-20 11:13 ` [PATCH v2 15/26] selftests/resctrl: Move cat_val() to cat_test.c and rename to cat_test() Ilpo Järvinen
2023-11-28 22:15   ` Reinette Chatre
2023-11-20 11:13 ` [PATCH v2 16/26] selftests/resctrl: Open perf fd before start & add error handling Ilpo Järvinen
2023-11-28 22:16   ` Reinette Chatre
2023-11-20 11:13 ` [PATCH v2 17/26] selftests/resctrl: Replace file write with volatile variable Ilpo Järvinen
2023-11-28 22:16   ` Reinette Chatre
2023-12-07 15:03     ` Ilpo Järvinen
2023-11-20 11:13 ` [PATCH v2 18/26] selftests/resctrl: Read in less obvious order to defeat prefetch optimizations Ilpo Järvinen
2023-11-28 22:17   ` Reinette Chatre
2023-11-20 11:13 ` [PATCH v2 19/26] selftests/resctrl: Rewrite Cache Allocation Technology (CAT) test Ilpo Järvinen
2023-11-28 22:17   ` Reinette Chatre
2023-12-07 15:18     ` Ilpo Järvinen
2023-11-20 11:13 ` [PATCH v2 20/26] selftests/resctrl: Create struct for input parameters Ilpo Järvinen
2023-11-28 22:18   ` Reinette Chatre
2023-11-20 11:13 ` [PATCH v2 21/26] selftests/resctrl: Introduce generalized test framework Ilpo Järvinen
2023-11-28 22:19   ` Reinette Chatre
2023-11-20 11:13 ` [PATCH v2 22/26] selftests/resctrl: Pass write_schemata() resource instead of test name Ilpo Järvinen
2023-11-28 22:19   ` Reinette Chatre
2023-11-20 11:13 ` [PATCH v2 23/26] selftests/resctrl: Add helper to convert L2/3 to integer Ilpo Järvinen
2023-11-28 22:22   ` Reinette Chatre
2023-11-20 11:13 ` [PATCH v2 24/26] selftests/resctrl: Rename resource ID to domain ID Ilpo Järvinen
2023-11-28 22:22   ` Reinette Chatre
2023-11-20 11:13 ` Ilpo Järvinen [this message]
2023-11-28 22:22   ` [PATCH v2 25/26] selftests/resctrl: Get domain id from cache id Reinette Chatre
2023-11-20 11:13 ` [PATCH v2 26/26] selftests/resctrl: Add test groups and name L3 CAT test L3_CAT Ilpo Järvinen
2023-11-28 22:22   ` Reinette Chatre
2023-11-29 11:11     ` Ilpo Järvinen
2023-11-30  7:36       ` Maciej Wieczór-Retman

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20231120111340.7805-26-ilpo.jarvinen@linux.intel.com \
    --to=ilpo.jarvinen@linux.intel.com \
    --cc=fenghua.yu@intel.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-kselftest@vger.kernel.org \
    --cc=maciej.wieczor-retman@intel.com \
    --cc=reinette.chatre@intel.com \
    --cc=shuah@kernel.org \
    --cc=tan.shaopeng@jp.fujitsu.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox