]> git.baikalelectronics.ru Git - kernel.git/commit
bpf: Sharing bpf runtime stats with BPF_ENABLE_STATS
authorSong Liu <songliubraving@fb.com>
Thu, 30 Apr 2020 07:15:04 +0000 (00:15 -0700)
committerAlexei Starovoitov <ast@kernel.org>
Fri, 1 May 2020 17:36:32 +0000 (10:36 -0700)
commitf07ca418d9894dce0306bb928103d03eac616408
treeeee3bc7ad6740e4115f5df017b375ea8ea974829
parent378315ae021456d81821f09c525bc3a6a3f2cfec
bpf: Sharing bpf runtime stats with BPF_ENABLE_STATS

Currently, sysctl kernel.bpf_stats_enabled controls BPF runtime stats.
Typical userspace tools use kernel.bpf_stats_enabled as follows:

  1. Enable kernel.bpf_stats_enabled;
  2. Check program run_time_ns;
  3. Sleep for the monitoring period;
  4. Check program run_time_ns again, calculate the difference;
  5. Disable kernel.bpf_stats_enabled.

The problem with this approach is that only one userspace tool can toggle
this sysctl. If multiple tools toggle the sysctl at the same time, the
measurement may be inaccurate.

To fix this problem while keep backward compatibility, introduce a new
bpf command BPF_ENABLE_STATS. On success, this command enables stats and
returns a valid fd. BPF_ENABLE_STATS takes argument "type". Currently,
only one type, BPF_STATS_RUN_TIME, is supported. We can extend the
command to support other types of stats in the future.

With BPF_ENABLE_STATS, user space tool would have the following flow:

  1. Get a fd with BPF_ENABLE_STATS, and make sure it is valid;
  2. Check program run_time_ns;
  3. Sleep for the monitoring period;
  4. Check program run_time_ns again, calculate the difference;
  5. Close the fd.

Signed-off-by: Song Liu <songliubraving@fb.com>
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
Link: https://lore.kernel.org/bpf/20200430071506.1408910-2-songliubraving@fb.com
include/linux/bpf.h
include/uapi/linux/bpf.h
kernel/bpf/syscall.c
kernel/sysctl.c
tools/include/uapi/linux/bpf.h