Message ID | 20230713131932.133258-11-ilpo.jarvinen@linux.intel.com |
---|---|
State | Accepted |
Commit | e24ac42889810168f7a2022b868bb4b9a9481760 |
Headers | show |
Series | selftests/resctrl: Fixes and cleanups | expand |
Hi Maciej, On 7/13/2023 11:43 PM, Wieczor-Retman, Maciej wrote: > Hi Reinette! > > On 14.07.2023 01:00, Reinette Chatre wrote: >> Hi Ilpo, >> >> On 7/13/2023 6:19 AM, Ilpo Järvinen wrote: >>> MBA and MBM tests to use megabytes to represent span. CMT test uses >>> bytes. The difference requires run_benchmark() to size the buffer >>> differently based on the test name, which in turn requires passing the >>> test name into run_benchmark(). >>> >>> Convert MBA and MBM tests to use internally bytes like CMT test to >>> remove the internal inconsistency between the tests. Remove the test >>> dependent buffer sizing from run_benchmark(). >> >> If I understand correctly the intention is to always use bytes internally >> and only convert to megabytes when displayed to user space. The above >> implies that this takes care of the conversion but there still seems >> to be places that that do not follow my understanding. For example, >> resctrl_val.c:measure_vals() converts to megabytes before proceeding. > > Doesn't the use case inside resctrl_val.c:measure_vals() satisfy > the idea of only displaying data to the user space? From my > understanding it reads the number of bytes and only converts to > MB when printing the value. Or did I miss some detail there? For MBM and MBA tests resctrl_val.c:measure_vals() converts data to MB before it writes the raw data to the file. Compare to CMT test that uses cache.c:measure_cache_vals() to write raw data in bytes to file. On a high level I see the MBA, MBM, and CMT tests in three stages: (1) A "benchmark" is run in background, (2) raw data is collected at intervals and written to a file, (3) finally, data from file is processed and results displayed to user.
Hi Ilpo, On 7/14/2023 3:22 AM, Ilpo Järvinen wrote: > On Fri, 14 Jul 2023, Wieczor-Retman, Maciej wrote: >> On 14.07.2023 01:00, Reinette Chatre wrote: >>> Hi Ilpo, >>> >>> On 7/13/2023 6:19 AM, Ilpo Järvinen wrote: >>>> MBA and MBM tests to use megabytes to represent span. CMT test uses >>>> bytes. The difference requires run_benchmark() to size the buffer >>>> differently based on the test name, which in turn requires passing the >>>> test name into run_benchmark(). >>>> >>>> Convert MBA and MBM tests to use internally bytes like CMT test to >>>> remove the internal inconsistency between the tests. Remove the test >>>> dependent buffer sizing from run_benchmark(). >>> >>> If I understand correctly the intention is to always use bytes internally >>> and only convert to megabytes when displayed to user space. The above >>> implies that this takes care of the conversion but there still seems >>> to be places that that do not follow my understanding. For example, >>> resctrl_val.c:measure_vals() converts to megabytes before proceeding. >> >> Doesn't the use case inside resctrl_val.c:measure_vals() satisfy >> the idea of only displaying data to the user space? From my >> understanding it reads the number of bytes and only converts to >> MB when printing the value. Or did I miss some detail there? > > It's for printing there yes. > > But it's not about span in the first place so I'm not sure why it is > related. > If this change is just about how "span" is interpreted by the different tests then the changelog could be more specific to not create expectation that with this change there are no longer "bytes vs megabytes" internal inconsistency between MBA, MBM, and CMT tests. Reinette
diff --git a/tools/testing/selftests/resctrl/mbm_test.c b/tools/testing/selftests/resctrl/mbm_test.c index fd116158d008..2d58d4b8a918 100644 --- a/tools/testing/selftests/resctrl/mbm_test.c +++ b/tools/testing/selftests/resctrl/mbm_test.c @@ -40,7 +40,7 @@ show_bw_info(unsigned long *bw_imc, unsigned long *bw_resc, size_t span) ksft_print_msg("%s Check MBM diff within %d%%\n", ret ? "Fail:" : "Pass:", MAX_DIFF_PERCENT); ksft_print_msg("avg_diff_per: %d%%\n", avg_diff_per); - ksft_print_msg("Span (MB): %zu\n", span); + ksft_print_msg("Span (MB): %zu\n", span / MB); ksft_print_msg("avg_bw_imc: %lu\n", avg_bw_imc); ksft_print_msg("avg_bw_resc: %lu\n", avg_bw_resc); diff --git a/tools/testing/selftests/resctrl/resctrl_tests.c b/tools/testing/selftests/resctrl/resctrl_tests.c index 6b2ca1b4744f..5205a13ed250 100644 --- a/tools/testing/selftests/resctrl/resctrl_tests.c +++ b/tools/testing/selftests/resctrl/resctrl_tests.c @@ -185,8 +185,8 @@ int main(int argc, char **argv) char benchmark_cmd_area[BENCHMARK_ARGS][BENCHMARK_ARG_SIZE]; int c, cpu_no = 1, argc_new = argc, i, no_of_bits = 0; int ben_ind, ben_count, tests = 0; + size_t span = 250 * MB; bool cat_test = true; - size_t span = 250; for (i = 0; i < argc; i++) { if (strcmp(argv[i], "-b") == 0) { diff --git a/tools/testing/selftests/resctrl/resctrlfs.c b/tools/testing/selftests/resctrl/resctrlfs.c index 8be5b745226d..847e0a80c6cd 100644 --- a/tools/testing/selftests/resctrl/resctrlfs.c +++ b/tools/testing/selftests/resctrl/resctrlfs.c @@ -298,9 +298,9 @@ int taskset_benchmark(pid_t bm_pid, int cpu_no) void run_benchmark(int signum, siginfo_t *info, void *ucontext) { int operation, ret, malloc_and_init_memory, memflush; - size_t span, buffer_span; char **benchmark_cmd; char resctrl_val[64]; + size_t span; FILE *fp; benchmark_cmd = info->si_ptr; @@ -321,12 +321,7 @@ void run_benchmark(int signum, siginfo_t *info, void *ucontext) operation = atoi(benchmark_cmd[4]); sprintf(resctrl_val, "%s", benchmark_cmd[5]); - if (strncmp(resctrl_val, CMT_STR, sizeof(CMT_STR))) - buffer_span = span * MB; - else - buffer_span = span; - - if (run_fill_buf(buffer_span, malloc_and_init_memory, memflush, + if (run_fill_buf(span, malloc_and_init_memory, memflush, operation, resctrl_val)) fprintf(stderr, "Error in running fill buffer\n"); } else {