mirror of https://lore.kernel.org/lkml/
 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 v4 19/29] selftests/resctrl: Open perf fd before start & add error handling
Date: Fri, 15 Dec 2023 17:05:05 +0200	[thread overview]
Message-ID: <20231215150515.36983-20-ilpo.jarvinen@linux.intel.com> (raw)
In-Reply-To: <20231215150515.36983-1-ilpo.jarvinen@linux.intel.com>

Perf fd (pe_fd) is opened, reset, and enabled during every test the CAT
selftest runs. Also, ioctl(pe_fd, ...) calls are not error checked even
if ioctl() could return an error.

Open perf fd only once before the tests and only reset and enable the
counter within the test loop. Add error checking to pe_fd ioctl()
calls.

Signed-off-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
Reviewed-by: Reinette Chatre <reinette.chatre@intel.com>
---
 tools/testing/selftests/resctrl/cache.c    | 19 +++++++++++++++----
 tools/testing/selftests/resctrl/cat_test.c | 14 +++++++-------
 tools/testing/selftests/resctrl/resctrl.h  |  1 +
 3 files changed, 23 insertions(+), 11 deletions(-)

diff --git a/tools/testing/selftests/resctrl/cache.c b/tools/testing/selftests/resctrl/cache.c
index 319d0cdd7225..1b339d6bbff1 100644
--- a/tools/testing/selftests/resctrl/cache.c
+++ b/tools/testing/selftests/resctrl/cache.c
@@ -22,10 +22,19 @@ void perf_event_attr_initialize(struct perf_event_attr *pea, __u64 config)
 }
 
 /* Start counters to log values */
-static void perf_event_reset_enable(int pe_fd)
+int perf_event_reset_enable(int pe_fd)
 {
-	ioctl(pe_fd, PERF_EVENT_IOC_RESET, 0);
-	ioctl(pe_fd, PERF_EVENT_IOC_ENABLE, 0);
+	int ret;
+
+	ret = ioctl(pe_fd, PERF_EVENT_IOC_RESET, 0);
+	if (ret < 0)
+		return ret;
+
+	ret = ioctl(pe_fd, PERF_EVENT_IOC_ENABLE, 0);
+	if (ret < 0)
+		return ret;
+
+	return 0;
 }
 
 void perf_event_initialize_read_format(struct perf_event_read *pe_read)
@@ -129,7 +138,9 @@ int perf_event_measure(int pe_fd, struct perf_event_read *pe_read,
 	int ret;
 
 	/* Stop counters after one span to get miss rate */
-	ioctl(pe_fd, PERF_EVENT_IOC_DISABLE, 0);
+	ret = ioctl(pe_fd, PERF_EVENT_IOC_DISABLE, 0);
+	if (ret < 0)
+		return ret;
 
 	ret = read(pe_fd, pe_read, sizeof(*pe_read));
 	if (ret == -1) {
diff --git a/tools/testing/selftests/resctrl/cat_test.c b/tools/testing/selftests/resctrl/cat_test.c
index bfb607b13491..36e62baebf4f 100644
--- a/tools/testing/selftests/resctrl/cat_test.c
+++ b/tools/testing/selftests/resctrl/cat_test.c
@@ -145,6 +145,9 @@ static int cat_test(struct resctrl_val_param *param, size_t span)
 
 	perf_event_attr_initialize(&pea, PERF_COUNT_HW_CACHE_MISSES);
 	perf_event_initialize_read_format(&pe_read);
+	pe_fd = perf_open(&pea, bm_pid, param->cpu_no);
+	if (pe_fd < 0)
+		return pe_fd;
 
 	/* Test runs until the callback setup() tells the test to stop. */
 	while (1) {
@@ -155,11 +158,10 @@ static int cat_test(struct resctrl_val_param *param, size_t span)
 		}
 		if (ret < 0)
 			break;
-		pe_fd = perf_open(&pea, bm_pid, param->cpu_no);
-		if (pe_fd < 0) {
-			ret = -1;
-			break;
-		}
+
+		ret = perf_event_reset_enable(pe_fd);
+		if (ret)
+			goto pe_close;
 
 		if (run_fill_buf(span, memflush, operation, true)) {
 			fprintf(stderr, "Error-running fill buffer\n");
@@ -171,8 +173,6 @@ static int cat_test(struct resctrl_val_param *param, size_t span)
 		ret = perf_event_measure(pe_fd, &pe_read, param->filename, bm_pid);
 		if (ret)
 			goto pe_close;
-
-		close(pe_fd);
 	}
 
 	return ret;
diff --git a/tools/testing/selftests/resctrl/resctrl.h b/tools/testing/selftests/resctrl/resctrl.h
index 4aabf7ac0ab9..f22b7897251e 100644
--- a/tools/testing/selftests/resctrl/resctrl.h
+++ b/tools/testing/selftests/resctrl/resctrl.h
@@ -122,6 +122,7 @@ int get_core_sibling(int cpu_no);
 void perf_event_attr_initialize(struct perf_event_attr *pea, __u64 config);
 void perf_event_initialize_read_format(struct perf_event_read *pe_read);
 int perf_open(struct perf_event_attr *pea, pid_t pid, int cpu_no);
+int perf_event_reset_enable(int pe_fd);
 int perf_event_measure(int pe_fd, struct perf_event_read *pe_read,
 		       const char *filename, int bm_pid);
 int measure_llc_resctrl(const char *filename, int bm_pid);
-- 
2.30.2


  parent reply	other threads:[~2023-12-15 15:08 UTC|newest]

Thread overview: 34+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-12-15 15:04 [PATCH v4 00/29] selftests/resctrl: CAT test improvements & generalized test framework Ilpo Järvinen
2023-12-15 15:04 ` [PATCH v4 01/29] selftests/resctrl: Convert perror() to ksft_perror() or ksft_print_msg() Ilpo Järvinen
2023-12-15 17:39   ` Reinette Chatre
2023-12-15 15:04 ` [PATCH v4 02/29] selftests/resctrl: Return -1 instead of errno on error Ilpo Järvinen
2023-12-15 15:04 ` [PATCH v4 03/29] selftests/resctrl: Don't use ctrlc_handler() outside signal handling Ilpo Järvinen
2023-12-15 15:04 ` [PATCH v4 04/29] selftests/resctrl: Change function comments to say < 0 on error Ilpo Järvinen
2023-12-15 15:04 ` [PATCH v4 05/29] selftests/resctrl: Split fill_buf to allow tests finer-grained control Ilpo Järvinen
2023-12-15 15:04 ` [PATCH v4 06/29] selftests/resctrl: Refactor fill_buf functions Ilpo Järvinen
2023-12-15 15:04 ` [PATCH v4 07/29] selftests/resctrl: Refactor get_cbm_mask() and rename to get_full_cbm() Ilpo Järvinen
2023-12-15 17:40   ` Reinette Chatre
2023-12-15 15:04 ` [PATCH v4 08/29] selftests/resctrl: Mark get_cache_size() cache_type const Ilpo Järvinen
2023-12-15 15:04 ` [PATCH v4 09/29] selftests/resctrl: Create cache_portion_size() helper Ilpo Järvinen
2023-12-15 15:04 ` [PATCH v4 10/29] selftests/resctrl: Exclude shareable bits from schemata in CAT test Ilpo Järvinen
2023-12-15 15:04 ` [PATCH v4 11/29] selftests/resctrl: Split measure_cache_vals() Ilpo Järvinen
2023-12-15 15:04 ` [PATCH v4 12/29] selftests/resctrl: Split show_cache_info() to test specific and generic parts Ilpo Järvinen
2023-12-15 15:04 ` [PATCH v4 13/29] selftests/resctrl: Remove unnecessary __u64 -> unsigned long conversion Ilpo Järvinen
2023-12-15 15:05 ` [PATCH v4 14/29] selftests/resctrl: Remove nested calls in perf event handling Ilpo Järvinen
2023-12-15 15:05 ` [PATCH v4 15/29] selftests/resctrl: Consolidate naming of perf event related things Ilpo Järvinen
2023-12-15 15:05 ` [PATCH v4 16/29] selftests/resctrl: Improve perf init Ilpo Järvinen
2023-12-15 15:05 ` [PATCH v4 17/29] selftests/resctrl: Convert perf related globals to locals Ilpo Järvinen
2023-12-15 15:05 ` [PATCH v4 18/29] selftests/resctrl: Move cat_val() to cat_test.c and rename to cat_test() Ilpo Järvinen
2023-12-15 15:05 ` Ilpo Järvinen [this message]
2023-12-15 15:05 ` [PATCH v4 20/29] selftests/resctrl: Replace file write with volatile variable Ilpo Järvinen
2023-12-15 15:05 ` [PATCH v4 21/29] selftests/resctrl: Read in less obvious order to defeat prefetch optimizations Ilpo Järvinen
2023-12-15 15:05 ` [PATCH v4 22/29] selftests/resctrl: Rewrite Cache Allocation Technology (CAT) test Ilpo Järvinen
2023-12-15 15:05 ` [PATCH v4 23/29] selftests/resctrl: Restore the CPU affinity after CAT test Ilpo Järvinen
2023-12-15 15:05 ` [PATCH v4 24/29] selftests/resctrl: Create struct for input parameters Ilpo Järvinen
2023-12-15 15:05 ` [PATCH v4 25/29] selftests/resctrl: Introduce generalized test framework Ilpo Järvinen
2023-12-15 15:05 ` [PATCH v4 26/29] selftests/resctrl: Pass write_schemata() resource instead of test name Ilpo Järvinen
2023-12-15 15:05 ` [PATCH v4 27/29] selftests/resctrl: Add helper to convert L2/3 to integer Ilpo Järvinen
2023-12-15 15:05 ` [PATCH v4 28/29] selftests/resctrl: Rename resource ID to domain ID Ilpo Järvinen
2023-12-15 15:05 ` [PATCH v4 29/29] selftests/resctrl: Get domain id from cache id Ilpo Järvinen
2023-12-15 17:45 ` [PATCH v4 00/29] selftests/resctrl: CAT test improvements & generalized test framework Reinette Chatre
2023-12-15 23:45   ` Reinette Chatre

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=20231215150515.36983-20-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

all inboxes | Powered by JetHome®