mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-09-27 12:57:53 +00:00
970308a7b5
Considering that only bench_ringbufs.c supports consumer, just set the default value of consumer_cnt as 0. After that, update the validity check of consumer_cnt, remove unused consumer_thread code snippets and set consumer_cnt as 1 in run_bench_ringbufs.sh accordingly. Signed-off-by: Hou Tao <houtao1@huawei.com> Link: https://lore.kernel.org/r/20230613080921.1623219-5-houtao@huaweicloud.com Signed-off-by: Alexei Starovoitov <ast@kernel.org>
89 lines
1.8 KiB
C
89 lines
1.8 KiB
C
// SPDX-License-Identifier: GPL-2.0
|
|
/* Copyright (c) 2022 Bytedance */
|
|
|
|
#include "bench.h"
|
|
#include "bpf_hashmap_full_update_bench.skel.h"
|
|
#include "bpf_util.h"
|
|
|
|
/* BPF triggering benchmarks */
|
|
static struct ctx {
|
|
struct bpf_hashmap_full_update_bench *skel;
|
|
} ctx;
|
|
|
|
#define MAX_LOOP_NUM 10000
|
|
|
|
static void validate(void)
|
|
{
|
|
if (env.consumer_cnt != 0) {
|
|
fprintf(stderr, "benchmark doesn't support consumer!\n");
|
|
exit(1);
|
|
}
|
|
}
|
|
|
|
static void *producer(void *input)
|
|
{
|
|
while (true) {
|
|
/* trigger the bpf program */
|
|
syscall(__NR_getpgid);
|
|
}
|
|
|
|
return NULL;
|
|
}
|
|
|
|
static void measure(struct bench_res *res)
|
|
{
|
|
}
|
|
|
|
static void setup(void)
|
|
{
|
|
struct bpf_link *link;
|
|
int map_fd, i, max_entries;
|
|
|
|
setup_libbpf();
|
|
|
|
ctx.skel = bpf_hashmap_full_update_bench__open_and_load();
|
|
if (!ctx.skel) {
|
|
fprintf(stderr, "failed to open skeleton\n");
|
|
exit(1);
|
|
}
|
|
|
|
ctx.skel->bss->nr_loops = MAX_LOOP_NUM;
|
|
|
|
link = bpf_program__attach(ctx.skel->progs.benchmark);
|
|
if (!link) {
|
|
fprintf(stderr, "failed to attach program!\n");
|
|
exit(1);
|
|
}
|
|
|
|
/* fill hash_map */
|
|
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);
|
|
}
|
|
|
|
static void hashmap_report_final(struct bench_res res[], int res_cnt)
|
|
{
|
|
unsigned int nr_cpus = bpf_num_possible_cpus();
|
|
int i;
|
|
|
|
for (i = 0; i < nr_cpus; i++) {
|
|
u64 time = ctx.skel->bss->percpu_time[i];
|
|
|
|
if (!time)
|
|
continue;
|
|
|
|
printf("%d:hash_map_full_perf %lld events per sec\n",
|
|
i, ctx.skel->bss->nr_loops * 1000000000ll / time);
|
|
}
|
|
}
|
|
|
|
const struct bench bench_bpf_hashmap_full_update = {
|
|
.name = "bpf-hashmap-full-update",
|
|
.validate = validate,
|
|
.setup = setup,
|
|
.producer_thread = producer,
|
|
.measure = measure,
|
|
.report_progress = NULL,
|
|
.report_final = hashmap_report_final,
|
|
};
|