mirror_zfs/module/zfs
Brian Behlendorf 34dbc618f5
Reduce dbuf_find() lock contention
Holding a dbuf is a common operation which can become highly contended
in dbuf_find() when acquiring the dbuf hash mutex.  This is particularly
true on Linux when reading/writing volumes since by default up to 32
threads from the zvol_taskq may be taking a hold of the same dbuf.
This should also be observable on FreeBSD as long as there are enough
processes accessing the volume concurrently.

This is further aggregrated by the fact that only the block id will
be unique when calculating the dbuf hash for a single volume.  The
objset id, object id, and level will be the same for data blocks.
This has been observed to result in a somehwat less than uniform hash
distribution and a longer than expected max hash chain depth (~20)
on a large memory system (256 GB) using volumes.

This commit improves the siutation by switching the hash mutex to
an rwlock to allow concurrent lookups, and increasing DBUF_RWLOCKS
from 2048 to 8192 to further reduce the odds of a hash collision.

Reviewed-by: Tony Hutter <hutter2@llnl.gov>
Reviewed-by: Alexander Motin <mav@FreeBSD.org>
Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov>
Closes #13405
2022-05-04 11:17:29 -07:00
..
abd.c Rename fallthrough to zfs_fallthrough 2022-02-15 08:58:59 -08:00
aggsum.c Remove bcopy(), bzero(), bcmp() 2022-03-15 15:13:42 -07:00
arc.c Improve the inline descriptions of the ARC module parameters 2022-04-20 13:16:25 -07:00
blkptr.c Remove bcopy(), bzero(), bcmp() 2022-03-15 15:13:42 -07:00
bplist.c Fast Clone Deletion 2019-07-26 10:54:14 -07:00
bpobj.c Remove bcopy(), bzero(), bcmp() 2022-03-15 15:13:42 -07:00
bptree.c module: zfs: fix unused, remove argsused 2021-12-23 09:42:47 -08:00
bqueue.c Implement Redacted Send/Receive 2019-06-19 09:48:12 -07:00
btree.c Remove bcopy(), bzero(), bcmp() 2022-03-15 15:13:42 -07:00
dataset_kstats.c Remove bcopy(), bzero(), bcmp() 2022-03-15 15:13:42 -07:00
dbuf_stats.c Reduce dbuf_find() lock contention 2022-05-04 11:17:29 -07:00
dbuf.c Reduce dbuf_find() lock contention 2022-05-04 11:17:29 -07:00
ddt_zap.c module/*.ko: prune .data, global .rodata 2022-01-14 15:37:55 -08:00
ddt.c Remove bcopy(), bzero(), bcmp() 2022-03-15 15:13:42 -07:00
dmu_diff.c module: zfs: fix unused, remove argsused 2021-12-23 09:42:47 -08:00
dmu_object.c Introduce CPU_SEQID_UNSTABLE 2020-11-02 11:51:12 -08:00
dmu_objset.c Remove bcopy(), bzero(), bcmp() 2022-03-15 15:13:42 -07:00
dmu_recv.c Switch from _Noreturn to __attribute__((noreturn)) 2022-03-23 08:51:00 -07:00
dmu_redact.c Switch from _Noreturn to __attribute__((noreturn)) 2022-03-23 08:51:00 -07:00
dmu_send.c Switch from _Noreturn to __attribute__((noreturn)) 2022-03-23 08:51:00 -07:00
dmu_traverse.c Remove bcopy(), bzero(), bcmp() 2022-03-15 15:13:42 -07:00
dmu_tx.c module: mark arguments used 2022-02-18 09:34:03 -08:00
dmu_zfetch.c Clean up CSTYLEDs 2022-01-26 11:38:52 -08:00
dmu.c Improve log spacemap load time 2022-04-26 10:44:21 -07:00
dnode_sync.c Remove bcopy(), bzero(), bcmp() 2022-03-15 15:13:42 -07:00
dnode.c Remove bcopy(), bzero(), bcmp() 2022-03-15 15:13:42 -07:00
dsl_bookmark.c module: zfs: dsl_bookmark: silence false-positive maybe-uninitialised 2022-03-28 10:03:13 -07:00
dsl_crypt.c Remove bcopy(), bzero(), bcmp() 2022-03-15 15:13:42 -07:00
dsl_dataset.c Default zfs_max_recordsize to 16M 2022-04-28 15:12:24 -07:00
dsl_deadlist.c Remove bcopy(), bzero(), bcmp() 2022-03-15 15:13:42 -07:00
dsl_deleg.c Reduce loaded range tree memory usage 2019-10-09 10:36:03 -07:00
dsl_destroy.c Improve zpool status output, list all affected datasets 2022-04-25 17:25:42 -07:00
dsl_dir.c Fix ENOSPC when unlinking multiple files from full pool 2022-03-08 09:16:35 -08:00
dsl_pool.c Fix ENOSPC when unlinking multiple files from full pool 2022-03-08 09:16:35 -08:00
dsl_prop.c Rename fallthrough to zfs_fallthrough 2022-02-15 08:58:59 -08:00
dsl_scan.c Remove bcopy(), bzero(), bcmp() 2022-03-15 15:13:42 -07:00
dsl_synctask.c module: zfs: fix unused, remove argsused 2021-12-23 09:42:47 -08:00
dsl_userhold.c Replace sprintf()->snprintf() and strcpy()->strlcpy() 2020-06-07 11:42:12 -07:00
edonr_zfs.c Remove bcopy(), bzero(), bcmp() 2022-03-15 15:13:42 -07:00
fm.c module/*.ko: prune .data, global .rodata 2022-01-14 15:37:55 -08:00
gzip.c Forbid b{copy,zero,cmp}(). Don't include <strings.h> for <string.h> 2022-03-15 15:13:48 -07:00
hkdf.c Remove bcopy(), bzero(), bcmp() 2022-03-15 15:13:42 -07:00
lz4_zfs.c Updated the lz4 decompressor 2022-01-07 10:36:49 -08:00
lz4.c lz4: Cherrypick fix for CVE-2021-3520 2022-01-12 16:14:36 -08:00
lzjb.c module: zfs: fix unused, remove argsused 2021-12-23 09:42:47 -08:00
metaslab.c Improve log spacemap load time 2022-04-26 10:44:21 -07:00
mmp.c Switch from _Noreturn to __attribute__((noreturn)) 2022-03-23 08:51:00 -07:00
multilist.c Clean up CSTYLEDs 2022-01-26 11:38:52 -08:00
objlist.c Implement Redacted Send/Receive 2019-06-19 09:48:12 -07:00
pathname.c Replace ZFS on Linux references with OpenZFS 2020-10-08 20:10:13 -07:00
range_tree.c Remove bcopy(), bzero(), bcmp() 2022-03-15 15:13:42 -07:00
refcount.c module/*.ko: prune .data, global .rodata 2022-01-14 15:37:55 -08:00
rrwlock.c Rename refcount.h to zfs_refcount.h 2020-07-29 16:35:33 -07:00
sa.c Remove bcopy(), bzero(), bcmp() 2022-03-15 15:13:42 -07:00
sha256.c module: zfs: fix unused, remove argsused 2021-12-23 09:42:47 -08:00
skein_zfs.c Remove bcopy(), bzero(), bcmp() 2022-03-15 15:13:42 -07:00
spa_boot.c Add include files for prototypes 2020-06-18 12:21:25 -07:00
spa_checkpoint.c Remove bcopy(), bzero(), bcmp() 2022-03-15 15:13:42 -07:00
spa_config.c Clean up CSTYLEDs 2022-01-26 11:38:52 -08:00
spa_errlog.c Improve zpool status output, list all affected datasets 2022-04-25 17:25:42 -07:00
spa_history.c module: mark arguments used 2022-02-18 09:34:03 -08:00
spa_log_spacemap.c Improve log spacemap load time 2022-04-26 10:44:21 -07:00
spa_misc.c Remove bcopy(), bzero(), bcmp() 2022-03-15 15:13:42 -07:00
spa_stats.c Clean up CSTYLEDs 2022-01-26 11:38:52 -08:00
spa.c Improve log spacemap load time 2022-04-26 10:44:21 -07:00
space_map.c Remove bcopy(), bzero(), bcmp() 2022-03-15 15:13:42 -07:00
space_reftree.c Reduce loaded range tree memory usage 2019-10-09 10:36:03 -07:00
THIRDPARTYLICENSE.cityhash OpenZFS 8484 - Implement aggregate sum and use for arc counters 2018-06-06 09:35:59 -07:00
THIRDPARTYLICENSE.cityhash.descrip OpenZFS 8484 - Implement aggregate sum and use for arc counters 2018-06-06 09:35:59 -07:00
txg.c Switch from _Noreturn to __attribute__((noreturn)) 2022-03-23 08:51:00 -07:00
uberblock.c MMP interval and fail_intervals in uberblock 2019-03-21 12:47:57 -07:00
unique.c Reduce loaded range tree memory usage 2019-10-09 10:36:03 -07:00
vdev_cache.c Clean up CSTYLEDs 2022-01-26 11:38:52 -08:00
vdev_draid_rand.c Distributed Spare (dRAID) Feature 2020-11-13 13:51:51 -08:00
vdev_draid.c Remove bcopy(), bzero(), bcmp() 2022-03-15 15:13:42 -07:00
vdev_indirect_births.c Remove bcopy(), bzero(), bcmp() 2022-03-15 15:13:42 -07:00
vdev_indirect_mapping.c Remove bcopy(), bzero(), bcmp() 2022-03-15 15:13:42 -07:00
vdev_indirect.c Remove bcopy(), bzero(), bcmp() 2022-03-15 15:13:42 -07:00
vdev_initialize.c Switch from _Noreturn to __attribute__((noreturn)) 2022-03-23 08:51:00 -07:00
vdev_label.c Remove bcopy(), bzero(), bcmp() 2022-03-15 15:13:42 -07:00
vdev_mirror.c Clean up CSTYLEDs 2022-01-26 11:38:52 -08:00
vdev_missing.c module: zfs: fix unused, remove argsused 2021-12-23 09:42:47 -08:00
vdev_queue.c Clean up CSTYLEDs 2022-01-26 11:38:52 -08:00
vdev_raidz_math_aarch64_neon_common.h FreeBSD: fix the build with Clang 11 2020-08-17 15:40:17 -07:00
vdev_raidz_math_aarch64_neon.c Linux 5.0 compat: SIMD compatibility 2019-07-12 09:31:20 -07:00
vdev_raidz_math_aarch64_neonx2.c Linux 5.0 compat: SIMD compatibility 2019-07-12 09:31:20 -07:00
vdev_raidz_math_avx2.c FreeBSD: fix the build with Clang 11 2020-08-17 15:40:17 -07:00
vdev_raidz_math_avx512bw.c Refactor ccompile.h to not include system headers 2020-07-25 20:09:50 -07:00
vdev_raidz_math_avx512f.c FreeBSD: fix the build with Clang 11 2020-08-17 15:40:17 -07:00
vdev_raidz_math_impl.h Distributed Spare (dRAID) Feature 2020-11-13 13:51:51 -08:00
vdev_raidz_math_powerpc_altivec_common.h FreeBSD: fix the build with Clang 11 2020-08-17 15:40:17 -07:00
vdev_raidz_math_powerpc_altivec.c Prefix zfs internal endian checks with _ZFS 2020-07-28 13:02:49 -07:00
vdev_raidz_math_scalar.c Rename fallthrough to zfs_fallthrough 2022-02-15 08:58:59 -08:00
vdev_raidz_math_sse2.c FreeBSD: fix the build with Clang 11 2020-08-17 15:40:17 -07:00
vdev_raidz_math_ssse3.c Refactor ccompile.h to not include system headers 2020-07-25 20:09:50 -07:00
vdev_raidz_math.c module/*.ko: prune .data, global .rodata 2022-01-14 15:37:55 -08:00
vdev_raidz.c Remove bcopy(), bzero(), bcmp() 2022-03-15 15:13:42 -07:00
vdev_rebuild.c Switch from _Noreturn to __attribute__((noreturn)) 2022-03-23 08:51:00 -07:00
vdev_removal.c Improve log spacemap load time 2022-04-26 10:44:21 -07:00
vdev_root.c Distributed Spare (dRAID) Feature 2020-11-13 13:51:51 -08:00
vdev_trim.c Switch from _Noreturn to __attribute__((noreturn)) 2022-03-23 08:51:00 -07:00
vdev.c Improve log spacemap load time 2022-04-26 10:44:21 -07:00
zap_leaf.c Remove bcopy(), bzero(), bcmp() 2022-03-15 15:13:42 -07:00
zap_micro.c Remove bcopy(), bzero(), bcmp() 2022-03-15 15:13:42 -07:00
zap.c Remove bcopy(), bzero(), bcmp() 2022-03-15 15:13:42 -07:00
zcp_get.c Correct compilation errors reported by GCC 10/11 2022-02-20 19:20:00 -08:00
zcp_global.c OpenZFS 8600 - ZFS channel programs - snapshot 2018-02-08 15:29:24 -08:00
zcp_iter.c module/*.ko: prune .data, global .rodata 2022-01-14 15:37:55 -08:00
zcp_set.c Support setting user properties in a channel program 2020-02-14 13:41:42 -08:00
zcp_synctask.c module/*.ko: prune .data, global .rodata 2022-01-14 15:37:55 -08:00
zcp.c Clean up CSTYLEDs 2022-01-26 11:38:52 -08:00
zfeature.c Improve zpool status output, list all affected datasets 2022-04-25 17:25:42 -07:00
zfs_byteswap.c module: mark arguments used 2022-02-18 09:34:03 -08:00
zfs_fm.c Remove bcopy(), bzero(), bcmp() 2022-03-15 15:13:42 -07:00
zfs_fuid.c Add const to nvlist functions to properly expose their real behavior 2021-12-06 18:19:13 -07:00
zfs_ioctl.c Improve zpool status output, list all affected datasets 2022-04-25 17:25:42 -07:00
zfs_log.c Remove bcopy(), bzero(), bcmp() 2022-03-15 15:13:42 -07:00
zfs_onexit.c file reference counts can get corrupted 2021-07-10 19:00:37 -06:00
zfs_quota.c File incorrectly zeroed when receiving incremental stream that toggles -L 2020-06-09 10:41:01 -07:00
zfs_ratelimit.c Change checksum & IO delay ratelimit values 2018-03-04 17:34:51 -08:00
zfs_replay.c Remove bcopy(), bzero(), bcmp() 2022-03-15 15:13:42 -07:00
zfs_rlock.c Add a "try" operation for range locks 2020-07-06 11:53:31 -07:00
zfs_sa.c Remove bcopy(), bzero(), bcmp() 2022-03-15 15:13:42 -07:00
zfs_vnops.c Speed up WB_SYNC_NONE when a WB_SYNC_ALL occurs simultaneously 2022-05-03 13:23:26 -07:00
zil.c Remove bcopy(), bzero(), bcmp() 2022-03-15 15:13:42 -07:00
zio_checksum.c Remove bcopy(), bzero(), bcmp() 2022-03-15 15:13:42 -07:00
zio_compress.c module: zfs: fix unused, remove argsused 2021-12-23 09:42:47 -08:00
zio_inject.c module: zfs: zio_inject: zio_match_handler: don't << -1 2022-03-13 13:18:17 -07:00
zio.c Default zfs_max_recordsize to 16M 2022-04-28 15:12:24 -07:00
zle.c Add include files for prototypes 2020-06-18 12:21:25 -07:00
zrlock.c Remove dead code 2020-06-18 12:21:18 -07:00
zthr.c Switch from _Noreturn to __attribute__((noreturn)) 2022-03-23 08:51:00 -07:00
zvol.c Add missing replay entry in zvol_replay_vector for TX_SETSAXATTR 2022-05-02 11:01:26 -07:00