1 | /** @addtogroup hbench hbench
|
---|
2 | * @brief User space benchmarks
|
---|
3 | * @ingroup apps
|
---|
4 | *
|
---|
5 | * @details
|
---|
6 | *
|
---|
7 | * To add a new benchmark, you need to implement the actual benchmarking
|
---|
8 | * code and register it.
|
---|
9 | *
|
---|
10 | * Registration is done by adding
|
---|
11 | * <code>extern benchmark_t bench_YOUR_NAME</code> reference to benchlist.h
|
---|
12 | * and by adding it to the array in benchlist.c.
|
---|
13 | *
|
---|
14 | * The actual benchmark should reside in a separate file (see malloc/malloc1.c
|
---|
15 | * for example) and has to (at least) declare one function (the actual
|
---|
16 | * benchmark) and fill-in the benchmark_t structure.
|
---|
17 | *
|
---|
18 | * Fill-in the name of the benchmark, its description and a reference to the
|
---|
19 | * benchmark function to the benchmark_t.
|
---|
20 | *
|
---|
21 | * The benchmarking function has to accept four arguments:
|
---|
22 | * @li benchmeter_t: call benchmeter_start and benchmeter_stop around the
|
---|
23 | * actual benchmarking code
|
---|
24 | * @li uint64_t: size of the workload - typically number of inner loops in
|
---|
25 | * your benchmark (used to self-calibrate benchmark size)
|
---|
26 | * @li char * and size_t giving you access to buffer for storing error message
|
---|
27 | * if the benchmark fails (return false from the function itself then)
|
---|
28 | *
|
---|
29 | * Typically, the structure of the function is following:
|
---|
30 | * @code{c}
|
---|
31 | * static bool runner(benchmeter_t *meter, uint64_t size,
|
---|
32 | * char *error, size_t error_size)
|
---|
33 | * {
|
---|
34 | * benchmeter_start(meter);
|
---|
35 | * for (uint64_t i = 0; i < size; i++) {
|
---|
36 | * // measured action
|
---|
37 | * }
|
---|
38 | * benchmeter_stop(meter);
|
---|
39 | *
|
---|
40 | * return true;
|
---|
41 | * }
|
---|
42 | * @endcode
|
---|
43 | */
|
---|