mirror_zfs/module
Alexander Motin c0bf952c84
Several B-tree optimizations
- Introduce first element offset within a leaf.  It allows to reduce
by ~50% average memmove() size when adding/removing elements.  If the
added/removed element is in the first half of the leaf, we may shift
elements before it and adjust the bth_first instead of moving more
elements after it.
 - Use memcpy() instead of memmove() when we know there is no overlap.
 - Switch from uint64_t to uint32_t.  It does not limit anything,
but 32-bit arches should appreciate it greatly in hot paths.
 - Store leaf capacity in struct btree to avoid 64-bit divisions.
 - Adjust zfs_btree_insert_into_leaf() to always result in balanced
leaves after splitting, no matter where the new element was inserted.
Not that we care about it much, but it should also allow B-trees with
as little as two elements per leaf instead of 4 previously.

When scrubbing pool of 12 SSDs, storing 1.5TB of 4KB zvol blocks this
reduces amount of time spent in memmove() inside the scan thread from
13.7% to 5.7% and total scrub time by ~15 seconds out of 9 minutes.
It should also reduce spacemaps load time, but I haven't measured it.

Reviewed-by: Paul Dagnelie <pcd@delphix.com>
Signed-off-by: Alexander Motin <mav@FreeBSD.org>
Sponsored-By: iXsystems, Inc.
Closes #13582
2022-06-24 13:55:58 -07:00
..
avl AVL: Remove obsolete branching optimizations 2022-06-09 15:27:36 -07:00
icp Fix memory allocation issue for BLAKE3 context 2022-06-21 14:32:09 -07:00
lua linux: module: weld all but spl.ko into zfs.ko 2022-04-20 13:28:24 -07:00
nvpair linux: module: weld all but spl.ko into zfs.ko 2022-04-20 13:28:24 -07:00
os FreeBSD: Improve crypto_dispatch() handling 2022-06-17 15:38:51 -07:00
unicode linux: module: weld all but spl.ko into zfs.ko 2022-04-20 13:28:24 -07:00
zcommon Introduce BLAKE3 checksums as an OpenZFS feature 2022-06-08 15:55:57 -07:00
zfs Several B-tree optimizations 2022-06-24 13:55:58 -07:00
zstd Tiered early abort, zstd edition 2022-05-24 09:43:22 -07:00
.gitignore Cleanup linux module kbuild files 2020-06-10 09:24:15 -07:00
Kbuild.in Add support for ARCH=um for x86 sub-architectures 2022-06-15 14:22:52 -07:00
Makefile.bsd Introduce BLAKE3 checksums as an OpenZFS feature 2022-06-08 15:55:57 -07:00
Makefile.in autoconf: use include directives instead of recursing down lib 2022-05-10 10:18:11 -07:00