mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-05 18:41:58 +09:00
selftests/bpf: Use read_perf_max_sample_freq() in perf_event_stackmap
[ Upstream commitde6d014a09] Currently, perf_event sample period in perf_event_stackmap is set too low that the test fails randomly. Fix this by using the max sample frequency, from read_perf_max_sample_freq(). Move read_perf_max_sample_freq() to testing_helpers.c. Replace the CHECK() with if-printf, as CHECK is not available in testing_helpers.c. Fixes:1da4864c2b("selftests/bpf: Add callchain_stackid") Signed-off-by: Song Liu <song@kernel.org> Signed-off-by: Daniel Borkmann <daniel@iogearbox.net> Link: https://lore.kernel.org/bpf/20230412210423.900851-2-song@kernel.org Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
160fcf5c6b
commit
67c81ecbf7
@@ -63,7 +63,8 @@ void test_perf_event_stackmap(void)
|
|||||||
PERF_SAMPLE_BRANCH_NO_FLAGS |
|
PERF_SAMPLE_BRANCH_NO_FLAGS |
|
||||||
PERF_SAMPLE_BRANCH_NO_CYCLES |
|
PERF_SAMPLE_BRANCH_NO_CYCLES |
|
||||||
PERF_SAMPLE_BRANCH_CALL_STACK,
|
PERF_SAMPLE_BRANCH_CALL_STACK,
|
||||||
.sample_period = 5000,
|
.freq = 1,
|
||||||
|
.sample_freq = read_perf_max_sample_freq(),
|
||||||
.size = sizeof(struct perf_event_attr),
|
.size = sizeof(struct perf_event_attr),
|
||||||
};
|
};
|
||||||
struct perf_event_stackmap *skel;
|
struct perf_event_stackmap *skel;
|
||||||
|
|||||||
@@ -2,21 +2,6 @@
|
|||||||
#include <test_progs.h>
|
#include <test_progs.h>
|
||||||
#include "test_stacktrace_build_id.skel.h"
|
#include "test_stacktrace_build_id.skel.h"
|
||||||
|
|
||||||
static __u64 read_perf_max_sample_freq(void)
|
|
||||||
{
|
|
||||||
__u64 sample_freq = 5000; /* fallback to 5000 on error */
|
|
||||||
FILE *f;
|
|
||||||
__u32 duration = 0;
|
|
||||||
|
|
||||||
f = fopen("/proc/sys/kernel/perf_event_max_sample_rate", "r");
|
|
||||||
if (f == NULL)
|
|
||||||
return sample_freq;
|
|
||||||
CHECK(fscanf(f, "%llu", &sample_freq) != 1, "Get max sample rate",
|
|
||||||
"return default value: 5000,err %d\n", -errno);
|
|
||||||
fclose(f);
|
|
||||||
return sample_freq;
|
|
||||||
}
|
|
||||||
|
|
||||||
void test_stacktrace_build_id_nmi(void)
|
void test_stacktrace_build_id_nmi(void)
|
||||||
{
|
{
|
||||||
int control_map_fd, stackid_hmap_fd, stackmap_fd;
|
int control_map_fd, stackid_hmap_fd, stackmap_fd;
|
||||||
|
|||||||
@@ -229,3 +229,23 @@ int bpf_test_load_program(enum bpf_prog_type type, const struct bpf_insn *insns,
|
|||||||
|
|
||||||
return bpf_prog_load(type, NULL, license, insns, insns_cnt, &opts);
|
return bpf_prog_load(type, NULL, license, insns, insns_cnt, &opts);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
__u64 read_perf_max_sample_freq(void)
|
||||||
|
{
|
||||||
|
__u64 sample_freq = 5000; /* fallback to 5000 on error */
|
||||||
|
FILE *f;
|
||||||
|
|
||||||
|
f = fopen("/proc/sys/kernel/perf_event_max_sample_rate", "r");
|
||||||
|
if (f == NULL) {
|
||||||
|
printf("Failed to open /proc/sys/kernel/perf_event_max_sample_rate: err %d\n"
|
||||||
|
"return default value: 5000\n", -errno);
|
||||||
|
return sample_freq;
|
||||||
|
}
|
||||||
|
if (fscanf(f, "%llu", &sample_freq) != 1) {
|
||||||
|
printf("Failed to parse /proc/sys/kernel/perf_event_max_sample_rate: err %d\n"
|
||||||
|
"return default value: 5000\n", -errno);
|
||||||
|
}
|
||||||
|
|
||||||
|
fclose(f);
|
||||||
|
return sample_freq;
|
||||||
|
}
|
||||||
|
|||||||
@@ -20,3 +20,5 @@ struct test_filter_set;
|
|||||||
int parse_test_list(const char *s,
|
int parse_test_list(const char *s,
|
||||||
struct test_filter_set *test_set,
|
struct test_filter_set *test_set,
|
||||||
bool is_glob_pattern);
|
bool is_glob_pattern);
|
||||||
|
|
||||||
|
__u64 read_perf_max_sample_freq(void);
|
||||||
|
|||||||
Reference in New Issue
Block a user