]> CyberLeo.Net >> Repos - FreeBSD/stable/10.git/commit
MFC r277419:
authormav <mav@ccf9f872-aa2e-dd11-9fc8-001c23d0bc1f>
Tue, 3 Feb 2015 08:06:13 +0000 (08:06 +0000)
committermav <mav@ccf9f872-aa2e-dd11-9fc8-001c23d0bc1f>
Tue, 3 Feb 2015 08:06:13 +0000 (08:06 +0000)
commit089570da83834fab086887e58aae25d9a01395c3
treec02e46c522a3f92959092fb2ea5d905291b9d57a
parentb4aa8adc8c4f55d8a2fa0728b5c3cdc746854f9e
MFC r277419:
Allow skipping dmu_buf_will_dirty() call in dsl_dir_transfer_space().

dsl_dir_transfer_space() is mostly called after dsl_dir_diduse_space(),
which already calls dmu_buf_will_dirty() for the same dbuf and tx, so
its duplicate call in those cases will change nothing, only spend time.

Skipping this call by four times reduces time spent in dbuf_write_done()
and descendants, updating dataset statistics with several congested lock
acquisitions.  When rewriting 8K zvol blocks at 1GB/s rate, this reduces
CPU time spent inside dbuf_write_done(), according to profiling, from 45%
of 683K samples to 18% of 422K.

git-svn-id: svn://svn.freebsd.org/base/stable/10@278142 ccf9f872-aa2e-dd11-9fc8-001c23d0bc1f
sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_dataset.c
sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_dir.c