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;