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 0c18603435c8a891356b0ae3f09d4d7a753b26a7..32e262fa2a6cb533a67f2670136a2157fe15ea2e 100644 (file)
@@ -279,43 +279,17 @@ int cat_val(struct resctrl_val_param *param, size_t span)
 }
 
 /*
- * 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 1e3c5432ecffaf595615542217efa038264b1873..0955f819bd83d29e86e8a9275ecbe8546694176c 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 a14d46353865c0d3ea6e0d9c5bf260e7d0d825a4..604690cd8b3e9d51dad56e39505a67ca826d8d88 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 3983226065f38bc3b1d19698b637580ec11bbc1b..47b871df2b0e6292a141fac8bf5c3e35a33a6164 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