kernel_optimize_test/drivers/md/bcache
Coly Li 8e7102273f bcache: make bch_btree_check() to be multithreaded
When registering a cache device, bch_btree_check() is called to check
all btree nodes, to make sure the btree is consistent and not
corrupted.

bch_btree_check() is recursively executed in a single thread, when there
are a lot of data cached and the btree is huge, it may take very long
time to check all the btree nodes. In my testing, I observed it took
around 50 minutes to finish bch_btree_check().

When checking the bcache btree nodes, the cache set is not running yet,
and indeed the whole tree is in read-only state, it is safe to create
multiple threads to check the btree in parallel.

This patch tries to create multiple threads, and each thread tries to
one-by-one check the sub-tree indexed by a key from the btree root node.
The parallel thread number depends on how many keys in the btree root
node. At most BCH_BTR_CHKTHREAD_MAX (64) threads can be created, but in
practice is should be min(cpu-number/2, root-node-keys-number).

Signed-off-by: Coly Li <colyli@suse.de>
Cc: Christoph Hellwig <hch@infradead.org>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
2020-03-22 10:06:57 -06:00
..
alloc.c Revert "bcache: ignore pending signals when creating gc and allocator thread" 2020-03-02 20:01:32 -07:00
bcache.h bcache: add readahead cache policy options via sysfs interface 2020-02-01 07:55:39 -07:00
bset.c bcache: add code comments for state->pool in __btree_sort() 2020-01-23 11:40:02 -07:00
bset.h bcache: explicity type cast in bset_bkey_last() 2020-02-01 07:55:39 -07:00
btree.c bcache: make bch_btree_check() to be multithreaded 2020-03-22 10:06:57 -06:00
btree.h bcache: make bch_btree_check() to be multithreaded 2020-03-22 10:06:57 -06:00
closure.c bcache: don't export symbols 2019-11-13 15:42:51 -07:00
closure.h bcache: fix typo in code comments of closure_return_with_destructor() 2018-10-08 08:19:43 -06:00
debug.c bcache: Fix an error code in bch_dump_read() 2019-09-03 08:08:29 -06:00
debug.h bcache: add identifier names to arguments of function definitions 2018-08-11 15:46:41 -06:00
extents.c bcache: treat stale && dirty keys as bad keys 2019-02-09 07:18:31 -07:00
extents.h bcache: add identifier names to arguments of function definitions 2018-08-11 15:46:41 -06:00
io.c bcache: ignore read-ahead request failure on backing device 2019-06-28 07:39:14 -06:00
journal.c bcache: remove macro nr_to_fifo_front() 2020-02-13 08:53:50 -07:00
journal.h Revert "bcache: fix fifo index swapping condition in journal_pin_cmp()" 2019-11-18 08:35:47 -07:00
Kconfig treewide: Add SPDX license identifier - Makefile/Kconfig 2019-05-21 10:50:46 +02:00
Makefile bcache: remove the extra cflags for request.o 2019-11-13 15:42:50 -07:00
movinggc.c bcache: style fix to add a blank line after declarations 2018-08-11 15:46:41 -06:00
request.c bcache: add readahead cache policy options via sysfs interface 2020-02-01 07:55:39 -07:00
request.h bcache: Clean up bch_get_congested() 2019-04-24 10:56:27 -06:00
stats.c bcache: fix memory corruption in bch_cache_accounting_clear() 2020-02-01 07:55:39 -07:00
stats.h bcache: add identifier names to arguments of function definitions 2018-08-11 15:46:41 -06:00
super.c bcache: Revert "bcache: shrink btree node cache after bch_btree_check()" 2020-02-13 08:53:49 -07:00
sysfs.c bcache: add readahead cache policy options via sysfs interface 2020-02-01 07:55:39 -07:00
sysfs.h bcache: add sysfs_strtoul_bool() for setting bit-field variables 2019-02-09 07:18:32 -07:00
trace.c License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
util.c bcache: avoid to use bio_for_each_segment_all() in bch_bio_alloc_pages() 2019-02-15 08:40:11 -07:00
util.h bcache: Revert "bcache: fix high CPU occupancy during journal" 2019-06-28 07:39:17 -06:00
writeback.c bcache: add idle_max_writeback_rate sysfs interface 2019-11-13 15:42:50 -07:00
writeback.h bcache: never writeback a discard operation 2019-02-09 07:18:31 -07:00