selftests/resctrl: Split show_cache_info() to test specific and generic parts
authorIlpo Järvinen <ilpo.jarvinen@linux.intel.com>
Fri, 15 Dec 2023 15:04:58 +0000 (17:04 +0200)
committerShuah Khan <skhan@linuxfoundation.org>
Tue, 13 Feb 2024 20:56:44 +0000 (13:56 -0700)
show_cache_info() calculates results and provides generic cache
information. This makes it hard to alter pass/fail conditions.

Separate the test specific checks into CAT and CMT test files and
leave only the generic information part into show_cache_info().

Signed-off-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
Reviewed-by: Reinette Chatre <reinette.chatre@intel.com>
Signed-off-by: Shuah Khan <skhan@linuxfoundation.org>
tools/testing/selftests/resctrl/cache.c
tools/testing/selftests/resctrl/cat_test.c
tools/testing/selftests/resctrl/cmt_test.c
tools/testing/selftests/resctrl/resctrl.h

index 0c18603..32e262f 100644 (file)
@@ -279,43 +279,17 @@ pe_close:
 }
 
 /*
- * show_cache_info:    show cache test result information
- * @sum_llc_val:       sum of LLC cache result data
- * @no_of_bits:                number of bits
- * @cache_span:                cache span in bytes for CMT or in lines for CAT
- * @max_diff:          max difference
- * @max_diff_percent:  max difference percentage
- * @num_of_runs:       number of runs
- * @platform:          show test information on this platform
- * @cmt:               CMT test or CAT test
- *
- * Return:             0 on success. non-zero on failure.
+ * show_cache_info - Show generic cache test information
+ * @no_of_bits:                Number of bits
+ * @avg_llc_val:       Average of LLC cache result data
+ * @cache_span:                Cache span
+ * @lines:             @cache_span in lines or bytes
  */
-int show_cache_info(unsigned long sum_llc_val, int no_of_bits,
-                   size_t cache_span, unsigned long max_diff,
-                   unsigned long max_diff_percent, unsigned long num_of_runs,
-                   bool platform, bool cmt)
+void show_cache_info(int no_of_bits, unsigned long avg_llc_val,
+                    size_t cache_span, bool lines)
 {
-       unsigned long avg_llc_val = 0;
-       float diff_percent;
-       long avg_diff = 0;
-       int ret;
-
-       avg_llc_val = sum_llc_val / num_of_runs;
-       avg_diff = (long)abs(cache_span - avg_llc_val);
-       diff_percent = ((float)cache_span - avg_llc_val) / cache_span * 100;
-
-       ret = platform && abs((int)diff_percent) > max_diff_percent &&
-             (cmt ? (abs(avg_diff) > max_diff) : true);
-
-       ksft_print_msg("%s Check cache miss rate within %lu%%\n",
-                      ret ? "Fail:" : "Pass:", max_diff_percent);
-
-       ksft_print_msg("Percent diff=%d\n", abs((int)diff_percent));
        ksft_print_msg("Number of bits: %d\n", no_of_bits);
        ksft_print_msg("Average LLC val: %lu\n", avg_llc_val);
-       ksft_print_msg("Cache span (%s): %zu\n", cmt ? "bytes" : "lines",
+       ksft_print_msg("Cache span (%s): %zu\n", lines ? "lines" : "bytes",
                       cache_span);
-
-       return ret;
 }
index 1e3c543..0955f81 100644 (file)
@@ -41,6 +41,30 @@ static int cat_setup(struct resctrl_val_param *p)
        return ret;
 }
 
+static int show_results_info(unsigned long sum_llc_val, int no_of_bits,
+                            unsigned long cache_span, unsigned long max_diff,
+                            unsigned long max_diff_percent, unsigned long num_of_runs,
+                            bool platform)
+{
+       unsigned long avg_llc_val = 0;
+       float diff_percent;
+       int ret;
+
+       avg_llc_val = sum_llc_val / num_of_runs;
+       diff_percent = ((float)cache_span - avg_llc_val) / cache_span * 100;
+
+       ret = platform && abs((int)diff_percent) > max_diff_percent;
+
+       ksft_print_msg("%s Check cache miss rate within %lu%%\n",
+                      ret ? "Fail:" : "Pass:", max_diff_percent);
+
+       ksft_print_msg("Percent diff=%d\n", abs((int)diff_percent));
+
+       show_cache_info(no_of_bits, avg_llc_val, cache_span, true);
+
+       return ret;
+}
+
 static int check_results(struct resctrl_val_param *param, size_t span)
 {
        char *token_array[8], temp[512];
@@ -76,9 +100,9 @@ static int check_results(struct resctrl_val_param *param, size_t span)
        fclose(fp);
        no_of_bits = count_bits(param->mask);
 
-       return show_cache_info(sum_llc_perf_miss, no_of_bits, span / 64,
-                              MAX_DIFF, MAX_DIFF_PERCENT, runs - 1,
-                              get_vendor() == ARCH_INTEL, false);
+       return show_results_info(sum_llc_perf_miss, no_of_bits, span / 64,
+                                MAX_DIFF, MAX_DIFF_PERCENT, runs - 1,
+                                get_vendor() == ARCH_INTEL);
 }
 
 void cat_test_cleanup(void)
index a14d463..604690c 100644 (file)
@@ -27,6 +27,33 @@ static int cmt_setup(struct resctrl_val_param *p)
        return 0;
 }
 
+static int show_results_info(unsigned long sum_llc_val, int no_of_bits,
+                            unsigned long cache_span, unsigned long max_diff,
+                            unsigned long max_diff_percent, unsigned long num_of_runs,
+                            bool platform)
+{
+       unsigned long avg_llc_val = 0;
+       float diff_percent;
+       long avg_diff = 0;
+       int ret;
+
+       avg_llc_val = sum_llc_val / num_of_runs;
+       avg_diff = (long)abs(cache_span - avg_llc_val);
+       diff_percent = ((float)cache_span - avg_llc_val) / cache_span * 100;
+
+       ret = platform && abs((int)diff_percent) > max_diff_percent &&
+             abs(avg_diff) > max_diff;
+
+       ksft_print_msg("%s Check cache miss rate within %lu%%\n",
+                      ret ? "Fail:" : "Pass:", max_diff_percent);
+
+       ksft_print_msg("Percent diff=%d\n", abs((int)diff_percent));
+
+       show_cache_info(no_of_bits, avg_llc_val, cache_span, false);
+
+       return ret;
+}
+
 static int check_results(struct resctrl_val_param *param, size_t span, int no_of_bits)
 {
        char *token_array[8], temp[512];
@@ -58,9 +85,8 @@ static int check_results(struct resctrl_val_param *param, size_t span, int no_of
        }
        fclose(fp);
 
-       return show_cache_info(sum_llc_occu_resc, no_of_bits, span,
-                              MAX_DIFF, MAX_DIFF_PERCENT, runs - 1,
-                              true, true);
+       return show_results_info(sum_llc_occu_resc, no_of_bits, span,
+                                MAX_DIFF, MAX_DIFF_PERCENT, runs - 1, true);
 }
 
 void cmt_test_cleanup(void)
index 3983226..47b871d 100644 (file)
@@ -113,10 +113,8 @@ unsigned int count_bits(unsigned long n);
 void cmt_test_cleanup(void);
 int get_core_sibling(int cpu_no);
 int measure_llc_resctrl(const char *filename, int bm_pid);
-int show_cache_info(unsigned long sum_llc_val, int no_of_bits,
-                   size_t cache_span, unsigned long max_diff,
-                   unsigned long max_diff_percent, unsigned long num_of_runs,
-                   bool platform, bool cmt);
+void show_cache_info(int no_of_bits, unsigned long avg_llc_val,
+                    size_t cache_span, bool lines);
 
 /*
  * cache_portion_size - Calculate the size of a cache portion