Messages in this thread | | | Date | Thu, 26 May 2022 10:08:51 +0800 | Subject | Re: [External] Re: [PATCH v2 2/2] selftest/bpf/benchs: Add bpf_map benchmark | From | Feng Zhou <> |
| |
在 2022/5/25 上午7:29, Andrii Nakryiko 写道: > On Tue, May 24, 2022 at 12:53 AM Feng zhou <zhoufeng.zf@bytedance.com> wrote: >> From: Feng Zhou <zhoufeng.zf@bytedance.com> >> >> Add benchmark for hash_map to reproduce the worst case >> that non-stop update when map's free is zero. >> >> Signed-off-by: Feng Zhou <zhoufeng.zf@bytedance.com> >> --- >> tools/testing/selftests/bpf/Makefile | 4 +- >> tools/testing/selftests/bpf/bench.c | 2 + >> .../selftests/bpf/benchs/bench_bpf_map.c | 78 +++++++++++++++++++ >> .../selftests/bpf/benchs/run_bench_bpf_map.sh | 10 +++ >> .../selftests/bpf/progs/bpf_map_bench.c | 27 +++++++ >> 5 files changed, 120 insertions(+), 1 deletion(-) >> create mode 100644 tools/testing/selftests/bpf/benchs/bench_bpf_map.c >> create mode 100755 tools/testing/selftests/bpf/benchs/run_bench_bpf_map.sh >> create mode 100644 tools/testing/selftests/bpf/progs/bpf_map_bench.c >> > [...] > >> +static void setup(void) >> +{ >> + struct bpf_link *link; >> + int map_fd, i, max_entries; >> + >> + setup_libbpf(); >> + >> + ctx.skel = bpf_map_bench__open_and_load(); >> + if (!ctx.skel) { >> + fprintf(stderr, "failed to open skeleton\n"); >> + exit(1); >> + } >> + >> + link = bpf_program__attach(ctx.skel->progs.benchmark); >> + if (!link) { >> + fprintf(stderr, "failed to attach program!\n"); >> + exit(1); >> + } >> + >> + //fill hash_map > don't use C++ comments
Ok, will do. Thanks.
> >> + map_fd = bpf_map__fd(ctx.skel->maps.hash_map_bench); >> + max_entries = bpf_map__max_entries(ctx.skel->maps.hash_map_bench); >> + for (i = 0; i < max_entries; i++) >> + bpf_map_update_elem(map_fd, &i, &i, BPF_ANY); >> +} >> + >> +const struct bench bench_bpf_map = { >> + .name = "bpf-map", > this is too generic name, it's testing one particular scenario, so > call this out in the name. bpf-hashmap-full-update or something (same > for all the relevant function and file names) >
Ok, will do. Thanks.
>> + .validate = validate, >> + .setup = setup, >> + .producer_thread = producer, >> + .consumer_thread = consumer, >> + .measure = measure, >> + .report_progress = ops_report_progress, >> + .report_final = ops_report_final, >> +}; >> diff --git a/tools/testing/selftests/bpf/benchs/run_bench_bpf_map.sh b/tools/testing/selftests/bpf/benchs/run_bench_bpf_map.sh >> new file mode 100755 >> index 000000000000..d7cc969e4f85 >> --- /dev/null >> +++ b/tools/testing/selftests/bpf/benchs/run_bench_bpf_map.sh >> @@ -0,0 +1,10 @@ >> +#!/bin/bash >> +# SPDX-License-Identifier: GPL-2.0 >> + >> +source ./benchs/run_common.sh >> + >> +set -eufo pipefail >> + >> +nr_threads=`expr $(cat /proc/cpuinfo | grep "processor"| wc -l) - 1` >> +summary=$($RUN_BENCH -p $nr_threads bpf-map) >> +printf "$summary" >> diff --git a/tools/testing/selftests/bpf/progs/bpf_map_bench.c b/tools/testing/selftests/bpf/progs/bpf_map_bench.c >> new file mode 100644 >> index 000000000000..655366e6e0f4 >> --- /dev/null >> +++ b/tools/testing/selftests/bpf/progs/bpf_map_bench.c >> @@ -0,0 +1,27 @@ >> +// SPDX-License-Identifier: GPL-2.0 >> +/* Copyright (c) 2022 Bytedance */ >> + >> +#include "vmlinux.h" >> +#include <bpf/bpf_helpers.h> >> +#include "bpf_misc.h" >> + >> +char _license[] SEC("license") = "GPL"; >> + >> +#define MAX_ENTRIES 1000 >> + >> +struct { >> + __uint(type, BPF_MAP_TYPE_HASH); >> + __type(key, u32); >> + __type(value, u64); >> + __uint(max_entries, MAX_ENTRIES); >> +} hash_map_bench SEC(".maps"); >> + >> +SEC("fentry/" SYS_PREFIX "sys_getpgid") >> +int benchmark(void *ctx) >> +{ >> + u32 key = bpf_get_prandom_u32(); >> + u64 init_val = 1; >> + >> + bpf_map_update_elem(&hash_map_bench, &key, &init_val, BPF_ANY); >> + return 0; >> +} >> -- >> 2.20.1 >>
| |