linux/samples/bpf
Jesper Dangaard Brouer 417f1d9f21 samples/bpf: xdp_monitor include cpumap tracepoints in monitoring
The xdp_redirect_cpu sample have some "builtin" monitoring of the
tracepoints for xdp_cpumap_*, but it is practical to have an external
tool that can monitor these transpoint as an easy way to troubleshoot
an application using XDP + cpumap.

Specifically I need such external tool when working on Suricata and
XDP cpumap redirect. Extend the xdp_monitor tool sample with
monitoring of these xdp_cpumap_* tracepoints.  Model the output format
like xdp_redirect_cpu.

Given I needed to handle per CPU decoding for cpumap, this patch also
add per CPU info on the existing monitor events.  This resembles part
of the builtin monitoring output from sample xdp_rxq_info.  Thus, also
covering part of that sample in an external monitoring tool.

Performance wise, the cpumap tracepoints uses bulking, which cause
them to have very little overhead.  Thus, they are enabled by default.

Signed-off-by: Jesper Dangaard Brouer <brouer@redhat.com>
Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
2018-01-20 02:10:55 +01:00
..
bpf_load.c samples/bpf: add error checking for perf ioctl calls in bpf loader 2017-12-01 02:59:21 +01:00
bpf_load.h License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
cookie_uid_helper_example.c samples/bpf: run cleanup routines when receiving SIGTERM 2017-05-11 21:43:30 -04:00
fds_example.c samples/bpf: Move open_raw_sock to separate header 2016-12-20 12:00:40 -03:00
lathist_kern.c bpf: BPF based latency tracing 2015-06-23 06:09:58 -07:00
lathist_user.c samples/bpf: Make samples more libbpf-centric 2016-12-15 16:25:47 -03:00
libbpf.h License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
load_sock_ops.c bpf: program to load and attach sock_ops BPF progs 2017-07-01 16:15:13 -07:00
lwt_len_hist_kern.c bpf: Add tests and samples for LWT-BPF 2016-12-02 10:52:00 -05:00
lwt_len_hist_user.c License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
lwt_len_hist.sh License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
Makefile samples/bpf: xdp2skb_meta shows transferring info from XDP to SKB 2018-01-11 01:02:25 +01:00
map_perf_test_kern.c samples/bpf: Use getppid instead of getpgrp for array map stress 2017-09-21 11:59:16 -07:00
map_perf_test_user.c bpf: libbpf: Provide basic API support to specify BPF obj name 2017-09-29 06:17:05 +01:00
offwaketime_kern.c bpf, samples: don't zero data when not needed 2016-04-14 21:40:42 -04:00
offwaketime_user.c samples/bpf: run cleanup routines when receiving SIGTERM 2017-05-11 21:43:30 -04:00
parse_ldabs.c bpf: fix samples to add fake KBUILD_MODNAME 2016-10-29 14:46:12 -04:00
parse_simple.c bpf: fix samples to add fake KBUILD_MODNAME 2016-10-29 14:46:12 -04:00
parse_varlen.c bpf: fix samples to add fake KBUILD_MODNAME 2016-10-29 14:46:12 -04:00
README.rst samples/bpf: Add documentation on cross compilation 2017-09-21 11:59:16 -07:00
run_cookie_uid_helper_example.sh License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
sampleip_kern.c bpf/samples: Fix PT_REGS_IP on s390x and use it 2016-11-28 16:26:46 -05:00
sampleip_user.c samples/bpf: run cleanup routines when receiving SIGTERM 2017-05-11 21:43:30 -04:00
sock_example.c samples/bpf: Move open_raw_sock to separate header 2016-12-20 12:00:40 -03:00
sock_example.h License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
sock_flags_kern.c samples/bpf: Update cgroup socket examples to use uid gid helper 2017-09-01 06:05:15 +01:00
sockex1_kern.c samples: bpf: add skb->field examples and tests 2015-03-15 22:02:28 -04:00
sockex1_user.c License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
sockex2_kern.c samples/bpf: fix sockex2 example 2016-11-24 16:04:52 -05:00
sockex2_user.c License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
sockex3_kern.c bpf samples: fix compiler errors with sockex2 and sockex3 2016-09-27 03:48:58 -04:00
sockex3_user.c License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
spintest_kern.c samples/bpf: Enable powerpc support 2016-04-06 16:01:29 -04:00
spintest_user.c License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
syscall_nrs.c License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
syscall_tp_kern.c bpf: add a test case for syscalls/sys_{enter|exit}_* tracepoints 2017-08-07 14:09:48 -07:00
syscall_tp_user.c bpf: add a test case to test single tp multiple bpf attachment 2017-10-25 10:47:47 +09:00
tc_l2_redirect_kern.c bpf: fix samples xdp_tx_iptunnel and tc_l2_redirect with fake KBUILD_MODNAME 2017-01-20 12:04:07 -05:00
tc_l2_redirect_user.c samples/bpf: Make samples more libbpf-centric 2016-12-15 16:25:47 -03:00
tc_l2_redirect.sh License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
tcbpf1_kern.c bpf: fix samples to add fake KBUILD_MODNAME 2016-10-29 14:46:12 -04:00
tcbpf2_kern.c samples/bpf: add erspan v2 sample code 2017-12-15 12:34:00 -05:00
tcp_basertt_kern.c bpf: sample BPF_SOCKET_OPS_BASE_RTT program 2017-10-22 03:12:05 +01:00
tcp_bpf.readme bpf: Rename tcp_bbf.readme to tcp_bpf.readme 2017-11-08 12:13:41 +09:00
tcp_bufs_kern.c bpf: Fix tcp_bufs_kern.c sample program 2017-11-11 15:52:41 +09:00
tcp_clamp_kern.c bpf: Fix tcp_clamp_kern.c sample program 2017-11-11 15:52:41 +09:00
tcp_cong_kern.c bpf: Fix tcp_cong_kern.c sample program 2017-11-11 15:52:41 +09:00
tcp_iw_kern.c bpf: Fix tcp_iw_kern.c sample program 2017-11-11 15:52:41 +09:00
tcp_rwnd_kern.c bpf: Fix tcp_rwnd_kern.c sample program 2017-11-11 15:52:41 +09:00
tcp_synrto_kern.c bpf: Fix tcp_synrto_kern.c sample program 2017-11-11 15:52:41 +09:00
test_cgrp2_array_pin.c samples/bpf: Make samples more libbpf-centric 2016-12-15 16:25:47 -03:00
test_cgrp2_attach2.c samples/bpf: Convert magic numbers to names in multi-prog cgroup test case 2017-11-30 19:58:11 +01:00
test_cgrp2_attach.c bpf: introduce BPF_F_ALLOW_OVERRIDE flag 2017-02-12 21:52:19 -05:00
test_cgrp2_sock2.c License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
test_cgrp2_sock2.sh License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
test_cgrp2_sock.c samples/bpf: Update cgroup socket examples to use uid gid helper 2017-09-01 06:05:15 +01:00
test_cgrp2_sock.sh License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
test_cgrp2_tc_kern.c bpf: fix samples to add fake KBUILD_MODNAME 2016-10-29 14:46:12 -04:00
test_cgrp2_tc.sh License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
test_cls_bpf.sh License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
test_current_task_under_cgroup_kern.c samples/bpf: Add test_current_task_under_cgroup test 2016-08-12 21:49:42 -07:00
test_current_task_under_cgroup_user.c samples/bpf: Make samples more libbpf-centric 2016-12-15 16:25:47 -03:00
test_ipip.sh License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
test_lru_dist.c samples/bpf: check before defining offsetof 2017-04-24 16:20:19 -04:00
test_lwt_bpf.c bpf: Add tests and samples for LWT-BPF 2016-12-02 10:52:00 -05:00
test_lwt_bpf.sh License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
test_map_in_map_kern.c bpf: Add tests for map-in-map 2017-03-22 15:45:45 -07:00
test_map_in_map_user.c bpf: Add test for syscall on fd array/htab lookup 2017-06-29 13:13:26 -04:00
test_overhead_kprobe_kern.c samples/bpf: add tracepoint vs kprobe performance tests 2016-04-07 21:04:27 -04:00
test_overhead_tp_kern.c samples/bpf: add tracepoint vs kprobe performance tests 2016-04-07 21:04:27 -04:00
test_overhead_user.c samples/bpf: add tracepoint vs kprobe performance tests 2016-04-07 21:04:27 -04:00
test_override_return.sh samples/bpf: add a test for bpf_override_return 2017-12-12 09:02:40 -08:00
test_probe_write_user_kern.c samples/bpf: Add test/example of using bpf_probe_write_user bpf helper 2016-07-25 18:07:48 -07:00
test_probe_write_user_user.c License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
test_tunnel_bpf.sh samples/bpf: add erspan v2 sample code 2017-12-15 12:34:00 -05:00
trace_event_kern.c bpf: add a test case for helper bpf_perf_prog_read_value 2017-10-07 23:05:57 +01:00
trace_event_user.c bpf: add a test case for helper bpf_perf_prog_read_value 2017-10-07 23:05:57 +01:00
trace_output_kern.c samples/bpf: fix trace_output example 2016-04-28 17:29:45 -04:00
trace_output_user.c samples/bpf trace_output_user: Remove duplicate sys/ioctl.h include 2016-12-28 10:47:13 -03:00
tracex1_kern.c bpf, samples: don't zero data when not needed 2016-04-14 21:40:42 -04:00
tracex1_user.c License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
tracex2_kern.c bpf, samples: don't zero data when not needed 2016-04-14 21:40:42 -04:00
tracex2_user.c License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
tracex3_kern.c samples/bpf: update tracex[23] examples to use per-cpu maps 2016-02-06 03:34:36 -05:00
tracex3_user.c samples/bpf: adjust rlimit RLIMIT_MEMLOCK for traceex2, tracex3 and tracex4 2017-05-03 09:30:23 -04:00
tracex4_kern.c samples/bpf: Enable powerpc support 2016-04-06 16:01:29 -04:00
tracex4_user.c samples/bpf: adjust rlimit RLIMIT_MEMLOCK for traceex2, tracex3 and tracex4 2017-05-03 09:30:23 -04:00
tracex5_kern.c samples/bpf: Fix tracex5 to work with MIPS syscalls. 2017-06-14 15:03:23 -04:00
tracex5_user.c License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
tracex6_kern.c bpf: add a test case for helper bpf_perf_event_read_value 2017-10-07 23:05:57 +01:00
tracex6_user.c Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net 2017-11-04 09:26:51 +09:00
tracex7_kern.c samples/bpf: add a test for bpf_override_return 2017-12-12 09:02:40 -08:00
tracex7_user.c samples/bpf: add a test for bpf_override_return 2017-12-12 09:02:40 -08:00
xdp1_kern.c bpf: make xdp sample variable names more meaningful 2016-07-20 22:07:24 -07:00
xdp1_user.c samples/bpf: adjust rlimit RLIMIT_MEMLOCK for xdp1 2017-10-29 12:17:13 +09:00
xdp2_kern.c bpf: make xdp sample variable names more meaningful 2016-07-20 22:07:24 -07:00
xdp2skb_meta_kern.c samples/bpf: xdp2skb_meta comment explain why pkt-data pointers are invalidated 2018-01-18 01:49:09 +01:00
xdp2skb_meta.sh samples/bpf: xdp2skb_meta shows transferring info from XDP to SKB 2018-01-11 01:02:25 +01:00
xdp_monitor_kern.c samples/bpf: xdp_monitor include cpumap tracepoints in monitoring 2018-01-20 02:10:55 +01:00
xdp_monitor_user.c samples/bpf: xdp_monitor include cpumap tracepoints in monitoring 2018-01-20 02:10:55 +01:00
xdp_redirect_cpu_kern.c samples/bpf: add cpumap sample program xdp_redirect_cpu 2017-10-18 12:12:18 +01:00
xdp_redirect_cpu_user.c samples/bpf: add cpumap sample program xdp_redirect_cpu 2017-10-18 12:12:18 +01:00
xdp_redirect_kern.c samples/bpf: Fix compilation issue in redirect dummy program 2017-08-31 11:56:57 -07:00
xdp_redirect_map_kern.c samples/bpf: Fix compilation issue in redirect dummy program 2017-08-31 11:56:57 -07:00
xdp_redirect_map_user.c samples/bpf: adjust rlimit RLIMIT_MEMLOCK for xdp_redirect_map 2017-10-29 12:17:32 +09:00
xdp_redirect_user.c samples/bpf: xdp_redirect load XDP dummy prog on TX device 2017-08-29 10:51:29 -07:00
xdp_router_ipv4_kern.c xdp: Sample xdp program implementing ip forward 2017-11-08 10:39:41 +09:00
xdp_router_ipv4_user.c xdp: sample: Missing curly braces in read_route() 2017-11-14 22:00:13 +09:00
xdp_rxq_info_kern.c samples/bpf: program demonstrating access to xdp_rxq_info 2018-01-05 15:21:22 -08:00
xdp_rxq_info_user.c samples/bpf: program demonstrating access to xdp_rxq_info 2018-01-05 15:21:22 -08:00
xdp_tx_iptunnel_common.h bpf: xdp: Add XDP example for head adjustment 2016-12-08 14:25:13 -05:00
xdp_tx_iptunnel_kern.c bpf: fix samples xdp_tx_iptunnel and tc_l2_redirect with fake KBUILD_MODNAME 2017-01-20 12:04:07 -05:00
xdp_tx_iptunnel_user.c samples/bpf: run cleanup routines when receiving SIGTERM 2017-05-11 21:43:30 -04:00

eBPF sample programs
====================

This directory contains a test stubs, verifier test-suite and examples
for using eBPF. The examples use libbpf from tools/lib/bpf.

Build dependencies
==================

Compiling requires having installed:
 * clang >= version 3.4.0
 * llvm >= version 3.7.1

Note that LLVM's tool 'llc' must support target 'bpf', list version
and supported targets with command: ``llc --version``

Kernel headers
--------------

There are usually dependencies to header files of the current kernel.
To avoid installing devel kernel headers system wide, as a normal
user, simply call::

 make headers_install

This will creates a local "usr/include" directory in the git/build top
level directory, that the make system automatically pickup first.

Compiling
=========

For building the BPF samples, issue the below command from the kernel
top level directory::

 make samples/bpf/

Do notice the "/" slash after the directory name.

It is also possible to call make from this directory.  This will just
hide the the invocation of make as above with the appended "/".

Manually compiling LLVM with 'bpf' support
------------------------------------------

Since version 3.7.0, LLVM adds a proper LLVM backend target for the
BPF bytecode architecture.

By default llvm will build all non-experimental backends including bpf.
To generate a smaller llc binary one can use::

 -DLLVM_TARGETS_TO_BUILD="BPF"

Quick sniplet for manually compiling LLVM and clang
(build dependencies are cmake and gcc-c++)::

 $ git clone http://llvm.org/git/llvm.git
 $ cd llvm/tools
 $ git clone --depth 1 http://llvm.org/git/clang.git
 $ cd ..; mkdir build; cd build
 $ cmake .. -DLLVM_TARGETS_TO_BUILD="BPF;X86"
 $ make -j $(getconf _NPROCESSORS_ONLN)

It is also possible to point make to the newly compiled 'llc' or
'clang' command via redefining LLC or CLANG on the make command line::

 make samples/bpf/ LLC=~/git/llvm/build/bin/llc CLANG=~/git/llvm/build/bin/clang

Cross compiling samples
-----------------------
In order to cross-compile, say for arm64 targets, export CROSS_COMPILE and ARCH
environment variables before calling make. This will direct make to build
samples for the cross target.

export ARCH=arm64
export CROSS_COMPILE="aarch64-linux-gnu-"
make samples/bpf/ LLC=~/git/llvm/build/bin/llc CLANG=~/git/llvm/build/bin/clang