Skip to content

Commit

Permalink
selftests/resctrl: Remove nested calls in perf event handling
Browse files Browse the repository at this point in the history
Perf event handling has functions that are the sole caller of another
perf event handling related function:
  - reset_enable_llc_perf() calls perf_event_open_llc_miss()
  - perf_event_measure() calls get_llc_perf()

Remove the extra layer of calls to make the code easier to follow by
moving the code into the calling function.

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 33403bc commit 3c6bfc9
Showing 1 changed file with 14 additions and 50 deletions.
64 changes: 14 additions & 50 deletions tools/testing/selftests/resctrl/cache.c
Original file line number Diff line number Diff line change
Expand Up @@ -29,24 +29,13 @@ static void initialize_perf_event_attr(void)
pea_llc_miss.disabled = 1;
}

/* Start counters to log values */
static void ioctl_perf_event_ioc_reset_enable(void)
{
ioctl(fd_lm, PERF_EVENT_IOC_RESET, 0);
ioctl(fd_lm, PERF_EVENT_IOC_ENABLE, 0);
}

static int perf_event_open_llc_miss(pid_t pid, int cpu_no)
{
fd_lm = perf_event_open(&pea_llc_miss, pid, cpu_no, -1,
PERF_FLAG_FD_CLOEXEC);
if (fd_lm == -1) {
ksft_perror("Error opening leader");
return -1;
}

return 0;
}

static void initialize_llc_perf(void)
{
memset(&pea_llc_miss, 0, sizeof(struct perf_event_attr));
Expand All @@ -62,42 +51,13 @@ static void initialize_llc_perf(void)

static int reset_enable_llc_perf(pid_t pid, int cpu_no)
{
int ret = 0;

ret = perf_event_open_llc_miss(pid, cpu_no);
if (ret < 0)
return ret;

/* Start counters to log values */
ioctl_perf_event_ioc_reset_enable();

return 0;
}

/*
* get_llc_perf: llc cache miss through perf events
* @llc_perf_miss: LLC miss counter that is filled on success
*
* Perf events like HW_CACHE_MISSES could be used to validate number of
* cache lines allocated.
*
* Return: =0 on success. <0 on failure.
*/
static int get_llc_perf(__u64 *llc_perf_miss)
{
int ret;

/* Stop counters after one span to get miss rate */

ioctl(fd_lm, PERF_EVENT_IOC_DISABLE, 0);

ret = read(fd_lm, &rf_cqm, sizeof(struct read_format));
if (ret == -1) {
ksft_perror("Could not get llc misses through perf");
fd_lm = perf_event_open(&pea_llc_miss, pid, cpu_no, -1, PERF_FLAG_FD_CLOEXEC);
if (fd_lm == -1) {
ksft_perror("Error opening leader");
return -1;
}

*llc_perf_miss = rf_cqm.values[0].value;
ioctl_perf_event_ioc_reset_enable();

return 0;
}
Expand Down Expand Up @@ -178,14 +138,18 @@ static int print_results_cache(const char *filename, int bm_pid, __u64 llc_value
*/
static int perf_event_measure(const char *filename, int bm_pid)
{
__u64 llc_perf_miss = 0;
int ret;

ret = get_llc_perf(&llc_perf_miss);
if (ret < 0)
return ret;
/* Stop counters after one span to get miss rate */
ioctl(fd_lm, PERF_EVENT_IOC_DISABLE, 0);

ret = read(fd_lm, &rf_cqm, sizeof(struct read_format));
if (ret == -1) {
ksft_perror("Could not get perf value");
return -1;
}

return print_results_cache(filename, bm_pid, llc_perf_miss);
return print_results_cache(filename, bm_pid, rf_cqm.values[0].value);
}

/*
Expand Down

0 comments on commit 3c6bfc9

Please sign in to comment.