Commit be85f93a authored by Daniel Verkamp's avatar Daniel Verkamp Committed by Shaohua Li

lib/raid6: add option to skip algo benchmarking

This is helpful for systems where fast startup time is important.
It is especially nice to avoid benchmarking RAID functions that are
never used (for example, BTRFS selects RAID6_PQ even if the parity RAID
mode is not in use).

This saves 250+ milliseconds of boot time on modern x86 and ARM systems
with a dozen or more available implementations.

The new option is defaulted to 'y' to match the previous behavior of
always benchmarking on init.
Signed-off-by: default avatarDaniel Verkamp <dverkamp@chromium.org>
Signed-off-by: default avatarShaohua Li <shli@fb.com>
parent 0437de4f
...@@ -70,6 +70,9 @@ extern const char raid6_empty_zero_page[PAGE_SIZE]; ...@@ -70,6 +70,9 @@ extern const char raid6_empty_zero_page[PAGE_SIZE];
#define MODULE_DESCRIPTION(desc) #define MODULE_DESCRIPTION(desc)
#define subsys_initcall(x) #define subsys_initcall(x)
#define module_exit(x) #define module_exit(x)
#define IS_ENABLED(x) (x)
#define CONFIG_RAID6_PQ_BENCHMARK 1
#endif /* __KERNEL__ */ #endif /* __KERNEL__ */
/* Routine choices */ /* Routine choices */
......
...@@ -10,6 +10,14 @@ menu "Library routines" ...@@ -10,6 +10,14 @@ menu "Library routines"
config RAID6_PQ config RAID6_PQ
tristate tristate
config RAID6_PQ_BENCHMARK
bool "Automatically choose fastest RAID6 PQ functions"
depends on RAID6_PQ
default y
help
Benchmark all available RAID6 PQ functions on init and choose the
fastest one.
config BITREVERSE config BITREVERSE
tristate tristate
......
...@@ -163,6 +163,11 @@ static inline const struct raid6_calls *raid6_choose_gen( ...@@ -163,6 +163,11 @@ static inline const struct raid6_calls *raid6_choose_gen(
if ((*algo)->valid && !(*algo)->valid()) if ((*algo)->valid && !(*algo)->valid())
continue; continue;
if (!IS_ENABLED(CONFIG_RAID6_PQ_BENCHMARK)) {
best = *algo;
break;
}
perf = 0; perf = 0;
preempt_disable(); preempt_disable();
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment