static inline void run_gen_bench_impl(const char *impl) { int fn, ncols; uint64_t ds, iter_cnt, iter, disksize; struct rusage start, stop; double elapsed, d_bw; /* Benchmark generate functions */ for (fn = 0; fn < RAIDZ_GEN_NUM; fn++) { for (ds = MIN_CS_SHIFT; ds <= MAX_CS_SHIFT; ds++) { /* create suitable raidz_map */ ncols = rto_opts.rto_dcols + fn + 1; zio_bench.io_size = 1ULL << ds; rm_bench = vdev_raidz_map_alloc(&zio_bench, BENCH_ASHIFT, ncols, fn+1); /* estimate iteration count */ iter_cnt = GEN_BENCH_MEMORY; iter_cnt /= zio_bench.io_size; getrusage(RUSAGE_THREAD, &start); for (iter = 0; iter < iter_cnt; iter++) vdev_raidz_generate_parity(rm_bench); getrusage(RUSAGE_THREAD, &stop); elapsed = get_time_diff(&start, &stop); disksize = (1ULL << ds) / rto_opts.rto_dcols; d_bw = (double)iter_cnt * (double)disksize; d_bw /= (1024.0 * 1024.0 * elapsed); LOG(D_ALL, "%10s, %8s, %zu, %10llu, %lf, %lf, %u\n", impl, raidz_gen_name[fn], rto_opts.rto_dcols, (1ULL<<ds), d_bw, d_bw * (double)(ncols), (unsigned) iter_cnt); vdev_raidz_map_free(rm_bench); } } }
static void benchmark_gen_impl(raidz_map_t *rm, const int fn) { (void) fn; vdev_raidz_generate_parity(rm); }