mirror_zfs/include/sys
Tim Chase 25458cbef9 Limit the amount of dnode metadata in the ARC
Metadata-intensive workloads can cause the ARC to become permanently
filled with dnode_t objects as they're pinned by the VFS layer.
Subsequent data-intensive workloads may only benefit from about
25% of the potential ARC (arc_c_max - arc_meta_limit).

In order to help track metadata usage more precisely, the other_size
metadata arcstat has replaced with dbuf_size, dnode_size and bonus_size.

The new zfs_arc_dnode_limit tunable, which defaults to 10% of
zfs_arc_meta_limit, defines the minimum number of bytes which is desirable
to be consumed by dnodes.  Attempts to evict non-metadata will trigger
async prune tasks if the space used by dnodes exceeds this limit.

The new zfs_arc_dnode_reduce_percent tunable specifies the amount by
which the excess dnode space is attempted to be pruned as a percentage of
the amount by which zfs_arc_dnode_limit is being exceeded.  By default,
it tries to unpin 10% of the dnodes.

The problem of dnode metadata pinning was observed with the following
testing procedure (in this example, zfs_arc_max is set to 4GiB):

    - Create a large number of small files until arc_meta_used exceeds
      arc_meta_limit (3GiB with default tuning) and arc_prune
      starts increasing.

    - Create a 3GiB file with dd.  Observe arc_mata_used.  It will still
      be around 3GiB.

    - Repeatedly read the 3GiB file and observe arc_meta_limit as before.
      It will continue to stay around 3GiB.

With this modification, space for the 3GiB file is gradually made
available as subsequent demands on the ARC are made.  The previous behavior
can be restored by setting zfs_arc_dnode_limit to the same value as the
zfs_arc_meta_limit.

Signed-off-by: Tim Chase <tim@chase2k.com>
Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov>
Issue #4345
Issue #4512
Issue #4773
Closes #4858
2016-07-25 15:26:38 -07:00
..
crypto Illumos Crypto Port module added to enable native encryption in zfs 2016-07-20 10:43:30 -07:00
fm
fs OpenZFS 6314 - buffer overflow in dsl_dataset_name 2016-06-28 13:47:03 -07:00
arc_impl.h
arc.h Limit the amount of dnode metadata in the ARC 2016-07-25 15:26:38 -07:00
avl_impl.h
avl.h
blkptr.h
bplist.h
bpobj.h
bptree.h
bqueue.h
dbuf.h
ddt.h
dmu_impl.h
dmu_objset.h
dmu_send.h
dmu_traverse.h OpenZFS 2605, 6980, 6902 2016-06-28 13:47:02 -07:00
dmu_tx.h
dmu_zfetch.h
dmu.h OpenZFS 6314 - buffer overflow in dsl_dataset_name 2016-06-28 13:47:03 -07:00
dnode.h
dsl_bookmark.h Illumos 4368, 4369. 2014-07-29 10:55:29 -07:00
dsl_dataset.h OpenZFS 6314 - buffer overflow in dsl_dataset_name 2016-06-28 13:47:03 -07:00
dsl_deadlist.h Support custom build directories and move includes 2010-09-08 12:38:56 -07:00
dsl_deleg.h
dsl_destroy.h
dsl_dir.h OpenZFS 6314 - buffer overflow in dsl_dataset_name 2016-06-28 13:47:03 -07:00
dsl_pool.h
dsl_prop.h
dsl_scan.h
dsl_synctask.h Illumos 4951 - ZFS administrative commands should use reserved space 2015-05-04 09:41:10 -07:00
dsl_userhold.h Illumos #3740 2013-11-04 11:17:48 -08:00
efi_partition.h
Makefile.am Illumos Crypto Port module added to enable native encryption in zfs 2016-07-20 10:43:30 -07:00
metaslab_impl.h
metaslab.h
mntent.h
multilist.h
nvpair_impl.h
nvpair.h
pathname.h
policy.h
range_tree.h
refcount.h
rrwlock.h
sa_impl.h
sa.h
sdt.h
spa_boot.h
spa_checksum.h Implementation of AVX2 optimized Fletcher-4 2016-06-02 14:30:51 -07:00
spa_impl.h OpenZFS 6314 - buffer overflow in dsl_dataset_name 2016-06-28 13:47:03 -07:00
spa.h
space_map.h
space_reftree.h
trace_acl.h Remove znode's z_uid/z_gid member 2016-07-25 13:21:49 -07:00
trace_arc.h
trace_common.h OpenZFS 6531 - Provide mechanism to artificially limit disk performance 2016-05-26 10:11:51 -07:00
trace_dbgmsg.h SET_ERROR should print strings 2016-01-15 15:38:35 -08:00
trace_dbuf.h
trace_dmu.h
trace_dnode.h
trace_multilist.h
trace_txg.h
trace_zil.h
trace_zio.h
trace_zrlock.h SET_ERROR should print strings 2016-01-15 15:38:35 -08:00
trace.h
txg_impl.h
txg.h
u8_textprep_data.h
u8_textprep.h
uberblock_impl.h
uberblock.h
uio_impl.h
unique.h
uuid.h
vdev_disk.h Fix sync behavior for disk vdevs 2016-07-25 14:24:47 -07:00
vdev_file.h
vdev_impl.h
vdev_raidz_impl.h RAIDZ parity kstat rework 2016-07-19 16:43:07 -07:00
vdev_raidz.h Fixes and enhancements of SIMD raidz parity 2016-07-19 16:43:07 -07:00
vdev.h
xvattr.h
zap_impl.h
zap_leaf.h
zap.h OpenZFS 6314 - buffer overflow in dsl_dataset_name 2016-06-28 13:47:03 -07:00
zfeature.h
zfs_acl.h
zfs_context.h Illumos Crypto Port module added to enable native encryption in zfs 2016-07-20 10:43:30 -07:00
zfs_ctldir.h
zfs_debug.h
zfs_delay.h
zfs_dir.h
zfs_fuid.h
zfs_ioctl.h
zfs_onexit.h
zfs_rlock.h
zfs_sa.h
zfs_stat.h
zfs_vfsops.h
zfs_vnops.h
zfs_znode.h Remove znode's z_uid/z_gid member 2016-07-25 13:21:49 -07:00
zil_impl.h
zil.h
zio_checksum.h Illumos 5960, 5925 2016-01-08 15:08:19 -08:00
zio_compress.h Illumos #3742 2013-11-04 10:55:25 -08:00
zio_impl.h
zio_priority.h Add -lhHpw options to "zpool iostat" for avg latency, histograms, & queues 2016-05-12 12:36:32 -07:00
zio.h
zpl.h
zrlock.h
zvol.h