mirror of
https://git.proxmox.com/git/mirror_zfs.git
synced 2025-10-26 18:05:04 +03:00
While block cloning operation from the beginning was made per-vdev, before this change most of its data were protected by two pool- wide locks. It created lots of lock contention in many workload. This change makes most of block cloning data structures per-vdev, which allows to lock them separately. The only pool-wide lock now it spa_brt_lock, protecting array of per-vdev pointers and in most cases taken as reader. Also this splits per-vdev locks into three different ones: bv_pending_lock protects the AVL-tree of pending operations in open context, bv_mos_entries_lock protects BRT ZAP object from while being prefetched, and bv_lock protects the rest of per-vdev context during TXG commit process. There should be no functional difference aside of some optimizations. Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov> Reviewed-by: Pawel Jakub Dawidek <pjd@FreeBSD.org> Reviewed-by: Brian Atkinson <batkinson@lanl.gov> Signed-off-by: Alexander Motin <mav@FreeBSD.org> Sponsored by: iXsystems, Inc. Closes #16740 |
||
|---|---|---|
| .. | ||
| raidz_test | ||
| zdb | ||
| zed | ||
| zfs | ||
| zinject | ||
| zpool | ||
| zpool_influxdb | ||
| zstream | ||
| arc_summary | ||
| arcstat.in | ||
| dbufstat.in | ||
| fsck.zfs.in | ||
| Makefile.am | ||
| mount_zfs.c | ||
| zfs_ids_to_path.c | ||
| zgenhostid.c | ||
| zhack.c | ||
| zilstat.in | ||
| ztest.c | ||
| zvol_wait | ||