]> git.baikalelectronics.ru Git - kernel.git/commit
bpf/benchs: Add benchmark tests for bloom filter throughput + false positive
authorJoanne Koong <joannekoong@fb.com>
Wed, 27 Oct 2021 23:45:03 +0000 (16:45 -0700)
committerAlexei Starovoitov <ast@kernel.org>
Thu, 28 Oct 2021 20:22:49 +0000 (13:22 -0700)
commita3df5f0ce3835325ec0ae5aed94912b388a749e3
treeb25ea789daa0fd4bb5d5bfebb72a16de843ffbc4
parent57c678c44429c16428833981c62a817e822baeec
bpf/benchs: Add benchmark tests for bloom filter throughput + false positive

This patch adds benchmark tests for the throughput (for lookups + updates)
and the false positive rate of bloom filter lookups, as well as some
minor refactoring of the bash script for running the benchmarks.

These benchmarks show that as the number of hash functions increases,
the throughput and the false positive rate of the bloom filter decreases.
>From the benchmark data, the approximate average false-positive rates
are roughly as follows:

1 hash function = ~30%
2 hash functions = ~15%
3 hash functions = ~5%
4 hash functions = ~2.5%
5 hash functions = ~1%
6 hash functions = ~0.5%
7 hash functions  = ~0.35%
8 hash functions = ~0.15%
9 hash functions = ~0.1%
10 hash functions = ~0%

For reference data, the benchmarks run on one thread on a machine
with one numa node for 1 to 5 hash functions for 8-byte and 64-byte
values are as follows:

1 hash function:
  50k entries
8-byte value
    Lookups - 51.1 M/s operations
    Updates - 33.6 M/s operations
    False positive rate: 24.15%
64-byte value
    Lookups - 15.7 M/s operations
    Updates - 15.1 M/s operations
    False positive rate: 24.2%
  100k entries
8-byte value
    Lookups - 51.0 M/s operations
    Updates - 33.4 M/s operations
    False positive rate: 24.04%
64-byte value
    Lookups - 15.6 M/s operations
    Updates - 14.6 M/s operations
    False positive rate: 24.06%
  500k entries
8-byte value
    Lookups - 50.5 M/s operations
    Updates - 33.1 M/s operations
    False positive rate: 27.45%
64-byte value
    Lookups - 15.6 M/s operations
    Updates - 14.2 M/s operations
    False positive rate: 27.42%
  1 mil entries
8-byte value
    Lookups - 49.7 M/s operations
    Updates - 32.9 M/s operations
    False positive rate: 27.45%
64-byte value
    Lookups - 15.4 M/s operations
    Updates - 13.7 M/s operations
    False positive rate: 27.58%
  2.5 mil entries
8-byte value
    Lookups - 47.2 M/s operations
    Updates - 31.8 M/s operations
    False positive rate: 30.94%
64-byte value
    Lookups - 15.3 M/s operations
    Updates - 13.2 M/s operations
    False positive rate: 30.95%
  5 mil entries
8-byte value
    Lookups - 41.1 M/s operations
    Updates - 28.1 M/s operations
    False positive rate: 31.01%
64-byte value
    Lookups - 13.3 M/s operations
    Updates - 11.4 M/s operations
    False positive rate: 30.98%

2 hash functions:
  50k entries
8-byte value
    Lookups - 34.1 M/s operations
    Updates - 20.1 M/s operations
    False positive rate: 9.13%
64-byte value
    Lookups - 8.4 M/s operations
    Updates - 7.9 M/s operations
    False positive rate: 9.21%
  100k entries
8-byte value
    Lookups - 33.7 M/s operations
    Updates - 18.9 M/s operations
    False positive rate: 9.13%
64-byte value
    Lookups - 8.4 M/s operations
    Updates - 7.7 M/s operations
    False positive rate: 9.19%
  500k entries
8-byte value
    Lookups - 32.7 M/s operations
    Updates - 18.1 M/s operations
    False positive rate: 12.61%
64-byte value
    Lookups - 8.4 M/s operations
    Updates - 7.5 M/s operations
    False positive rate: 12.61%
  1 mil entries
8-byte value
    Lookups - 30.6 M/s operations
    Updates - 18.9 M/s operations
    False positive rate: 12.54%
64-byte value
    Lookups - 8.0 M/s operations
    Updates - 7.0 M/s operations
    False positive rate: 12.52%
  2.5 mil entries
8-byte value
    Lookups - 25.3 M/s operations
    Updates - 16.7 M/s operations
    False positive rate: 16.77%
64-byte value
    Lookups - 7.9 M/s operations
    Updates - 6.5 M/s operations
    False positive rate: 16.88%
  5 mil entries
8-byte value
    Lookups - 20.8 M/s operations
    Updates - 14.7 M/s operations
    False positive rate: 16.78%
64-byte value
    Lookups - 7.0 M/s operations
    Updates - 6.0 M/s operations
    False positive rate: 16.78%

3 hash functions:
  50k entries
8-byte value
    Lookups - 25.1 M/s operations
    Updates - 14.6 M/s operations
    False positive rate: 7.65%
64-byte value
    Lookups - 5.8 M/s operations
    Updates - 5.5 M/s operations
    False positive rate: 7.58%
  100k entries
8-byte value
    Lookups - 24.7 M/s operations
    Updates - 14.1 M/s operations
    False positive rate: 7.71%
64-byte value
    Lookups - 5.8 M/s operations
    Updates - 5.3 M/s operations
    False positive rate: 7.62%
  500k entries
8-byte value
    Lookups - 22.9 M/s operations
    Updates - 13.9 M/s operations
    False positive rate: 2.62%
64-byte value
    Lookups - 5.6 M/s operations
    Updates - 4.8 M/s operations
    False positive rate: 2.7%
  1 mil entries
8-byte value
    Lookups - 19.8 M/s operations
    Updates - 12.6 M/s operations
    False positive rate: 2.60%
64-byte value
    Lookups - 5.3 M/s operations
    Updates - 4.4 M/s operations
    False positive rate: 2.69%
  2.5 mil entries
8-byte value
    Lookups - 16.2 M/s operations
    Updates - 10.7 M/s operations
    False positive rate: 4.49%
64-byte value
    Lookups - 4.9 M/s operations
    Updates - 4.1 M/s operations
    False positive rate: 4.41%
  5 mil entries
8-byte value
    Lookups - 18.8 M/s operations
    Updates - 9.2 M/s operations
    False positive rate: 4.45%
64-byte value
    Lookups - 5.2 M/s operations
    Updates - 3.9 M/s operations
    False positive rate: 4.54%

4 hash functions:
  50k entries
8-byte value
    Lookups - 19.7 M/s operations
    Updates - 11.1 M/s operations
    False positive rate: 1.01%
64-byte value
    Lookups - 4.4 M/s operations
    Updates - 4.0 M/s operations
    False positive rate: 1.00%
  100k entries
8-byte value
    Lookups - 19.5 M/s operations
    Updates - 10.9 M/s operations
    False positive rate: 1.00%
64-byte value
    Lookups - 4.3 M/s operations
    Updates - 3.9 M/s operations
    False positive rate: 0.97%
  500k entries
8-byte value
    Lookups - 18.2 M/s operations
    Updates - 10.6 M/s operations
    False positive rate: 2.05%
64-byte value
    Lookups - 4.3 M/s operations
    Updates - 3.7 M/s operations
    False positive rate: 2.05%
  1 mil entries
8-byte value
    Lookups - 15.5 M/s operations
    Updates - 9.6 M/s operations
    False positive rate: 1.99%
64-byte value
    Lookups - 4.0 M/s operations
    Updates - 3.4 M/s operations
    False positive rate: 1.99%
  2.5 mil entries
8-byte value
    Lookups - 13.8 M/s operations
    Updates - 7.7 M/s operations
    False positive rate: 3.91%
64-byte value
    Lookups - 3.7 M/s operations
    Updates - 3.6 M/s operations
    False positive rate: 3.78%
  5 mil entries
8-byte value
    Lookups - 13.0 M/s operations
    Updates - 6.9 M/s operations
    False positive rate: 3.93%
64-byte value
    Lookups - 3.5 M/s operations
    Updates - 3.7 M/s operations
    False positive rate: 3.39%

5 hash functions:
  50k entries
8-byte value
    Lookups - 16.4 M/s operations
    Updates - 9.1 M/s operations
    False positive rate: 0.78%
64-byte value
    Lookups - 3.5 M/s operations
    Updates - 3.2 M/s operations
    False positive rate: 0.77%
  100k entries
8-byte value
    Lookups - 16.3 M/s operations
    Updates - 9.0 M/s operations
    False positive rate: 0.79%
64-byte value
    Lookups - 3.5 M/s operations
    Updates - 3.2 M/s operations
    False positive rate: 0.78%
  500k entries
8-byte value
    Lookups - 15.1 M/s operations
    Updates - 8.8 M/s operations
    False positive rate: 1.82%
64-byte value
    Lookups - 3.4 M/s operations
    Updates - 3.0 M/s operations
    False positive rate: 1.78%
  1 mil entries
8-byte value
    Lookups - 13.2 M/s operations
    Updates - 7.8 M/s operations
    False positive rate: 1.81%
64-byte value
    Lookups - 3.2 M/s operations
    Updates - 2.8 M/s operations
    False positive rate: 1.80%
  2.5 mil entries
8-byte value
    Lookups - 10.5 M/s operations
    Updates - 5.9 M/s operations
    False positive rate: 0.29%
64-byte value
    Lookups - 3.2 M/s operations
    Updates - 2.4 M/s operations
    False positive rate: 0.28%
  5 mil entries
8-byte value
    Lookups - 9.6 M/s operations
    Updates - 5.7 M/s operations
    False positive rate: 0.30%
64-byte value
    Lookups - 3.2 M/s operations
    Updates - 2.7 M/s operations
    False positive rate: 0.30%

Signed-off-by: Joanne Koong <joannekoong@fb.com>
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
Acked-by: Andrii Nakryiko <andrii@kernel.org>
Link: https://lore.kernel.org/bpf/20211027234504.30744-5-joannekoong@fb.com
tools/testing/selftests/bpf/Makefile
tools/testing/selftests/bpf/bench.c
tools/testing/selftests/bpf/bench.h
tools/testing/selftests/bpf/benchs/bench_bloom_filter_map.c [new file with mode: 0644]
tools/testing/selftests/bpf/benchs/run_bench_bloom_filter_map.sh [new file with mode: 0755]
tools/testing/selftests/bpf/benchs/run_bench_ringbufs.sh
tools/testing/selftests/bpf/benchs/run_common.sh [new file with mode: 0644]
tools/testing/selftests/bpf/progs/bloom_filter_bench.c [new file with mode: 0644]