Skip to content

Commit

Permalink
selftests/resctrl: Split show_cache_info() to test specific and gener…
Browse files Browse the repository at this point in the history
…ic parts

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>
  • Loading branch information
Ilpo Järvinen authored and Shuah Khan committed Feb 13, 2024
1 parent a575c97 commit 5caf1b6
Show file tree
Hide file tree
Showing 4 changed files with 66 additions and 44 deletions.
42 changes: 8 additions & 34 deletions tools/testing/selftests/resctrl/cache.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
}
30 changes: 27 additions & 3 deletions tools/testing/selftests/resctrl/cat_test.c
Original file line number Diff line number Diff line change
Expand Up @@ -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];
Expand Down Expand Up @@ -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)
Expand Down
32 changes: 29 additions & 3 deletions tools/testing/selftests/resctrl/cmt_test.c
Original file line number Diff line number Diff line change
Expand Up @@ -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];
Expand Down Expand Up @@ -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)
Expand Down
6 changes: 2 additions & 4 deletions tools/testing/selftests/resctrl/resctrl.h
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down

0 comments on commit 5caf1b6

Please sign in to comment.