]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/commit
More aggsum optimizations
authorAlexander Motin <mav@FreeBSD.org>
Mon, 7 Jun 2021 16:02:47 +0000 (12:02 -0400)
committerBrian Behlendorf <behlendorf1@llnl.gov>
Wed, 9 Jun 2021 20:05:34 +0000 (13:05 -0700)
commite76373de7b7384bb6e5c6fd5e04f15b54df20fb7
tree5390691ce26f6f3a115c3b0f0d21bbea544ee440
parentb05ae1a82ab686f037806dbd932eb3cd5ce34c00
More aggsum optimizations

- Avoid atomic_add() when updating as_lower_bound/as_upper_bound.
Previous code was excessively strong on 64bit systems while not
strong enough on 32bit ones.  Instead introduce and use real
atomic_load() and atomic_store() operations, just an assignments
on 64bit machines, but using proper atomics on 32bit ones to avoid
torn reads/writes.

 - Reduce number of buckets on large systems.  Extra buckets not as
much improve add speed, as hurt reads.  Unlike wmsum for aggsum
reads are still important.

Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
Reviewed-by: Ryan Moeller <ryan@iXsystems.com>
Signed-off-by: Alexander Motin <mav@FreeBSD.org>
Sponsored-By: iXsystems, Inc.
Closes #12145
include/os/linux/spl/sys/atomic.h
include/sys/aggsum.h
lib/libspl/asm-generic/atomic.c
lib/libspl/include/atomic.h
module/zfs/aggsum.c