[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <5x3wlnejagee5hbigjo6dpvbc5453gnaab4ue6doplneumfgzd@q7yo3j3prh2h>
Date: Fri, 27 Oct 2023 13:51:24 +0200
From: Maciej Wieczór-Retman
<maciej.wieczor-retman@...el.com>
To: Ilpo Järvinen <ilpo.jarvinen@...ux.intel.com>
CC: <linux-kselftest@...r.kernel.org>,
Reinette Chatre <reinette.chatre@...el.com>,
Shuah Khan <shuah@...nel.org>,
Shaopeng Tan <tan.shaopeng@...fujitsu.com>,
Fenghua Yu <fenghua.yu@...el.com>,
<linux-kernel@...r.kernel.org>
Subject: Re: [PATCH 14/24] selftests/resctrl: Move cat_val() to cat_test.c
and rename to cat_test()
On 2023-10-24 at 12:26:24 +0300, Ilpo Järvinen wrote:
>diff --git a/tools/testing/selftests/resctrl/cat_test.c b/tools/testing/selftests/resctrl/cat_test.c
>index 2106cc3601d9..e71690a9bbb3 100644
>--- a/tools/testing/selftests/resctrl/cat_test.c
>+++ b/tools/testing/selftests/resctrl/cat_test.c
>@@ -111,6 +111,77 @@ void cat_test_cleanup(void)
> remove(RESULT_FILE_NAME2);
> }
>
>+/*
>+ * cat_test: execute CAT benchmark and measure LLC cache misses
>+ * @param: parameters passed to cat_test()
>+ * @span: buffer size for the benchmark
>+ *
>+ * Return: 0 on success. non-zero on failure.
>+ */
>+static int cat_test(struct resctrl_val_param *param, size_t span)
>+{
>+ int memflush = 1, operation = 0, ret = 0;
>+ char *resctrl_val = param->resctrl_val;
>+ static struct perf_event_read pe_read;
Is there a reason why this struct is declared as static?
>+ struct perf_event_attr pea;
>+ pid_t bm_pid;
>+ int pe_fd;
>+
>+ if (strcmp(param->filename, "") == 0)
>+ sprintf(param->filename, "stdio");
>+
>+ bm_pid = getpid();
>+
>+ /* Taskset benchmark to specified cpu */
>+ ret = taskset_benchmark(bm_pid, param->cpu_no);
>+ if (ret)
>+ return ret;
>+
>+ /* Write benchmark to specified con_mon grp, mon_grp in resctrl FS*/
>+ ret = write_bm_pid_to_resctrl(bm_pid, param->ctrlgrp, param->mongrp,
>+ resctrl_val);
>+ if (ret)
>+ return ret;
>+
>+ 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) {
>+ ret = param->setup(param);
>+ if (ret == END_OF_TESTS) {
>+ ret = 0;
>+ break;
>+ }
>+ if (ret < 0)
>+ break;
>+ pe_fd = perf_event_reset_enable(&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");
>+ ret = -1;
>+ goto pe_close;
>+ }
>+
>+ sleep(1);
>+ ret = perf_event_measure(pe_fd, &pe_read, param, bm_pid);
>+ if (ret)
>+ goto pe_close;
>+
>+ close(pe_fd);
>+ }
>+
>+ return ret;
>+
>+pe_close:
>+ close(pe_fd);
>+ return ret;
>+}
>+
> int cat_perf_miss_val(int cpu_no, int n, char *cache_type)
> {
> unsigned long l_mask, l_mask_1;
--
Kind regards
Maciej Wieczór-Retman
Powered by blists - more mailing lists