All of lore.kernel.org
 help / color / mirror / Atom feed
From: Maciej Wieczor-Retman <maciej.wieczor-retman@intel.com>
To: Fenghua Yu <fenghua.yu@intel.com>,
	Reinette Chatre <reinette.chatre@intel.com>,
	Shuah Khan <shuah@kernel.org>
Cc: ilpo.jarvinen@linux.intel.com, tony.luck@intel.com,
	"Shaopeng Tan (Fujitsu)" <tan.shaopeng@fujitsu.com>,
	linux-kernel@vger.kernel.org, linux-kselftest@vger.kernel.org
Subject: [PATCH 3/4] selftests/resctrl: SNC support for MBM
Date: Wed,  6 Mar 2024 11:39:20 +0100	[thread overview]
Message-ID: <def02de22a4747ed56ddc28f334e55872ba95f13.1709721159.git.maciej.wieczor-retman@intel.com> (raw)
In-Reply-To: <cover.1709721159.git.maciej.wieczor-retman@intel.com>

Memory Bandwidth Monitoring (MBM) measures how much data flows between
cache levels. Only the flow for a process specified with a Resource
Monitoring ID (RMID) is measured.

Sub-Numa Clustering (SNC) causes MBM selftest to fail because the
increased amount of NUMA nodes per socket is not taken into account.
That in turn makes the test use incorrect values for the start and end
of the measurement by tracking the wrong node.

For the MBM selftest to be NUMA-aware it needs to track the start and end
values of a measurement not for a single node but for all nodes on the
same socket. Then summing all measured values comes out as the real
bandwidth used by the process.

Reported-by: "Shaopeng Tan (Fujitsu)" <tan.shaopeng@fujitsu.com>
Closes: https://lore.kernel.org/lkml/TYAPR01MB6330A4EB3633B791939EA45E8B39A@TYAPR01MB6330.jpnprd01.prod.outlook.com/
Signed-off-by: Maciej Wieczor-Retman <maciej.wieczor-retman@intel.com>
---
 tools/testing/selftests/resctrl/mba_test.c    |  1 -
 tools/testing/selftests/resctrl/resctrl_val.c | 37 ++++++++++++-------
 2 files changed, 23 insertions(+), 15 deletions(-)

diff --git a/tools/testing/selftests/resctrl/mba_test.c b/tools/testing/selftests/resctrl/mba_test.c
index 7946e32e85c8..fc31a61dab0c 100644
--- a/tools/testing/selftests/resctrl/mba_test.c
+++ b/tools/testing/selftests/resctrl/mba_test.c
@@ -147,7 +147,6 @@ static int mba_run_test(const struct resctrl_test *test, const struct user_param
 	struct resctrl_val_param param = {
 		.resctrl_val	= MBA_STR,
 		.ctrlgrp	= "c1",
-		.mongrp		= "m1",
 		.filename	= RESULT_FILE_NAME,
 		.bw_report	= "reads",
 		.setup		= mba_setup
diff --git a/tools/testing/selftests/resctrl/resctrl_val.c b/tools/testing/selftests/resctrl/resctrl_val.c
index e75e3923ebe2..2fe9f8bb4a45 100644
--- a/tools/testing/selftests/resctrl/resctrl_val.c
+++ b/tools/testing/selftests/resctrl/resctrl_val.c
@@ -595,9 +595,10 @@ static void initialize_llc_occu_resctrl(const char *ctrlgrp, const char *mongrp,
 
 static int measure_vals(const struct user_params *uparams,
 			struct resctrl_val_param *param,
-			unsigned long *bw_resc_start)
+			unsigned long *bw_resc_start,
+			int res_id)
 {
-	unsigned long bw_resc, bw_resc_end;
+	unsigned long bw_resc = 0, bw_resc_sum = 0, bw_resc_end;
 	float bw_imc;
 	int ret;
 
@@ -612,17 +613,19 @@ static int measure_vals(const struct user_params *uparams,
 	if (ret < 0)
 		return ret;
 
-	ret = get_mem_bw_resctrl(&bw_resc_end);
-	if (ret < 0)
-		return ret;
+	for (int i = 0 ; i < snc_ways() ; i++) {
+		set_mbm_path(param->ctrlgrp, strlen(param->mongrp) > 0 ? param->mongrp : NULL,
+			     res_id + i);
+		ret = get_mem_bw_resctrl(&bw_resc_end);
+		bw_resc = (bw_resc_end - bw_resc_start[i]) / MB;
+		bw_resc_sum += bw_resc;
+		bw_resc_start[i] = bw_resc_end;
+	}
 
-	bw_resc = (bw_resc_end - *bw_resc_start) / MB;
-	ret = print_results_bw(param->filename, bm_pid, bw_imc, bw_resc);
+	ret = print_results_bw(param->filename, bm_pid, bw_imc, bw_resc_sum);
 	if (ret)
 		return ret;
 
-	*bw_resc_start = bw_resc_end;
-
 	return 0;
 }
 
@@ -697,12 +700,16 @@ int resctrl_val(const struct resctrl_test *test,
 		struct resctrl_val_param *param)
 {
 	char *resctrl_val = param->resctrl_val;
-	unsigned long bw_resc_start = 0;
 	int res_id, ret = 0, pipefd[2];
+	unsigned long *bw_resc_start;
 	struct sigaction sigact;
 	char pipe_message = 0;
 	union sigval value;
 
+	bw_resc_start = calloc(snc_ways(), sizeof(unsigned long));
+	if (!bw_resc_start)
+		return -1;
+
 	if (strcmp(param->filename, "") == 0)
 		sprintf(param->filename, "stdio");
 
@@ -710,7 +717,7 @@ int resctrl_val(const struct resctrl_test *test,
 	    !strncmp(resctrl_val, MBM_STR, sizeof(MBM_STR))) {
 		ret = validate_bw_report_request(param->bw_report);
 		if (ret)
-			return ret;
+			goto out_free;
 	}
 
 	/*
@@ -721,7 +728,7 @@ int resctrl_val(const struct resctrl_test *test,
 
 	if (pipe(pipefd)) {
 		ksft_perror("Unable to create pipe");
-
+		free(bw_resc_start);
 		return -1;
 	}
 
@@ -733,7 +740,7 @@ int resctrl_val(const struct resctrl_test *test,
 	bm_pid = fork();
 	if (bm_pid == -1) {
 		ksft_perror("Unable to fork");
-
+		free(bw_resc_start);
 		return -1;
 	}
 
@@ -841,7 +848,7 @@ int resctrl_val(const struct resctrl_test *test,
 
 		if (!strncmp(resctrl_val, MBM_STR, sizeof(MBM_STR)) ||
 		    !strncmp(resctrl_val, MBA_STR, sizeof(MBA_STR))) {
-			ret = measure_vals(uparams, param, &bw_resc_start);
+			ret = measure_vals(uparams, param, bw_resc_start, res_id);
 			if (ret)
 				break;
 		} else if (!strncmp(resctrl_val, CMT_STR, sizeof(CMT_STR))) {
@@ -855,6 +862,8 @@ int resctrl_val(const struct resctrl_test *test,
 
 out:
 	kill(bm_pid, SIGKILL);
+out_free:
+	free(bw_resc_start);
 
 	return ret;
 }
-- 
2.44.0


  parent reply	other threads:[~2024-03-06 10:40 UTC|newest]

Thread overview: 34+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-03-06 10:38 [PATCH 0/4] SNC support for resctrl selftests Maciej Wieczor-Retman
2024-03-06 10:39 ` [PATCH 1/4] selftests/resctrl: Adjust effective L3 cache size with SNC enabled Maciej Wieczor-Retman
2024-03-06 10:39 ` [PATCH 2/4] selftests/resctrl: SNC support for CMT Maciej Wieczor-Retman
2024-03-08 13:53   ` Ilpo Järvinen
2024-03-08 13:59     ` Ilpo Järvinen
2024-03-13 10:23       ` Maciej Wieczor-Retman
2024-03-06 10:39 ` Maciej Wieczor-Retman [this message]
2024-03-08 14:07   ` [PATCH 3/4] selftests/resctrl: SNC support for MBM Ilpo Järvinen
2024-03-13 10:26     ` Maciej Wieczor-Retman
2024-03-06 10:39 ` [PATCH 4/4] selftests/resctrl: Adjust SNC support messages Maciej Wieczor-Retman
2024-03-06 21:54   ` Luck, Tony
2024-03-07  9:25     ` Maciej Wieczor-Retman
2024-03-07 17:18       ` Luck, Tony
2024-03-07 17:41         ` Reinette Chatre
2024-03-07 17:57           ` Luck, Tony
2024-03-07 19:52             ` Reinette Chatre
2024-03-07 21:14               ` Luck, Tony
2024-03-07 22:39                 ` Reinette Chatre
2024-03-07 23:16                   ` Tony Luck
2024-03-07 23:41                     ` Reinette Chatre
2024-03-08 18:06                     ` James Morse
2024-03-08 18:42                       ` Tony Luck
2024-03-15 18:02                         ` James Morse
2024-03-18 19:15                           ` Reinette Chatre
2024-03-18 19:34                             ` Luck, Tony
2024-03-18 20:32                               ` Reinette Chatre
2024-03-18 20:47                                 ` Luck, Tony
2024-03-18 21:04                                   ` Luck, Tony
2024-03-18 21:26                                     ` Reinette Chatre
2024-03-18 22:00                                       ` Luck, Tony
2024-03-18 22:43                                         ` Reinette Chatre
2024-03-18 21:23                                   ` Reinette Chatre
2024-03-18 22:04                                     ` Luck, Tony
2024-03-19 21:01                                       ` Peter Newman

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=def02de22a4747ed56ddc28f334e55872ba95f13.1709721159.git.maciej.wieczor-retman@intel.com \
    --to=maciej.wieczor-retman@intel.com \
    --cc=fenghua.yu@intel.com \
    --cc=ilpo.jarvinen@linux.intel.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-kselftest@vger.kernel.org \
    --cc=reinette.chatre@intel.com \
    --cc=shuah@kernel.org \
    --cc=tan.shaopeng@fujitsu.com \
    --cc=tony.luck@intel.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.