tools/testing/selftests/bpf/bench.h

Source file repositories/reference/linux-study-clean/tools/testing/selftests/bpf/bench.h

File Facts

System
Linux kernel
Corpus path
tools/testing/selftests/bpf/bench.h
Extension
.h
Size
2517 bytes
Lines
102
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

struct cpu_set {
	bool *cpus;
	int cpus_len;
	int next_cpu;
};

struct env {
	char *bench_name;
	int duration_sec;
	int warmup_sec;
	bool verbose;
	bool list;
	bool affinity;
	bool quiet;
	bool stacktrace;
	int consumer_cnt;
	int producer_cnt;
	int nr_cpus;
	struct cpu_set prod_cpus;
	struct cpu_set cons_cpus;
};

struct basic_stats {
	double mean;
	double stddev;
};

struct bench_res {
	long hits;
	long drops;
	long false_hits;
	long important_hits;
	unsigned long gp_ns;
	unsigned long gp_ct;
	unsigned int stime;
	unsigned long duration_ns;
};

struct bench {
	const char *name;
	const struct argp *argp;
	void (*validate)(void);
	void (*setup)(void);
	void *(*producer_thread)(void *ctx);
	void *(*consumer_thread)(void *ctx);
	void (*measure)(struct bench_res* res);
	void (*report_progress)(int iter, struct bench_res* res, long delta_ns);
	void (*report_final)(struct bench_res res[], int res_cnt);
};

struct counter {
	long value;
} __attribute__((aligned(128)));

extern struct env env;
extern const struct bench *bench;

void setup_libbpf(void);
void bench_force_done(void);
void hits_drops_report_progress(int iter, struct bench_res *res, long delta_ns);
void hits_drops_report_final(struct bench_res res[], int res_cnt);
void false_hits_report_progress(int iter, struct bench_res *res, long delta_ns);
void false_hits_report_final(struct bench_res res[], int res_cnt);
void ops_report_progress(int iter, struct bench_res *res, long delta_ns);
void ops_report_final(struct bench_res res[], int res_cnt);
void local_storage_report_progress(int iter, struct bench_res *res,
				   long delta_ns);
void local_storage_report_final(struct bench_res res[], int res_cnt);
void grace_period_latency_basic_stats(struct bench_res res[], int res_cnt,
				      struct basic_stats *gp_stat);
void grace_period_ticks_basic_stats(struct bench_res res[], int res_cnt,
				    struct basic_stats *gp_stat);

static inline void atomic_inc(long *value)
{
	(void)__atomic_add_fetch(value, 1, __ATOMIC_RELAXED);
}

static inline void atomic_add(long *value, long n)
{
	(void)__atomic_add_fetch(value, n, __ATOMIC_RELAXED);
}

static inline long atomic_swap(long *value, long n)
{
	return __atomic_exchange_n(value, n, __ATOMIC_RELAXED);
}

Annotation

Implementation Notes