mirror of
https://git.proxmox.com/git/mirror_zfs.git
synced 2026-05-26 12:12:13 +03:00
Remove duplicate dbufs accounting
Since AVL already has embedded element counter, use dn_dbufs_count only for dbufs not counted there (bonus buffers) and just add them. This removes two atomics per dbuf life cycle. According to profiler it reduces time spent by dbuf_destroy() inside bottlenecked dbuf_evict_thread() from 13.36% to 9.20% of the core. Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov> Reviewed-by: Matt Ahrens <matt@delphix.com> Signed-off-by: Alexander Motin <mav@FreeBSD.org> Sponsored-By: iXsystems, Inc. Closes #9949
This commit is contained in:
@@ -2688,7 +2688,6 @@ dbuf_destroy(dmu_buf_impl_t *db)
|
||||
mutex_enter_nested(&dn->dn_dbufs_mtx,
|
||||
NESTED_SINGLE);
|
||||
avl_remove(&dn->dn_dbufs, db);
|
||||
atomic_dec_32(&dn->dn_dbufs_count);
|
||||
membar_producer();
|
||||
DB_DNODE_EXIT(db);
|
||||
if (needlock)
|
||||
@@ -2912,7 +2911,6 @@ dbuf_create(dnode_t *dn, uint8_t level, uint64_t blkid,
|
||||
ASSERT(dn->dn_object == DMU_META_DNODE_OBJECT ||
|
||||
zfs_refcount_count(&dn->dn_holds) > 0);
|
||||
(void) zfs_refcount_add(&dn->dn_holds, db);
|
||||
atomic_inc_32(&dn->dn_dbufs_count);
|
||||
|
||||
dprintf_dbuf(db, "db=%p\n", db);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user