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 17/29] selftests/resctrl: Convert perf related globals to locals
Date: Fri, 15 Dec 2023 17:05:03 +0200 [thread overview]
Message-ID: <20231215150515.36983-18-ilpo.jarvinen@linux.intel.com> (raw)
In-Reply-To: <20231215150515.36983-1-ilpo.jarvinen@linux.intel.com>
Perf related variables pea_llc_miss, pe_read, and pe_fd are globals in
cache.c.
Convert them to locals for better scoping and make pea_llc_miss simpler
by renaming it to pea. Make close(pe_fd) handling easier to understand
by doing it inside cat_val().
Make also sizeof()s use safer way to determine the right struct.
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 | 72 ++++++++++++++-----------
1 file changed, 40 insertions(+), 32 deletions(-)
diff --git a/tools/testing/selftests/resctrl/cache.c b/tools/testing/selftests/resctrl/cache.c
index 58ee6f6b0edf..335415eaa406 100644
--- a/tools/testing/selftests/resctrl/cache.c
+++ b/tools/testing/selftests/resctrl/cache.c
@@ -10,51 +10,50 @@ struct perf_event_read {
} values[2];
};
-static struct perf_event_attr pea_llc_miss;
-static struct perf_event_read pe_read;
-static int pe_fd;
char llc_occup_path[1024];
-static void perf_event_attr_initialize(__u64 config)
+static void perf_event_attr_initialize(struct perf_event_attr *pea, __u64 config)
{
- memset(&pea_llc_miss, 0, sizeof(struct perf_event_attr));
- pea_llc_miss.type = PERF_TYPE_HARDWARE;
- pea_llc_miss.size = sizeof(struct perf_event_attr);
- pea_llc_miss.read_format = PERF_FORMAT_GROUP;
- pea_llc_miss.exclude_kernel = 1;
- pea_llc_miss.exclude_hv = 1;
- pea_llc_miss.exclude_idle = 1;
- pea_llc_miss.exclude_callchain_kernel = 1;
- pea_llc_miss.inherit = 1;
- pea_llc_miss.exclude_guest = 1;
- pea_llc_miss.disabled = 1;
- pea_llc_miss.config = config;
+ memset(pea, 0, sizeof(*pea));
+ pea->type = PERF_TYPE_HARDWARE;
+ pea->size = sizeof(*pea);
+ pea->read_format = PERF_FORMAT_GROUP;
+ pea->exclude_kernel = 1;
+ pea->exclude_hv = 1;
+ pea->exclude_idle = 1;
+ pea->exclude_callchain_kernel = 1;
+ pea->inherit = 1;
+ pea->exclude_guest = 1;
+ pea->disabled = 1;
+ pea->config = config;
}
/* Start counters to log values */
-static void perf_event_reset_enable(void)
+static void perf_event_reset_enable(int pe_fd)
{
ioctl(pe_fd, PERF_EVENT_IOC_RESET, 0);
ioctl(pe_fd, PERF_EVENT_IOC_ENABLE, 0);
}
-static void perf_event_initialize_read_format(void)
+static void perf_event_initialize_read_format(struct perf_event_read *pe_read)
{
- memset(&pe_read, 0, sizeof(struct perf_event_read));
- pe_read.nr = 1;
+ memset(pe_read, 0, sizeof(*pe_read));
+ pe_read->nr = 1;
}
-static int perf_open(pid_t pid, int cpu_no)
+static int perf_open(struct perf_event_attr *pea, pid_t pid, int cpu_no)
{
- pe_fd = perf_event_open(&pea_llc_miss, pid, cpu_no, -1, PERF_FLAG_FD_CLOEXEC);
+ int pe_fd;
+
+ pe_fd = perf_event_open(pea, pid, cpu_no, -1, PERF_FLAG_FD_CLOEXEC);
if (pe_fd == -1) {
ksft_perror("Error opening leader");
return -1;
}
- perf_event_reset_enable();
+ perf_event_reset_enable(pe_fd);
- return 0;
+ return pe_fd;
}
/*
@@ -131,20 +130,21 @@ static int print_results_cache(const char *filename, int bm_pid, __u64 llc_value
*
* Return: =0 on success. <0 on failure.
*/
-static int perf_event_measure(const char *filename, int bm_pid)
+static int perf_event_measure(int pe_fd, struct perf_event_read *pe_read,
+ const char *filename, int bm_pid)
{
int ret;
/* Stop counters after one span to get miss rate */
ioctl(pe_fd, PERF_EVENT_IOC_DISABLE, 0);
- ret = read(pe_fd, &pe_read, sizeof(struct perf_event_read));
+ ret = read(pe_fd, pe_read, sizeof(*pe_read));
if (ret == -1) {
ksft_perror("Could not get perf value");
return -1;
}
- return print_results_cache(filename, bm_pid, pe_read.values[0].value);
+ return print_results_cache(filename, bm_pid, pe_read->values[0].value);
}
/*
@@ -181,7 +181,10 @@ int cat_val(struct resctrl_val_param *param, size_t span)
{
int memflush = 1, operation = 0, ret = 0;
char *resctrl_val = param->resctrl_val;
+ struct perf_event_read pe_read;
+ struct perf_event_attr pea;
pid_t bm_pid;
+ int pe_fd;
if (strcmp(param->filename, "") == 0)
sprintf(param->filename, "stdio");
@@ -199,8 +202,8 @@ int cat_val(struct resctrl_val_param *param, size_t span)
if (ret)
return ret;
- perf_event_attr_initialize(PERF_COUNT_HW_CACHE_MISSES);
- perf_event_initialize_read_format();
+ perf_event_attr_initialize(&pea, PERF_COUNT_HW_CACHE_MISSES);
+ perf_event_initialize_read_format(&pe_read);
/* Test runs until the callback setup() tells the test to stop. */
while (1) {
@@ -211,9 +214,12 @@ int cat_val(struct resctrl_val_param *param, size_t span)
}
if (ret < 0)
break;
- ret = perf_open(bm_pid, param->cpu_no);
- if (ret)
+
+ pe_fd = perf_open(&pea, bm_pid, param->cpu_no);
+ if (pe_fd < 0) {
+ ret = -1;
break;
+ }
if (run_fill_buf(span, memflush, operation, true)) {
fprintf(stderr, "Error-running fill buffer\n");
@@ -222,9 +228,11 @@ int cat_val(struct resctrl_val_param *param, size_t span)
}
sleep(1);
- ret = perf_event_measure(param->filename, bm_pid);
+ ret = perf_event_measure(pe_fd, &pe_read, param->filename, bm_pid);
if (ret)
goto pe_close;
+
+ close(pe_fd);
}
return ret;
--
2.30.2
next prev 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 ` Ilpo Järvinen [this message]
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 ` [PATCH v4 19/29] selftests/resctrl: Open perf fd before start & add error handling Ilpo Järvinen
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-18-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®