mirror of
https://git.proxmox.com/git/mirror_zfs.git
synced 2026-05-23 02:44:41 +03:00
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
This commit is contained in:
committed by
Brian Behlendorf
parent
b05ae1a82a
commit
e76373de7b
@@ -390,6 +390,19 @@ atomic_swap_ptr(volatile void *target, void *bits)
|
||||
return (old);
|
||||
}
|
||||
|
||||
#ifndef _LP64
|
||||
uint64_t
|
||||
atomic_load_64(volatile uint64_t *target)
|
||||
{
|
||||
return (__atomic_load_n(target, __ATOMIC_RELAXED));
|
||||
}
|
||||
|
||||
void
|
||||
atomic_store_64(volatile uint64_t *target, uint64_t bits)
|
||||
{
|
||||
return (__atomic_store_n(target, bits, __ATOMIC_RELAXED));
|
||||
}
|
||||
#endif
|
||||
|
||||
int
|
||||
atomic_set_long_excl(volatile ulong_t *target, uint_t value)
|
||||
|
||||
Reference in New Issue
Block a user