Re: [PATCH bpf-next v6 05/14] selftests/bpf: adding read_perf_max_sample_freq() helper

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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
>



[Index of Archives]     [Linux Samsung SoC]     [Linux Rockchip SoC]     [Linux Actions SoC]     [Linux for Synopsys ARC Processors]     [Linux NFS]     [Linux NILFS]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]


  Powered by Linux