mirror_ubuntu-kernels/tools/testing/selftests/bpf/progs
Andrii Nakryiko c97099b0f2 bpf: Add BPF ringbuf and perf buffer benchmarks
Extend bench framework with ability to have benchmark-provided child argument
parser for custom benchmark-specific parameters. This makes bench generic code
modular and independent from any specific benchmark.

Also implement a set of benchmarks for new BPF ring buffer and existing perf
buffer. 4 benchmarks were implemented: 2 variations for each of BPF ringbuf
and perfbuf:,
  - rb-libbpf utilizes stock libbpf ring_buffer manager for reading data;
  - rb-custom implements custom ring buffer setup and reading code, to
    eliminate overheads inherent in generic libbpf code due to callback
    functions and the need to update consumer position after each consumed
    record, instead of batching updates (due to pessimistic assumption that
    user callback might take long time and thus could unnecessarily hold ring
    buffer space for too long);
  - pb-libbpf uses stock libbpf perf_buffer code with all the default
    settings, though uses higher-performance raw event callback to minimize
    unnecessary overhead;
  - pb-custom implements its own custom consumer code to minimize any possible
    overhead of generic libbpf implementation and indirect function calls.

All of the test support default, no data notification skipped, mode, as well
as sampled mode (with --rb-sampled flag), which allows to trigger epoll
notification less frequently and reduce overhead. As will be shown, this mode
is especially critical for perf buffer, which suffers from high overhead of
wakeups in kernel.

Otherwise, all benchamrks implement similar way to generate a batch of records
by using fentry/sys_getpgid BPF program, which pushes a bunch of records in
a tight loop and records number of successful and dropped samples. Each record
is a small 8-byte integer, to minimize the effect of memory copying with
bpf_perf_event_output() and bpf_ringbuf_output().

Benchmarks that have only one producer implement optional back-to-back mode,
in which record production and consumption is alternating on the same CPU.
This is the highest-throughput happy case, showing ultimate performance
achievable with either BPF ringbuf or perfbuf.

All the below scenarios are implemented in a script in
benchs/run_bench_ringbufs.sh. Tests were performed on 28-core/56-thread
Intel Xeon CPU E5-2680 v4 @ 2.40GHz CPU.

Single-producer, parallel producer
==================================
rb-libbpf            12.054 ± 0.320M/s (drops 0.000 ± 0.000M/s)
rb-custom            8.158 ± 0.118M/s (drops 0.001 ± 0.003M/s)
pb-libbpf            0.931 ± 0.007M/s (drops 0.000 ± 0.000M/s)
pb-custom            0.965 ± 0.003M/s (drops 0.000 ± 0.000M/s)

Single-producer, parallel producer, sampled notification
========================================================
rb-libbpf            11.563 ± 0.067M/s (drops 0.000 ± 0.000M/s)
rb-custom            15.895 ± 0.076M/s (drops 0.000 ± 0.000M/s)
pb-libbpf            9.889 ± 0.032M/s (drops 0.000 ± 0.000M/s)
pb-custom            9.866 ± 0.028M/s (drops 0.000 ± 0.000M/s)

Single producer on one CPU, consumer on another one, both running at full
speed. Curiously, rb-libbpf has higher throughput than objectively faster (due
to more lightweight consumer code path) rb-custom. It appears that faster
consumer causes kernel to send notifications more frequently, because consumer
appears to be caught up more frequently. Performance of perfbuf suffers from
default "no sampling" policy and huge overhead that causes.

In sampled mode, rb-custom is winning very significantly eliminating too
frequent in-kernel wakeups, the gain appears to be more than 2x.

Perf buffer achieves even more impressive wins, compared to stock perfbuf
settings, with 10x improvements in throughput with 1:500 sampling rate. The
trade-off is that with sampling, application might not get next X events until
X+1st arrives, which is not always acceptable. With steady influx of events,
though, this shouldn't be a problem.

Overall, single-producer performance of ring buffers seems to be better no
matter the sampled/non-sampled modes, but it especially beats ring buffer
without sampling due to its adaptive notification approach.

Single-producer, back-to-back mode
==================================
rb-libbpf            15.507 ± 0.247M/s (drops 0.000 ± 0.000M/s)
rb-libbpf-sampled    14.692 ± 0.195M/s (drops 0.000 ± 0.000M/s)
rb-custom            21.449 ± 0.157M/s (drops 0.000 ± 0.000M/s)
rb-custom-sampled    20.024 ± 0.386M/s (drops 0.000 ± 0.000M/s)
pb-libbpf            1.601 ± 0.015M/s (drops 0.000 ± 0.000M/s)
pb-libbpf-sampled    8.545 ± 0.064M/s (drops 0.000 ± 0.000M/s)
pb-custom            1.607 ± 0.022M/s (drops 0.000 ± 0.000M/s)
pb-custom-sampled    8.988 ± 0.144M/s (drops 0.000 ± 0.000M/s)

Here we test a back-to-back mode, which is arguably best-case scenario both
for BPF ringbuf and perfbuf, because there is no contention and for ringbuf
also no excessive notification, because consumer appears to be behind after
the first record. For ringbuf, custom consumer code clearly wins with 21.5 vs
16 million records per second exchanged between producer and consumer. Sampled
mode actually hurts a bit due to slightly slower producer logic (it needs to
fetch amount of data available to decide whether to skip or force notification).

Perfbuf with wakeup sampling gets 5.5x throughput increase, compared to
no-sampling version. There also doesn't seem to be noticeable overhead from
generic libbpf handling code.

Perfbuf back-to-back, effect of sample rate
===========================================
pb-sampled-1         1.035 ± 0.012M/s (drops 0.000 ± 0.000M/s)
pb-sampled-5         3.476 ± 0.087M/s (drops 0.000 ± 0.000M/s)
pb-sampled-10        5.094 ± 0.136M/s (drops 0.000 ± 0.000M/s)
pb-sampled-25        7.118 ± 0.153M/s (drops 0.000 ± 0.000M/s)
pb-sampled-50        8.169 ± 0.156M/s (drops 0.000 ± 0.000M/s)
pb-sampled-100       8.887 ± 0.136M/s (drops 0.000 ± 0.000M/s)
pb-sampled-250       9.180 ± 0.209M/s (drops 0.000 ± 0.000M/s)
pb-sampled-500       9.353 ± 0.281M/s (drops 0.000 ± 0.000M/s)
pb-sampled-1000      9.411 ± 0.217M/s (drops 0.000 ± 0.000M/s)
pb-sampled-2000      9.464 ± 0.167M/s (drops 0.000 ± 0.000M/s)
pb-sampled-3000      9.575 ± 0.273M/s (drops 0.000 ± 0.000M/s)

This benchmark shows the effect of event sampling for perfbuf. Back-to-back
mode for highest throughput. Just doing every 5th record notification gives
3.5x speed up. 250-500 appears to be the point of diminishing return, with
almost 9x speed up. Most benchmarks use 500 as the default sampling for pb-raw
and pb-custom.

Ringbuf back-to-back, effect of sample rate
===========================================
rb-sampled-1         1.106 ± 0.010M/s (drops 0.000 ± 0.000M/s)
rb-sampled-5         4.746 ± 0.149M/s (drops 0.000 ± 0.000M/s)
rb-sampled-10        7.706 ± 0.164M/s (drops 0.000 ± 0.000M/s)
rb-sampled-25        12.893 ± 0.273M/s (drops 0.000 ± 0.000M/s)
rb-sampled-50        15.961 ± 0.361M/s (drops 0.000 ± 0.000M/s)
rb-sampled-100       18.203 ± 0.445M/s (drops 0.000 ± 0.000M/s)
rb-sampled-250       19.962 ± 0.786M/s (drops 0.000 ± 0.000M/s)
rb-sampled-500       20.881 ± 0.551M/s (drops 0.000 ± 0.000M/s)
rb-sampled-1000      21.317 ± 0.532M/s (drops 0.000 ± 0.000M/s)
rb-sampled-2000      21.331 ± 0.535M/s (drops 0.000 ± 0.000M/s)
rb-sampled-3000      21.688 ± 0.392M/s (drops 0.000 ± 0.000M/s)

Similar benchmark for ring buffer also shows a great advantage (in terms of
throughput) of skipping notifications. Skipping every 5th one gives 4x boost.
Also similar to perfbuf case, 250-500 seems to be the point of diminishing
returns, giving roughly 20x better results.

Keep in mind, for this test, notifications are controlled manually with
BPF_RB_NO_WAKEUP and BPF_RB_FORCE_WAKEUP. As can be seen from previous
benchmarks, adaptive notifications based on consumer's positions provides same
(or even slightly better due to simpler load generator on BPF side) benefits in
favorable back-to-back scenario. Over zealous and fast consumer, which is
almost always caught up, will make thoughput numbers smaller. That's the case
when manual notification control might prove to be extremely beneficial.

Ringbuf back-to-back, reserve+commit vs output
==============================================
reserve              22.819 ± 0.503M/s (drops 0.000 ± 0.000M/s)
output               18.906 ± 0.433M/s (drops 0.000 ± 0.000M/s)

Ringbuf sampled, reserve+commit vs output
=========================================
reserve-sampled      15.350 ± 0.132M/s (drops 0.000 ± 0.000M/s)
output-sampled       14.195 ± 0.144M/s (drops 0.000 ± 0.000M/s)

BPF ringbuf supports two sets of APIs with various usability and performance
tradeoffs: bpf_ringbuf_reserve()+bpf_ringbuf_commit() vs bpf_ringbuf_output().
This benchmark clearly shows superiority of reserve+commit approach, despite
using a small 8-byte record size.

Single-producer, consumer/producer competing on the same CPU, low batch count
=============================================================================
rb-libbpf            3.045 ± 0.020M/s (drops 3.536 ± 0.148M/s)
rb-custom            3.055 ± 0.022M/s (drops 3.893 ± 0.066M/s)
pb-libbpf            1.393 ± 0.024M/s (drops 0.000 ± 0.000M/s)
pb-custom            1.407 ± 0.016M/s (drops 0.000 ± 0.000M/s)

This benchmark shows one of the worst-case scenarios, in which producer and
consumer do not coordinate *and* fight for the same CPU. No batch count and
sampling settings were able to eliminate drops for ringbuffer, producer is
just too fast for consumer to keep up. But ringbuf and perfbuf still able to
pass through quite a lot of messages, which is more than enough for a lot of
applications.

Ringbuf, multi-producer contention
==================================
rb-libbpf nr_prod 1  10.916 ± 0.399M/s (drops 0.000 ± 0.000M/s)
rb-libbpf nr_prod 2  4.931 ± 0.030M/s (drops 0.000 ± 0.000M/s)
rb-libbpf nr_prod 3  4.880 ± 0.006M/s (drops 0.000 ± 0.000M/s)
rb-libbpf nr_prod 4  3.926 ± 0.004M/s (drops 0.000 ± 0.000M/s)
rb-libbpf nr_prod 8  4.011 ± 0.004M/s (drops 0.000 ± 0.000M/s)
rb-libbpf nr_prod 12 3.967 ± 0.016M/s (drops 0.000 ± 0.000M/s)
rb-libbpf nr_prod 16 2.604 ± 0.030M/s (drops 0.001 ± 0.002M/s)
rb-libbpf nr_prod 20 2.233 ± 0.003M/s (drops 0.000 ± 0.000M/s)
rb-libbpf nr_prod 24 2.085 ± 0.015M/s (drops 0.000 ± 0.000M/s)
rb-libbpf nr_prod 28 2.055 ± 0.004M/s (drops 0.000 ± 0.000M/s)
rb-libbpf nr_prod 32 1.962 ± 0.004M/s (drops 0.000 ± 0.000M/s)
rb-libbpf nr_prod 36 2.089 ± 0.005M/s (drops 0.000 ± 0.000M/s)
rb-libbpf nr_prod 40 2.118 ± 0.006M/s (drops 0.000 ± 0.000M/s)
rb-libbpf nr_prod 44 2.105 ± 0.004M/s (drops 0.000 ± 0.000M/s)
rb-libbpf nr_prod 48 2.120 ± 0.058M/s (drops 0.000 ± 0.001M/s)
rb-libbpf nr_prod 52 2.074 ± 0.024M/s (drops 0.007 ± 0.014M/s)

Ringbuf uses a very short-duration spinlock during reservation phase, to check
few invariants, increment producer count and set record header. This is the
biggest point of contention for ringbuf implementation. This benchmark
evaluates the effect of multiple competing writers on overall throughput of
a single shared ringbuffer.

Overall throughput drops almost 2x when going from single to two
highly-contended producers, gradually dropping with additional competing
producers.  Performance drop stabilizes at around 20 producers and hovers
around 2mln even with 50+ fighting producers, which is a 5x drop compared to
non-contended case. Good kernel implementation in kernel helps maintain decent
performance here.

Note, that in the intended real-world scenarios, it's not expected to get even
close to such a high levels of contention. But if contention will become
a problem, there is always an option of sharding few ring buffers across a set
of CPUs.

Signed-off-by: Andrii Nakryiko <andriin@fb.com>
Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
Link: https://lore.kernel.org/bpf/20200529075424.3139988-5-andriin@fb.com
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
2020-06-01 14:38:22 -07:00
..
bpf_cubic.c bpf: tcp: Add bpf_cubic example 2020-01-22 16:30:10 -08:00
bpf_dctcp.c bpf: Add tests for bpf_sk_storage to bpf_tcp_ca 2020-03-23 20:51:55 +01:00
bpf_flow.c selftests: Use consistent include paths for libbpf 2020-01-20 16:37:45 -08:00
bpf_iter_bpf_map.c selftest/bpf: Make bpf_iter selftest compilable against old vmlinux.h 2020-05-19 11:41:49 -07:00
bpf_iter_ipv6_route.c selftest/bpf: Make bpf_iter selftest compilable against old vmlinux.h 2020-05-19 11:41:49 -07:00
bpf_iter_netlink.c selftest/bpf: Make bpf_iter selftest compilable against old vmlinux.h 2020-05-19 11:41:49 -07:00
bpf_iter_task_file.c selftest/bpf: Make bpf_iter selftest compilable against old vmlinux.h 2020-05-19 11:41:49 -07:00
bpf_iter_task.c selftest/bpf: Make bpf_iter selftest compilable against old vmlinux.h 2020-05-19 11:41:49 -07:00
bpf_iter_test_kern1.c tools/bpf: selftests: Add bpf_iter selftests 2020-05-09 17:05:27 -07:00
bpf_iter_test_kern2.c tools/bpf: selftests: Add bpf_iter selftests 2020-05-09 17:05:27 -07:00
bpf_iter_test_kern3.c selftests/bpf: Convert bpf_iter_test_kern{3, 4}.c to define own bpf_iter_meta 2020-05-19 14:03:59 -07:00
bpf_iter_test_kern4.c selftests/bpf: Convert bpf_iter_test_kern{3, 4}.c to define own bpf_iter_meta 2020-05-19 14:03:59 -07:00
bpf_iter_test_kern_common.h selftest/bpf: Make bpf_iter selftest compilable against old vmlinux.h 2020-05-19 11:41:49 -07:00
btf__core_reloc_arrays___diff_arr_dim.c selftests/bpf: add CO-RE relocs array tests 2019-08-07 14:43:49 -07:00
btf__core_reloc_arrays___diff_arr_val_sz.c selftests/bpf: add CO-RE relocs array tests 2019-08-07 14:43:49 -07:00
btf__core_reloc_arrays___equiv_zero_sz_arr.c selftests/bpf: Add flexible array relocation tests 2019-12-15 16:53:51 -08:00
btf__core_reloc_arrays___err_bad_zero_sz_arr.c selftests/bpf: Add flexible array relocation tests 2019-12-15 16:53:51 -08:00
btf__core_reloc_arrays___err_non_array.c selftests/bpf: add CO-RE relocs array tests 2019-08-07 14:43:49 -07:00
btf__core_reloc_arrays___err_too_shallow.c selftests/bpf: add CO-RE relocs array tests 2019-08-07 14:43:49 -07:00
btf__core_reloc_arrays___err_too_small.c selftests/bpf: add CO-RE relocs array tests 2019-08-07 14:43:49 -07:00
btf__core_reloc_arrays___err_wrong_val_type.c selftests/bpf: Remove too strict field offset relo test cases 2019-11-04 16:06:56 +01:00
btf__core_reloc_arrays___fixed_arr.c selftests/bpf: Add flexible array relocation tests 2019-12-15 16:53:51 -08:00
btf__core_reloc_arrays.c selftests/bpf: add CO-RE relocs array tests 2019-08-07 14:43:49 -07:00
btf__core_reloc_bitfields___bit_sz_change.c selftest/bpf: Add relocatable bitfield reading tests 2019-11-04 16:06:56 +01:00
btf__core_reloc_bitfields___bitfield_vs_int.c selftest/bpf: Add relocatable bitfield reading tests 2019-11-04 16:06:56 +01:00
btf__core_reloc_bitfields___err_too_big_bitfield.c selftest/bpf: Add relocatable bitfield reading tests 2019-11-04 16:06:56 +01:00
btf__core_reloc_bitfields___just_big_enough.c selftest/bpf: Add relocatable bitfield reading tests 2019-11-04 16:06:56 +01:00
btf__core_reloc_bitfields.c selftest/bpf: Add relocatable bitfield reading tests 2019-11-04 16:06:56 +01:00
btf__core_reloc_existence___err_wrong_arr_kind.c selftests/bpf: Add field existence CO-RE relocs tests 2019-10-15 16:06:05 -07:00
btf__core_reloc_existence___err_wrong_arr_value_type.c selftests/bpf: Add field existence CO-RE relocs tests 2019-10-15 16:06:05 -07:00
btf__core_reloc_existence___err_wrong_int_kind.c selftests/bpf: Add field existence CO-RE relocs tests 2019-10-15 16:06:05 -07:00
btf__core_reloc_existence___err_wrong_int_sz.c selftests/bpf: Add field existence CO-RE relocs tests 2019-10-15 16:06:05 -07:00
btf__core_reloc_existence___err_wrong_int_type.c selftests/bpf: Add field existence CO-RE relocs tests 2019-10-15 16:06:05 -07:00
btf__core_reloc_existence___err_wrong_struct_type.c selftests/bpf: Add field existence CO-RE relocs tests 2019-10-15 16:06:05 -07:00
btf__core_reloc_existence___minimal.c selftests/bpf: Add field existence CO-RE relocs tests 2019-10-15 16:06:05 -07:00
btf__core_reloc_existence.c selftests/bpf: Add field existence CO-RE relocs tests 2019-10-15 16:06:05 -07:00
btf__core_reloc_flavors__err_wrong_name.c selftests/bpf: add CO-RE relocs struct flavors tests 2019-08-07 14:43:49 -07:00
btf__core_reloc_flavors.c selftests/bpf: add CO-RE relocs struct flavors tests 2019-08-07 14:43:49 -07:00
btf__core_reloc_ints___bool.c selftests/bpf: add CO-RE relocs ints tests 2019-08-07 14:43:49 -07:00
btf__core_reloc_ints___reverse_sign.c selftests/bpf: add CO-RE relocs ints tests 2019-08-07 14:43:49 -07:00
btf__core_reloc_ints.c selftests/bpf: add CO-RE relocs ints tests 2019-08-07 14:43:49 -07:00
btf__core_reloc_misc.c selftests/bpf: add CO-RE relocs misc tests 2019-08-07 14:43:49 -07:00
btf__core_reloc_mods___mod_swap.c selftests/bpf: add CO-RE relocs modifiers/typedef tests 2019-08-07 14:43:49 -07:00
btf__core_reloc_mods___typedefs.c selftests/bpf: add CO-RE relocs modifiers/typedef tests 2019-08-07 14:43:49 -07:00
btf__core_reloc_mods.c selftests/bpf: add CO-RE relocs modifiers/typedef tests 2019-08-07 14:43:49 -07:00
btf__core_reloc_nesting___anon_embed.c selftests/bpf: add CO-RE relocs nesting tests 2019-08-07 14:43:49 -07:00
btf__core_reloc_nesting___dup_compat_types.c selftests/bpf: add CO-RE relocs nesting tests 2019-08-07 14:43:49 -07:00
btf__core_reloc_nesting___err_array_container.c selftests/bpf: add CO-RE relocs nesting tests 2019-08-07 14:43:49 -07:00
btf__core_reloc_nesting___err_array_field.c selftests/bpf: add CO-RE relocs nesting tests 2019-08-07 14:43:49 -07:00
btf__core_reloc_nesting___err_dup_incompat_types.c selftests/bpf: add CO-RE relocs nesting tests 2019-08-07 14:43:49 -07:00
btf__core_reloc_nesting___err_missing_container.c selftests/bpf: add CO-RE relocs nesting tests 2019-08-07 14:43:49 -07:00
btf__core_reloc_nesting___err_missing_field.c selftests/bpf: add CO-RE relocs nesting tests 2019-08-07 14:43:49 -07:00
btf__core_reloc_nesting___err_nonstruct_container.c selftests/bpf: add CO-RE relocs nesting tests 2019-08-07 14:43:49 -07:00
btf__core_reloc_nesting___err_partial_match_dups.c selftests/bpf: add CO-RE relocs nesting tests 2019-08-07 14:43:49 -07:00
btf__core_reloc_nesting___err_too_deep.c selftests/bpf: add CO-RE relocs nesting tests 2019-08-07 14:43:49 -07:00
btf__core_reloc_nesting___extra_nesting.c selftests/bpf: add CO-RE relocs nesting tests 2019-08-07 14:43:49 -07:00
btf__core_reloc_nesting___struct_union_mixup.c selftests/bpf: add CO-RE relocs nesting tests 2019-08-07 14:43:49 -07:00
btf__core_reloc_nesting.c selftests/bpf: add CO-RE relocs nesting tests 2019-08-07 14:43:49 -07:00
btf__core_reloc_primitives___diff_enum_def.c selftests/bpf: add CO-RE relocs enum/ptr/func_proto tests 2019-08-07 14:43:49 -07:00
btf__core_reloc_primitives___diff_func_proto.c selftests/bpf: add CO-RE relocs enum/ptr/func_proto tests 2019-08-07 14:43:49 -07:00
btf__core_reloc_primitives___diff_ptr_type.c selftests/bpf: add CO-RE relocs enum/ptr/func_proto tests 2019-08-07 14:43:49 -07:00
btf__core_reloc_primitives___err_non_enum.c selftests/bpf: add CO-RE relocs enum/ptr/func_proto tests 2019-08-07 14:43:49 -07:00
btf__core_reloc_primitives___err_non_int.c selftests/bpf: add CO-RE relocs enum/ptr/func_proto tests 2019-08-07 14:43:49 -07:00
btf__core_reloc_primitives___err_non_ptr.c selftests/bpf: add CO-RE relocs enum/ptr/func_proto tests 2019-08-07 14:43:49 -07:00
btf__core_reloc_primitives.c selftests/bpf: add CO-RE relocs enum/ptr/func_proto tests 2019-08-07 14:43:49 -07:00
btf__core_reloc_ptr_as_arr___diff_sz.c selftests/bpf: add CO-RE relocs ptr-as-array tests 2019-08-07 14:43:49 -07:00
btf__core_reloc_ptr_as_arr.c selftests/bpf: add CO-RE relocs ptr-as-array tests 2019-08-07 14:43:49 -07:00
btf__core_reloc_size___diff_sz.c selftests/bpf: Add field size relocation tests 2019-11-04 16:06:56 +01:00
btf__core_reloc_size.c selftests/bpf: Add field size relocation tests 2019-11-04 16:06:56 +01:00
btf_dump_test_case_bitfields.c selftests/bpf: add btf_dump BTF-to-C conversion tests 2019-05-24 14:05:58 -07:00
btf_dump_test_case_multidim.c selftests/bpf: add btf_dump BTF-to-C conversion tests 2019-05-24 14:05:58 -07:00
btf_dump_test_case_namespacing.c selftests/bpf: add btf_dump BTF-to-C conversion tests 2019-05-24 14:05:58 -07:00
btf_dump_test_case_ordering.c selftests/bpf: add btf_dump BTF-to-C conversion tests 2019-05-24 14:05:58 -07:00
btf_dump_test_case_packing.c selftests/bpf: add btf_dump BTF-to-C conversion tests 2019-05-24 14:05:58 -07:00
btf_dump_test_case_padding.c selftests/bpf: Fix btf_dump padding test case 2019-10-09 15:38:36 -07:00
btf_dump_test_case_syntax.c libbpf: Assume unsigned values for BTF_KIND_ENUM 2020-03-04 17:00:06 +01:00
cgroup_skb_sk_lookup_kern.c selftests/bpf: Test for sk helpers in cgroup skb 2020-05-14 18:41:08 -07:00
connect4_prog.c selftests/bpf: Use reno instead of dctcp 2020-05-01 16:51:07 -07:00
connect6_prog.c selftests: Use consistent include paths for libbpf 2020-01-20 16:37:45 -08:00
connect_force_port4.c bpf, testing: Add get{peer, sock}name selftests to test_progs 2020-05-19 11:32:04 -07:00
connect_force_port6.c bpf, testing: Add get{peer, sock}name selftests to test_progs 2020-05-19 11:32:04 -07:00
core_reloc_types.h bpf, libbpf: Replace zero-length array with flexible-array 2020-05-11 16:56:47 +02:00
dev_cgroup.c selftests: Use consistent include paths for libbpf 2020-01-20 16:37:45 -08:00
fentry_test.c libbpf: Merge selftests' bpf_trace_helpers.h into libbpf's bpf_tracing.h 2020-03-02 16:25:14 -08:00
fexit_bpf2bpf_simple.c libbpf: Merge selftests' bpf_trace_helpers.h into libbpf's bpf_tracing.h 2020-03-02 16:25:14 -08:00
fexit_bpf2bpf.c libbpf: Merge selftests' bpf_trace_helpers.h into libbpf's bpf_tracing.h 2020-03-02 16:25:14 -08:00
fexit_test.c libbpf: Merge selftests' bpf_trace_helpers.h into libbpf's bpf_tracing.h 2020-03-02 16:25:14 -08:00
freplace_connect4.c selftests/bpf: Add test for freplace program with expected_attach_type 2020-04-24 17:34:30 -07:00
get_cgroup_id_kern.c selftests: Use consistent include paths for libbpf 2020-01-20 16:37:45 -08:00
kfree_skb.c libbpf: Merge selftests' bpf_trace_helpers.h into libbpf's bpf_tracing.h 2020-03-02 16:25:14 -08:00
loop1.c selftests: Use consistent include paths for libbpf 2020-01-20 16:37:45 -08:00
loop2.c selftests: Use consistent include paths for libbpf 2020-01-20 16:37:45 -08:00
loop3.c selftests: Use consistent include paths for libbpf 2020-01-20 16:37:45 -08:00
loop4.c selftests: Use consistent include paths for libbpf 2020-01-20 16:37:45 -08:00
loop5.c selftests: Use consistent include paths for libbpf 2020-01-20 16:37:45 -08:00
lsm.c bpf, lsm: Fix the file_mprotect LSM test. 2020-04-02 19:42:52 -07:00
modify_return.c bpf: Add selftests for BPF_MODIFY_RETURN 2020-03-04 13:41:06 -08:00
netcnt_prog.c selftests: Use consistent include paths for libbpf 2020-01-20 16:37:45 -08:00
perfbuf_bench.c bpf: Add BPF ringbuf and perf buffer benchmarks 2020-06-01 14:38:22 -07:00
pyperf50.c selftests/bpf: add pyperf scale test 2019-05-23 16:20:57 +02:00
pyperf100.c selftests/bpf: add pyperf scale test 2019-05-23 16:20:57 +02:00
pyperf180.c selftests/bpf: add pyperf scale test 2019-05-23 16:20:57 +02:00
pyperf600_nounroll.c selftests/bpf: add realistic loop tests 2019-06-19 02:22:52 +02:00
pyperf600.c selftests/bpf: add realistic loop tests 2019-06-19 02:22:52 +02:00
pyperf_global.c selftests/bpf: Add a test for a large global function 2020-01-10 17:20:07 +01:00
pyperf.h selftests: Use consistent include paths for libbpf 2020-01-20 16:37:45 -08:00
ringbuf_bench.c bpf: Add BPF ringbuf and perf buffer benchmarks 2020-06-01 14:38:22 -07:00
sample_map_ret0.c selftests: Use consistent include paths for libbpf 2020-01-20 16:37:45 -08:00
sample_ret0.c
sendmsg4_prog.c selftests: Use consistent include paths for libbpf 2020-01-20 16:37:45 -08:00
sendmsg6_prog.c selftests: Use consistent include paths for libbpf 2020-01-20 16:37:45 -08:00
socket_cookie_prog.c selftests: Use consistent include paths for libbpf 2020-01-20 16:37:45 -08:00
sockmap_parse_prog.c selftest/bpf: Fix compilation warning in sockmap_parse_prog.c 2020-03-17 19:28:27 +01:00
sockmap_tcp_msg_prog.c selftests: Use consistent include paths for libbpf 2020-01-20 16:37:45 -08:00
sockmap_verdict_prog.c selftests: Use consistent include paths for libbpf 2020-01-20 16:37:45 -08:00
sockopt_inherit.c selftests: Use consistent include paths for libbpf 2020-01-20 16:37:45 -08:00
sockopt_multi.c selftests: Use consistent include paths for libbpf 2020-01-20 16:37:45 -08:00
sockopt_sk.c selftests: Use consistent include paths for libbpf 2020-01-20 16:37:45 -08:00
strobemeta_nounroll1.c selftests/bpf: add realistic loop tests 2019-06-19 02:22:52 +02:00
strobemeta_nounroll2.c selftests/bpf: add realistic loop tests 2019-06-19 02:22:52 +02:00
strobemeta.c selftests/bpf: add realistic loop tests 2019-06-19 02:22:52 +02:00
strobemeta.h selftests: Use consistent include paths for libbpf 2020-01-20 16:37:45 -08:00
tailcall1.c selftests: Use consistent include paths for libbpf 2020-01-20 16:37:45 -08:00
tailcall2.c selftests: Use consistent include paths for libbpf 2020-01-20 16:37:45 -08:00
tailcall3.c selftests: Use consistent include paths for libbpf 2020-01-20 16:37:45 -08:00
tailcall4.c selftests: Use consistent include paths for libbpf 2020-01-20 16:37:45 -08:00
tailcall5.c selftests: Use consistent include paths for libbpf 2020-01-20 16:37:45 -08:00
tcp_rtt.c selftests: Use consistent include paths for libbpf 2020-01-20 16:37:45 -08:00
test_attach_probe.c libbpf: Merge selftests' bpf_trace_helpers.h into libbpf's bpf_tracing.h 2020-03-02 16:25:14 -08:00
test_btf_haskv.c selftests/bpf: Fix a couple of broken test_btf cases 2020-04-24 17:47:40 -07:00
test_btf_map_in_map.c libbpf: Add BTF-defined map-in-map support 2020-04-28 17:35:03 -07:00
test_btf_newkv.c selftests/bpf: Fix a couple of broken test_btf cases 2020-04-24 17:47:40 -07:00
test_btf_nokv.c selftests/bpf: Fix a couple of broken test_btf cases 2020-04-24 17:47:40 -07:00
test_cgroup_link.c selftests/bpf: Test FD-based cgroup attachment 2020-03-30 17:36:41 -07:00
test_cls_redirect.c selftests/bpf: Add cls_redirect classifier 2020-04-26 10:00:36 -07:00
test_cls_redirect.h selftests/bpf: Add cls_redirect classifier 2020-04-26 10:00:36 -07:00
test_core_extern.c selftests: Use consistent include paths for libbpf 2020-01-20 16:37:45 -08:00
test_core_reloc_arrays.c selftests: Use consistent include paths for libbpf 2020-01-20 16:37:45 -08:00
test_core_reloc_bitfields_direct.c selftests: Use consistent include paths for libbpf 2020-01-20 16:37:45 -08:00
test_core_reloc_bitfields_probed.c selftests: Use consistent include paths for libbpf 2020-01-20 16:37:45 -08:00
test_core_reloc_existence.c selftests: Use consistent include paths for libbpf 2020-01-20 16:37:45 -08:00
test_core_reloc_flavors.c selftests: Use consistent include paths for libbpf 2020-01-20 16:37:45 -08:00
test_core_reloc_ints.c selftests: Use consistent include paths for libbpf 2020-01-20 16:37:45 -08:00
test_core_reloc_kernel.c selftests: Use consistent include paths for libbpf 2020-01-20 16:37:45 -08:00
test_core_reloc_misc.c selftests: Use consistent include paths for libbpf 2020-01-20 16:37:45 -08:00
test_core_reloc_mods.c selftests: Use consistent include paths for libbpf 2020-01-20 16:37:45 -08:00
test_core_reloc_nesting.c selftests: Use consistent include paths for libbpf 2020-01-20 16:37:45 -08:00
test_core_reloc_primitives.c selftests: Use consistent include paths for libbpf 2020-01-20 16:37:45 -08:00
test_core_reloc_ptr_as_arr.c selftests: Use consistent include paths for libbpf 2020-01-20 16:37:45 -08:00
test_core_reloc_size.c selftests: Use consistent include paths for libbpf 2020-01-20 16:37:45 -08:00
test_enable_stats.c bpf: Add selftest for BPF_ENABLE_STATS 2020-05-01 10:36:32 -07:00
test_get_stack_rawtp_err.c bpf: Test_progs, add test to catch retval refine error handling 2020-03-30 15:00:30 -07:00
test_get_stack_rawtp.c selftests: Use consistent include paths for libbpf 2020-01-20 16:37:45 -08:00
test_global_data.c selftests: Add test for overriding global data value before load 2020-03-30 01:17:35 +02:00
test_global_func1.c selftests: Use consistent include paths for libbpf 2020-01-20 16:37:45 -08:00
test_global_func2.c selftests/bpf: Add unit tests for global functions 2020-01-10 17:20:07 +01:00
test_global_func3.c selftests: Use consistent include paths for libbpf 2020-01-20 16:37:45 -08:00
test_global_func4.c selftests/bpf: Add unit tests for global functions 2020-01-10 17:20:07 +01:00
test_global_func5.c selftests: Use consistent include paths for libbpf 2020-01-20 16:37:45 -08:00
test_global_func6.c selftests: Use consistent include paths for libbpf 2020-01-20 16:37:45 -08:00
test_global_func7.c selftests: Use consistent include paths for libbpf 2020-01-20 16:37:45 -08:00
test_jhash.h selftests: bpf: standardize to static __always_inline 2019-07-03 15:06:33 +02:00
test_l4lb_noinline.c selftests: Use consistent include paths for libbpf 2020-01-20 16:37:45 -08:00
test_l4lb.c selftests: Use consistent include paths for libbpf 2020-01-20 16:37:45 -08:00
test_link_pinning.c selftests/bpf: Add link pinning selftests 2020-03-02 22:06:27 -08:00
test_lirc_mode2_kern.c selftests: Use consistent include paths for libbpf 2020-01-20 16:37:45 -08:00
test_lwt_ip_encap.c selftests: Use consistent include paths for libbpf 2020-01-20 16:37:45 -08:00
test_lwt_seg6local.c selftests: Use consistent include paths for libbpf 2020-01-20 16:37:45 -08:00
test_map_in_map.c selftests: Use consistent include paths for libbpf 2020-01-20 16:37:45 -08:00
test_map_lock.c selftests: Use consistent include paths for libbpf 2020-01-20 16:37:45 -08:00
test_mmap.c bpf: Prevent mmap()'ing read-only maps as writable 2020-05-20 20:21:53 -07:00
test_ns_current_pid_tgid.c tools/testing/selftests/bpf: Add self-tests for new helper bpf_get_ns_current_pid_tgid. 2020-03-12 17:40:47 -07:00
test_obj_id.c selftests/bpf: Test bpf_link's get_next_id, get_fd_by_id, and get_obj_info 2020-04-28 17:27:08 -07:00
test_overhead.c Merge git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net 2020-05-15 13:48:59 -07:00
test_perf_branches.c libbpf: Merge selftests' bpf_trace_helpers.h into libbpf's bpf_tracing.h 2020-03-02 16:25:14 -08:00
test_perf_buffer.c libbpf: Merge selftests' bpf_trace_helpers.h into libbpf's bpf_tracing.h 2020-03-02 16:25:14 -08:00
test_pinning_invalid.c selftests: Use consistent include paths for libbpf 2020-01-20 16:37:45 -08:00
test_pinning.c selftests: Use consistent include paths for libbpf 2020-01-20 16:37:45 -08:00
test_pkt_access.c selftests/bpf: Add tests for program extensions 2020-01-22 23:04:53 +01:00
test_pkt_md_access.c selftests: Use consistent include paths for libbpf 2020-01-20 16:37:45 -08:00
test_probe_user.c libbpf: Merge selftests' bpf_trace_helpers.h into libbpf's bpf_tracing.h 2020-03-02 16:25:14 -08:00
test_queue_map.c
test_queue_stack_map.h selftests: Use consistent include paths for libbpf 2020-01-20 16:37:45 -08:00
test_rdonly_maps.c selftests: Use consistent include paths for libbpf 2020-01-20 16:37:45 -08:00
test_ringbuf_multi.c selftests/bpf: Add BPF ringbuf selftests 2020-06-01 14:38:22 -07:00
test_ringbuf.c selftests/bpf: Add BPF ringbuf selftests 2020-06-01 14:38:22 -07:00
test_seg6_loop.c selftests: Use consistent include paths for libbpf 2020-01-20 16:37:45 -08:00
test_select_reuseport_kern.c selftests: bpf: Ignore FIN packets for reuseport tests 2020-01-24 22:12:13 +01:00
test_send_signal_kern.c selftests/bpf: Add send_signal_sched_switch test 2020-03-05 14:02:41 -08:00
test_sk_assign.c selftests/bpf: Use SOCKMAP for server sockets in bpf_sk_assign test 2020-04-29 23:31:00 +02:00
test_sk_lookup_kern.c bpf: Selftests, add printk to test_sk_lookup_kern to encode null ptr check 2020-05-21 17:44:25 -07:00
test_skb_cgroup_id_kern.c selftests: Use consistent include paths for libbpf 2020-01-20 16:37:45 -08:00
test_skb_ctx.c selftests/bpf: Test new __sk_buff field gso_size 2020-03-03 16:23:59 -08:00
test_skb_helpers.c bpf, selftests: Test probe_* helpers from SCHED_CLS 2020-06-01 14:38:21 -07:00
test_skeleton.c selftests: Use consistent include paths for libbpf 2020-01-20 16:37:45 -08:00
test_skmsg_load_helpers.c bpf, selftests: Add sk_msg helpers load and attach test 2020-06-01 14:38:20 -07:00
test_sock_fields_kern.c selftests: Use consistent include paths for libbpf 2020-01-20 16:37:45 -08:00
test_sockhash_kern.c
test_sockmap_kern.c
test_sockmap_kern.h bpf: Selftests, remove prints from sockmap tests 2020-05-16 02:56:49 +02:00
test_sockmap_listen.c selftests/bpf: Tests for sockmap/sockhash holding listening sockets 2020-02-21 22:29:46 +01:00
test_spin_lock.c selftests: Use consistent include paths for libbpf 2020-01-20 16:37:45 -08:00
test_stack_map.c
test_stacktrace_build_id.c selftests: Use consistent include paths for libbpf 2020-01-20 16:37:45 -08:00
test_stacktrace_map.c selftests: Use consistent include paths for libbpf 2020-01-20 16:37:45 -08:00
test_sysctl_loop1.c selftests: Use consistent include paths for libbpf 2020-01-20 16:37:45 -08:00
test_sysctl_loop2.c selftests: Use consistent include paths for libbpf 2020-01-20 16:37:45 -08:00
test_sysctl_prog.c selftests/bpf: fix test_sysctl_prog with alu32 2020-04-28 15:31:59 -07:00
test_tc_edt.c selftests: Use consistent include paths for libbpf 2020-01-20 16:37:45 -08:00
test_tc_tunnel.c selftests: Use consistent include paths for libbpf 2020-01-20 16:37:45 -08:00
test_tcp_check_syncookie_kern.c selftests: Use consistent include paths for libbpf 2020-01-20 16:37:45 -08:00
test_tcp_estats.c selftests: Use consistent include paths for libbpf 2020-01-20 16:37:45 -08:00
test_tcpbpf_kern.c selftests: Use consistent include paths for libbpf 2020-01-20 16:37:45 -08:00
test_tcpnotify_kern.c selftests: Use consistent include paths for libbpf 2020-01-20 16:37:45 -08:00
test_tracepoint.c selftests: Use consistent include paths for libbpf 2020-01-20 16:37:45 -08:00
test_trampoline_count.c libbpf: Merge selftests' bpf_trace_helpers.h into libbpf's bpf_tracing.h 2020-03-02 16:25:14 -08:00
test_tunnel_kern.c selftests: Use consistent include paths for libbpf 2020-01-20 16:37:45 -08:00
test_verif_scale1.c selftests: Use consistent include paths for libbpf 2020-01-20 16:37:45 -08:00
test_verif_scale2.c selftests: Use consistent include paths for libbpf 2020-01-20 16:37:45 -08:00
test_verif_scale3.c selftests: Use consistent include paths for libbpf 2020-01-20 16:37:45 -08:00
test_vmlinux.c selftests/bpf: Add vmlinux.h selftest exercising tracing of syscalls 2020-03-13 23:30:53 +01:00
test_xdp_adjust_tail_grow.c selftests/bpf: Xdp_adjust_tail add grow tail tests 2020-05-14 21:21:57 -07:00
test_xdp_adjust_tail_shrink.c selftests/bpf: Adjust BPF selftest for xdp_adjust_tail 2020-05-14 21:21:57 -07:00
test_xdp_bpf2bpf.c bpf: Add bpf_xdp_output() helper 2020-03-12 17:47:38 -07:00
test_xdp_loop.c selftests: Use consistent include paths for libbpf 2020-01-20 16:37:45 -08:00
test_xdp_meta.c selftests: Use consistent include paths for libbpf 2020-01-20 16:37:45 -08:00
test_xdp_noinline.c selftests: Use consistent include paths for libbpf 2020-01-20 16:37:45 -08:00
test_xdp_redirect.c selftests: Use consistent include paths for libbpf 2020-01-20 16:37:45 -08:00
test_xdp_vlan.c selftests: Use consistent include paths for libbpf 2020-01-20 16:37:45 -08:00
test_xdp.c selftests: Use consistent include paths for libbpf 2020-01-20 16:37:45 -08:00
trigger_bench.c selftest/bpf: Add BPF triggering benchmark 2020-05-13 12:19:38 -07:00
xdp_dummy.c selftests: Use consistent include paths for libbpf 2020-01-20 16:37:45 -08:00
xdp_redirect_map.c selftests: Use consistent include paths for libbpf 2020-01-20 16:37:45 -08:00
xdp_tx.c selftests: Use consistent include paths for libbpf 2020-01-20 16:37:45 -08:00
xdping_kern.c selftests: Use consistent include paths for libbpf 2020-01-20 16:37:45 -08:00