Skip to content

Commit

Permalink
Reduce fletcher4 and raidz benchmark times
Browse files Browse the repository at this point in the history
During module load time all of the available fetcher4 and raidz
implementations are benchmarked for a fixed amount of time to
determine the fastest available.  Manual testing has shown that this
time can be significantly reduced with negligible effect on the final
results.

This commit changes the benchmark time to 1ms which can reduce the
module load time by over a second on x86_64.  On an x86_64 system
with sse3, ssse3, and avx2 instructions the benchmark times are:

    Fletcher4    603ms   -> 15ms
    RAIDZ        1,322ms -> 64ms

Reviewed-by: Matthew Macy <[email protected]>
Reviewed-by: George Melikov <[email protected]>
Reviewed-by: Ryan Moeller <[email protected]>
Signed-off-by: Brian Behlendorf <[email protected]>
Closes openzfs#11282
  • Loading branch information
behlendorf authored and sterlingjensen committed Dec 7, 2020
1 parent 948c664 commit 6333c4b
Show file tree
Hide file tree
Showing 2 changed files with 3 additions and 3 deletions.
2 changes: 1 addition & 1 deletion module/zcommon/zfs_fletcher.c
Original file line number Diff line number Diff line change
Expand Up @@ -660,7 +660,7 @@ fletcher_4_kstat_addr(kstat_t *ksp, loff_t n)
fletcher_4_fastest_impl.compute_ ## type = src->compute_ ## type; \
}

#define FLETCHER_4_BENCH_NS (MSEC2NSEC(50)) /* 50ms */
#define FLETCHER_4_BENCH_NS (MSEC2NSEC(1)) /* 1ms */

typedef void fletcher_checksum_func_t(const void *, uint64_t, const void *,
zio_cksum_t *);
Expand Down
4 changes: 2 additions & 2 deletions module/zfs/vdev_raidz_math.c
Original file line number Diff line number Diff line change
Expand Up @@ -360,7 +360,7 @@ raidz_math_kstat_addr(kstat_t *ksp, loff_t n)
#define BENCH_D_COLS (8ULL)
#define BENCH_COLS (BENCH_D_COLS + PARITY_PQR)
#define BENCH_ZIO_SIZE (1ULL << SPA_OLD_MAXBLOCKSHIFT) /* 128 kiB */
#define BENCH_NS MSEC2NSEC(25) /* 25ms */
#define BENCH_NS MSEC2NSEC(1) /* 1ms */

typedef void (*benchmark_fn)(raidz_map_t *rm, const int fn);

Expand Down Expand Up @@ -410,7 +410,7 @@ benchmark_raidz_impl(raidz_map_t *bench_rm, const int fn, benchmark_fn bench_fn)
t_start = gethrtime();

do {
for (i = 0; i < 25; i++, run_cnt++)
for (i = 0; i < 5; i++, run_cnt++)
bench_fn(bench_rm, fn);

t_diff = gethrtime() - t_start;
Expand Down

0 comments on commit 6333c4b

Please sign in to comment.