Skip to content

Commit

Permalink
selftests/resctrl: Create cache_portion_size() helper
Browse files Browse the repository at this point in the history
CAT and CMT tests calculate size of the cache portion for the n-bits
cache allocation on their own.

Add cache_portion_size() helper that calculates size of the cache
portion for the given number of bits and use it to replace the existing
span calculations. This also prepares for the new CAT test that will
need to determine the size of the cache portion also during results
processing.

Rename also 'cache_size' local variables to 'cache_total_size' to
prevent misinterpretations.

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 60c2a69 commit 19e94a2
Show file tree
Hide file tree
Showing 3 changed files with 33 additions and 9 deletions.
10 changes: 5 additions & 5 deletions tools/testing/selftests/resctrl/cat_test.c
Original file line number Diff line number Diff line change
Expand Up @@ -91,7 +91,7 @@ int cat_perf_miss_val(int cpu_no, int n, char *cache_type)
{
unsigned long l_mask, l_mask_1;
int ret, pipefd[2], sibling_cpu_no;
unsigned long cache_size = 0;
unsigned long cache_total_size = 0;
unsigned long long_mask;
int count_of_bits;
char pipe_message;
Expand All @@ -102,10 +102,10 @@ int cat_perf_miss_val(int cpu_no, int n, char *cache_type)
return ret;

/* Get L3/L2 cache size */
ret = get_cache_size(cpu_no, cache_type, &cache_size);
ret = get_cache_size(cpu_no, cache_type, &cache_total_size);
if (ret)
return ret;
ksft_print_msg("Cache size :%lu\n", cache_size);
ksft_print_msg("Cache size :%lu\n", cache_total_size);

count_of_bits = count_bits(long_mask);

Expand Down Expand Up @@ -136,7 +136,7 @@ int cat_perf_miss_val(int cpu_no, int n, char *cache_type)
/* Set param values for parent thread which will be allocated bitmask
* with (max_bits - n) bits
*/
span = cache_size * (count_of_bits - n) / count_of_bits;
span = cache_portion_size(cache_total_size, l_mask, long_mask);
strcpy(param.ctrlgrp, "c2");
strcpy(param.mongrp, "m2");
strcpy(param.filename, RESULT_FILE_NAME2);
Expand All @@ -158,7 +158,7 @@ int cat_perf_miss_val(int cpu_no, int n, char *cache_type)
param.mask = l_mask_1;
strcpy(param.ctrlgrp, "c1");
strcpy(param.mongrp, "m1");
span = cache_size * n / count_of_bits;
span = cache_portion_size(cache_total_size, l_mask_1, long_mask);
strcpy(param.filename, RESULT_FILE_NAME1);
param.num_of_runs = 0;
param.cpu_no = sibling_cpu_no;
Expand Down
8 changes: 4 additions & 4 deletions tools/testing/selftests/resctrl/cmt_test.c
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,7 @@ int cmt_resctrl_val(int cpu_no, int n, const char * const *benchmark_cmd)
{
const char * const *cmd = benchmark_cmd;
const char *new_cmd[BENCHMARK_ARGS];
unsigned long cache_size = 0;
unsigned long cache_total_size = 0;
unsigned long long_mask;
char *span_str = NULL;
int count_of_bits;
Expand All @@ -83,10 +83,10 @@ int cmt_resctrl_val(int cpu_no, int n, const char * const *benchmark_cmd)
if (ret)
return ret;

ret = get_cache_size(cpu_no, "L3", &cache_size);
ret = get_cache_size(cpu_no, "L3", &cache_total_size);
if (ret)
return ret;
ksft_print_msg("Cache size :%lu\n", cache_size);
ksft_print_msg("Cache size :%lu\n", cache_total_size);

count_of_bits = count_bits(long_mask);

Expand All @@ -107,7 +107,7 @@ int cmt_resctrl_val(int cpu_no, int n, const char * const *benchmark_cmd)
.setup = cmt_setup,
};

span = cache_size * n / count_of_bits;
span = cache_portion_size(cache_total_size, param.mask, long_mask);

if (strcmp(cmd[0], "fill_buf") == 0) {
/* Duplicate the command to be able to replace span in it */
Expand Down
24 changes: 24 additions & 0 deletions tools/testing/selftests/resctrl/resctrl.h
Original file line number Diff line number Diff line change
Expand Up @@ -116,4 +116,28 @@ int show_cache_info(unsigned long sum_llc_val, int no_of_bits,
unsigned long max_diff_percent, unsigned long num_of_runs,
bool platform, bool cmt);

/*
* cache_portion_size - Calculate the size of a cache portion
* @cache_size: Total cache size in bytes
* @portion_mask: Cache portion mask
* @full_cache_mask: Full Cache Bit Mask (CBM) for the cache
*
* Return: The size of the cache portion in bytes.
*/
static inline unsigned long cache_portion_size(unsigned long cache_size,
unsigned long portion_mask,
unsigned long full_cache_mask)
{
unsigned int bits = count_bits(full_cache_mask);

/*
* With no bits the full CBM, assume cache cannot be split into
* smaller portions. To avoid divide by zero, return cache_size.
*/
if (!bits)
return cache_size;

return cache_size * count_bits(portion_mask) / bits;
}

#endif /* RESCTRL_H */

0 comments on commit 19e94a2

Please sign in to comment.