On Wed, Oct 6, 2021 at 11:56 AM Yucong Sun <fallentree@xxxxxx> wrote: > > From: Yucong Sun <sunyucong@xxxxxxxxx> > > This patch moved a helper function to test_progs and make all tests > setting sampling frequency use it to read current perf_max_sample_freq, > this will avoid triggering EINVAL error. > > Signed-off-by: Yucong Sun <sunyucong@xxxxxxxxx> > --- > .../selftests/bpf/prog_tests/bpf_cookie.c | 2 +- > .../selftests/bpf/prog_tests/perf_branches.c | 4 ++-- > .../selftests/bpf/prog_tests/perf_link.c | 2 +- > .../bpf/prog_tests/stacktrace_build_id_nmi.c | 19 ++----------------- > tools/testing/selftests/bpf/test_progs.c | 15 +++++++++++++++ > tools/testing/selftests/bpf/test_progs.h | 1 + > 6 files changed, 22 insertions(+), 21 deletions(-) > We have trace_helper.c, seems like it would be better to have it there? I haven't applied this patch yet. [...] > @@ -48,6 +31,8 @@ void test_stacktrace_build_id_nmi(void) > if (CHECK(err, "skel_load", "skeleton load failed: %d\n", err)) > goto cleanup; > > + attr.sample_freq = read_perf_max_sample_freq(); > + > pmu_fd = syscall(__NR_perf_event_open, &attr, -1 /* pid */, > 0 /* cpu 0 */, -1 /* group id */, > 0 /* flags */); > diff --git a/tools/testing/selftests/bpf/test_progs.c b/tools/testing/selftests/bpf/test_progs.c > index 2ac922f8aa2c..66825313414b 100644 > --- a/tools/testing/selftests/bpf/test_progs.c > +++ b/tools/testing/selftests/bpf/test_progs.c > @@ -1500,3 +1500,18 @@ int main(int argc, char **argv) > > return env.fail_cnt ? EXIT_FAILURE : EXIT_SUCCESS; > } > + > +__u64 read_perf_max_sample_freq(void) > +{ > + __u64 sample_freq = 1000; /* fallback to 1000 on error */ previous default was 5000, message below still claims 5000, what's the reason for changing it? > + 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; > +} > diff --git a/tools/testing/selftests/bpf/test_progs.h b/tools/testing/selftests/bpf/test_progs.h > index b239dc9fcef0..d5ca0d36cc96 100644 > --- a/tools/testing/selftests/bpf/test_progs.h > +++ b/tools/testing/selftests/bpf/test_progs.h > @@ -327,6 +327,7 @@ int extract_build_id(char *build_id, size_t size); > int kern_sync_rcu(void); > int trigger_module_test_read(int read_sz); > int trigger_module_test_write(int write_sz); > +__u64 read_perf_max_sample_freq(void); > > #ifdef __x86_64__ > #define SYS_NANOSLEEP_KPROBE_NAME "__x64_sys_nanosleep" > -- > 2.30.2 >