tools/testing/selftests/bpf/benchs/bench_bpf_nop.c

Source file repositories/reference/linux-study-clean/tools/testing/selftests/bpf/benchs/bench_bpf_nop.c

File Facts

System
Linux kernel
Corpus path
tools/testing/selftests/bpf/benchs/bench_bpf_nop.c
Extension
.c
Size
1674 bytes
Lines
85
Domain
Support Tooling And Documentation
Bucket
tools
Inferred role
Support Tooling And Documentation: implementation source
Status
source implementation candidate

Why This File Exists

Repository support layer: documentation, build tooling, samples, user-space helper tools, generated initramfs support, licenses, and validation utilities.

Dependency Surface

Detected Declarations

Annotated Snippet

// SPDX-License-Identifier: GPL-2.0
/* Copyright (c) 2026 Meta Platforms, Inc. and affiliates. */

#include "bench.h"
#include "bench_bpf_timing.h"
#include "bpf_nop_bench.skel.h"
#include "bpf_util.h"

static struct ctx {
	struct bpf_nop_bench *skel;
	struct bpf_bench_timing timing;
	int prog_fd;
} ctx;

static void nop_validate(void)
{
	if (env.consumer_cnt != 0) {
		fprintf(stderr, "benchmark doesn't support consumers\n");
		exit(1);
	}
}

static void nop_run_once(void *unused __always_unused)
{
	LIBBPF_OPTS(bpf_test_run_opts, topts);

	bpf_prog_test_run_opts(ctx.prog_fd, &topts);
}

static void nop_setup(void)
{
	struct bpf_nop_bench *skel;
	int err;

	setup_libbpf();

	skel = bpf_nop_bench__open();
	if (!skel) {
		fprintf(stderr, "failed to open skeleton\n");
		exit(1);
	}

	err = bpf_nop_bench__load(skel);
	if (err) {
		fprintf(stderr, "failed to load skeleton: %s\n", strerror(-err));
		bpf_nop_bench__destroy(skel);
		exit(1);
	}

	ctx.skel = skel;
	ctx.prog_fd = bpf_program__fd(skel->progs.bench_nop);

	BENCH_TIMING_INIT(&ctx.timing, skel, 0);
	bpf_bench_calibrate(&ctx.timing, nop_run_once, NULL);

	env.duration_sec = 600;
}

static void *nop_producer(void *input)
{
	while (true)
		nop_run_once(NULL);

	return NULL;
}

static void nop_measure(struct bench_res *res)
{
	bpf_bench_timing_measure(&ctx.timing, res);
}

static void nop_report_final(struct bench_res res[], int res_cnt)
{
	bpf_bench_timing_report(&ctx.timing, "bpf-nop", NULL);
}

const struct bench bench_bpf_nop = {
	.name		= "bpf-nop",
	.validate	= nop_validate,
	.setup		= nop_setup,
	.producer_thread = nop_producer,
	.measure	= nop_measure,
	.report_final	= nop_report_final,
};

Annotation

Implementation Notes