Commit 03216ed7 authored by Fenghua Yu's avatar Fenghua Yu Committed by Shuah Khan
Browse files

selftests/resctrl: Share show_cache_info() by CAT and CMT tests



show_cache_info() functions are defined separately in CAT and CMT
tests. But the functions are same for the tests and unnecessary
to be defined separately. Share the function by the tests.

Suggested-by: default avatarShuah Khan <skhan@linuxfoundation.org>
Tested-by: default avatarBabu Moger <babu.moger@amd.com>
Signed-off-by: default avatarFenghua Yu <fenghua.yu@intel.com>
Signed-off-by: default avatarShuah Khan <skhan@linuxfoundation.org>
parent ca2f4214
Loading
Loading
Loading
Loading
+42 −0
Original line number Diff line number Diff line
@@ -270,3 +270,45 @@ int cat_val(struct resctrl_val_param *param)

	return ret;
}

/*
 * 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.
 */
int show_cache_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, bool cmt)
{
	unsigned long avg_llc_val = 0;
	float diff_percent;
	long avg_diff = 0;
	int ret;

	avg_llc_val = sum_llc_val / (num_of_runs - 1);
	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 cache miss rate within %d%%\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): %lu\n", cmt ? "bytes" : "lines",
		       cache_span);

	return ret;
}
+3 −25
Original line number Diff line number Diff line
@@ -52,30 +52,6 @@ static int cat_setup(int num, ...)
	return ret;
}

static int show_cache_info(unsigned long sum_llc_perf_miss, int no_of_bits,
			   unsigned long span)
{
	unsigned long allocated_cache_lines = span / 64;
	unsigned long avg_llc_perf_miss = 0;
	float diff_percent;
	int ret;

	avg_llc_perf_miss = sum_llc_perf_miss / (NUM_OF_RUNS - 1);
	diff_percent = ((float)allocated_cache_lines - avg_llc_perf_miss) /
				allocated_cache_lines * 100;

	ret = !is_amd && abs((int)diff_percent) > MAX_DIFF_PERCENT;
	ksft_print_msg("Cache miss rate %swithin %d%%\n",
		       ret ? "not " : "", 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("Avg_llc_perf_miss: %lu\n", avg_llc_perf_miss);
	ksft_print_msg("Allocated cache lines: %lu\n", allocated_cache_lines);

	return ret;
}

static int check_results(struct resctrl_val_param *param)
{
	char *token_array[8], temp[512];
@@ -111,7 +87,9 @@ static int check_results(struct resctrl_val_param *param)
	fclose(fp);
	no_of_bits = count_bits(param->mask);

	return show_cache_info(sum_llc_perf_miss, no_of_bits, param->span);
	return show_cache_info(sum_llc_perf_miss, no_of_bits, param->span / 64,
			       MAX_DIFF, MAX_DIFF_PERCENT, NUM_OF_RUNS,
			       !is_amd, false);
}

void cat_test_cleanup(void)
+3 −30
Original line number Diff line number Diff line
@@ -39,35 +39,6 @@ static int cmt_setup(int num, ...)
	return 0;
}

static int show_cache_info(unsigned long sum_llc_occu_resc, int no_of_bits,
			   unsigned long span)
{
	unsigned long avg_llc_occu_resc = 0;
	float diff_percent;
	long avg_diff = 0;
	int ret;

	avg_llc_occu_resc = sum_llc_occu_resc / (NUM_OF_RUNS - 1);
	avg_diff = (long)abs(span - avg_llc_occu_resc);

	diff_percent = (((float)span - avg_llc_occu_resc) / span) * 100;

	ret = (abs((int)diff_percent) > MAX_DIFF_PERCENT) &&
	      (abs(avg_diff) > MAX_DIFF);

	ksft_print_msg("%s cache miss diff within %d, %d\%%\n",
		       ret ? "Fail:" : "Pass:", MAX_DIFF, (int)MAX_DIFF_PERCENT);

	ksft_print_msg("Diff: %ld\n", avg_diff);
	ksft_print_msg("Percent diff=%d\n", abs((int)diff_percent));
	ksft_print_msg("Results are displayed in (Bytes)\n");
	ksft_print_msg("Number of bits: %d\n", no_of_bits);
	ksft_print_msg("Avg_llc_occu_resc: %lu\n", avg_llc_occu_resc);
	ksft_print_msg("llc_occu_exp (span): %lu\n", span);

	return ret;
}

static int check_results(struct resctrl_val_param *param, int no_of_bits)
{
	char *token_array[8], temp[512];
@@ -99,7 +70,9 @@ static int check_results(struct resctrl_val_param *param, int no_of_bits)
	}
	fclose(fp);

	return show_cache_info(sum_llc_occu_resc, no_of_bits, param->span);
	return show_cache_info(sum_llc_occu_resc, no_of_bits, param->span,
			       MAX_DIFF, MAX_DIFF_PERCENT, NUM_OF_RUNS,
			       true, true);
}

void cmt_test_cleanup(void)
+4 −0
Original line number Diff line number Diff line
@@ -108,5 +108,9 @@ unsigned int count_bits(unsigned long n);
void cmt_test_cleanup(void);
int get_core_sibling(int cpu_no);
int measure_cache_vals(struct resctrl_val_param *param, int bm_pid);
int show_cache_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, bool cmt);

#endif /* RESCTRL_H */