/** @addtogroup hbench hbench * @brief User space benchmarks * @ingroup apps * * @details * * To add a new benchmark, you need to implement the actual benchmarking * code and register it. * * Registration is done by adding * <code>extern benchmark_t bench_YOUR_NAME</code> reference to benchlist.h * and by adding it to the array in benchlist.c. * * The actual benchmark should reside in a separate file (see malloc/malloc1.c * for example) and has to (at least) declare one function (the actual * benchmark) and fill-in the benchmark_t structure. * * Fill-in the name of the benchmark, its description and a reference to the * benchmark function to the benchmark_t. * * The benchmarking function has to accept trhee arguments: * @li bench_env_t: benchmark environment configuration * @li bench_run_t: call bench_run_start and bench_run_stop around the * actual benchmarking code * @li uint64_t: size of the workload - typically number of inner loops in * your benchmark (used to self-calibrate benchmark size) * * Typically, the structure of the function is following: * @code{c} * static bool runnerconst bench_env_t const *envbench_run_t *run, uint64_t size) * { * bench_run_start(run); * for (uint64_t i = 0; i < size; i++) { * // measured action * if (something_fails) { * return bench_run_fail(run, "oops: %s (%d)", str_error(rc), rc); * } * } * bench_run_stop(run); * * return true; * } * @endcode */