]> Git Repo - linux.git/commitdiff
lib/raid6: add option to skip algo benchmarking
authorDaniel Verkamp <[email protected]>
Mon, 12 Nov 2018 23:26:52 +0000 (15:26 -0800)
committerShaohua Li <[email protected]>
Thu, 20 Dec 2018 16:53:23 +0000 (08:53 -0800)
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: Daniel Verkamp <[email protected]>
Signed-off-by: Shaohua Li <[email protected]>
include/linux/raid/pq.h
lib/Kconfig
lib/raid6/algos.c

index d7c99161bba26a3b484cf5be020707b9fd2d35ab..605cf46c17bd315919e1c4f3425eb9ebc5e89028 100644 (file)
@@ -70,6 +70,9 @@ extern const char raid6_empty_zero_page[PAGE_SIZE];
 #define MODULE_DESCRIPTION(desc)
 #define subsys_initcall(x)
 #define module_exit(x)
+
+#define IS_ENABLED(x) (x)
+#define CONFIG_RAID6_PQ_BENCHMARK 1
 #endif /* __KERNEL__ */
 
 /* Routine choices */
index a9965f4af4dd391cce6fb3875bd48332560e3598..fcb05305a5a26d4a5394df773ff741520242438c 100644 (file)
@@ -10,6 +10,14 @@ menu "Library routines"
 config RAID6_PQ
        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
        tristate
 
index a753ff56670faee6788c8f3c0e2e6d5e13d3a3e1..7e4f7a8ffa8e2adcf6def548c9ddfc4233728547 100644 (file)
@@ -163,6 +163,11 @@ static inline const struct raid6_calls *raid6_choose_gen(
                        if ((*algo)->valid && !(*algo)->valid())
                                continue;
 
+                       if (!IS_ENABLED(CONFIG_RAID6_PQ_BENCHMARK)) {
+                               best = *algo;
+                               break;
+                       }
+
                        perf = 0;
 
                        preempt_disable();
This page took 0.066442 seconds and 4 git commands to generate.