Re: [PATCH v2 2/2] selftests/resctrl: Move run_benchmark() to a more fitting file

From: Ilpo Järvinen
Date: Mon Aug 28 2023 - 06:48:29 EST


On Mon, 28 Aug 2023, Wieczor-Retman, Maciej wrote:

> Resctrlfs.c file contains mostly functions that interact in some way
> with resctrl FS entries while functions inside resctrl_val.c deal with
> measurements and benchmarking.
>
> Run_benchmark() function is located in resctrlfs.c file even though it's
> purpose is not interacting with the resctrl FS but to execute cache
> checking logic.
>
> Move run_benchmark() to resctrl_val.c just before resctrl_val() function
> that makes use of run_benchmark().
>
> Remove return comment from kernel-doc since the function is type void.
>
> Changelog v2:
> - Add dots at the end of patch msg sentences.
> - Remove "Return: void" from run_benchmark() kernel-doc comment.
>
> Signed-off-by: Wieczor-Retman, Maciej <maciej.wieczor-retman@xxxxxxxxx>

Reviewed-by: Ilpo Järvinen <ilpo.jarvinen@xxxxxxxxxxxxxxx>

--
i.


> ---
> tools/testing/selftests/resctrl/resctrl_val.c | 50 ++++++++++++++++++
> tools/testing/selftests/resctrl/resctrlfs.c | 52 -------------------
> 2 files changed, 50 insertions(+), 52 deletions(-)
>
> diff --git a/tools/testing/selftests/resctrl/resctrl_val.c b/tools/testing/selftests/resctrl/resctrl_val.c
> index f0f6c5f6e98b..5c8dc0a7bab9 100644
> --- a/tools/testing/selftests/resctrl/resctrl_val.c
> +++ b/tools/testing/selftests/resctrl/resctrl_val.c
> @@ -621,6 +621,56 @@ measure_vals(struct resctrl_val_param *param, unsigned long *bw_resc_start)
> return 0;
> }
>
> +/*
> + * run_benchmark - Run a specified benchmark or fill_buf (default benchmark)
> + * in specified signal. Direct benchmark stdio to /dev/null.
> + * @signum: signal number
> + * @info: signal info
> + * @ucontext: user context in signal handling
> + */
> +void run_benchmark(int signum, siginfo_t *info, void *ucontext)
> +{
> + int operation, ret, memflush;
> + char **benchmark_cmd;
> + size_t span;
> + bool once;
> + FILE *fp;
> +
> + benchmark_cmd = info->si_ptr;
> +
> + /*
> + * Direct stdio of child to /dev/null, so that only parent writes to
> + * stdio (console)
> + */
> + fp = freopen("/dev/null", "w", stdout);
> + if (!fp)
> + PARENT_EXIT("Unable to direct benchmark status to /dev/null");
> +
> + if (strcmp(benchmark_cmd[0], "fill_buf") == 0) {
> + /* Execute default fill_buf benchmark */
> + span = strtoul(benchmark_cmd[1], NULL, 10);
> + memflush = atoi(benchmark_cmd[2]);
> + operation = atoi(benchmark_cmd[3]);
> + if (!strcmp(benchmark_cmd[4], "true"))
> + once = true;
> + else if (!strcmp(benchmark_cmd[4], "false"))
> + once = false;
> + else
> + PARENT_EXIT("Invalid once parameter");
> +
> + if (run_fill_buf(span, memflush, operation, once))
> + fprintf(stderr, "Error in running fill buffer\n");
> + } else {
> + /* Execute specified benchmark */
> + ret = execvp(benchmark_cmd[0], benchmark_cmd);
> + if (ret)
> + perror("wrong\n");
> + }
> +
> + fclose(stdout);
> + PARENT_EXIT("Unable to run specified benchmark");
> +}
> +
> /*
> * resctrl_val: execute benchmark and measure memory bandwidth on
> * the benchmark
> diff --git a/tools/testing/selftests/resctrl/resctrlfs.c b/tools/testing/selftests/resctrl/resctrlfs.c
> index 0f9644e5a25e..72dd8c3f655a 100644
> --- a/tools/testing/selftests/resctrl/resctrlfs.c
> +++ b/tools/testing/selftests/resctrl/resctrlfs.c
> @@ -291,58 +291,6 @@ int taskset_benchmark(pid_t bm_pid, int cpu_no)
> return 0;
> }
>
> -/*
> - * run_benchmark - Run a specified benchmark or fill_buf (default benchmark)
> - * in specified signal. Direct benchmark stdio to /dev/null.
> - * @signum: signal number
> - * @info: signal info
> - * @ucontext: user context in signal handling
> - *
> - * Return: void
> - */
> -void run_benchmark(int signum, siginfo_t *info, void *ucontext)
> -{
> - int operation, ret, memflush;
> - char **benchmark_cmd;
> - size_t span;
> - bool once;
> - FILE *fp;
> -
> - benchmark_cmd = info->si_ptr;
> -
> - /*
> - * Direct stdio of child to /dev/null, so that only parent writes to
> - * stdio (console)
> - */
> - fp = freopen("/dev/null", "w", stdout);
> - if (!fp)
> - PARENT_EXIT("Unable to direct benchmark status to /dev/null");
> -
> - if (strcmp(benchmark_cmd[0], "fill_buf") == 0) {
> - /* Execute default fill_buf benchmark */
> - span = strtoul(benchmark_cmd[1], NULL, 10);
> - memflush = atoi(benchmark_cmd[2]);
> - operation = atoi(benchmark_cmd[3]);
> - if (!strcmp(benchmark_cmd[4], "true"))
> - once = true;
> - else if (!strcmp(benchmark_cmd[4], "false"))
> - once = false;
> - else
> - PARENT_EXIT("Invalid once parameter");
> -
> - if (run_fill_buf(span, memflush, operation, once))
> - fprintf(stderr, "Error in running fill buffer\n");
> - } else {
> - /* Execute specified benchmark */
> - ret = execvp(benchmark_cmd[0], benchmark_cmd);
> - if (ret)
> - perror("wrong\n");
> - }
> -
> - fclose(stdout);
> - PARENT_EXIT("Unable to run specified benchmark");
> -}
> -
> /*
> * create_grp - Create a group only if one doesn't exist
> * @grp_name: Name of the group
>