mirror_zfs/module/os/freebsd/zfs
Matthew Ahrens 85ec5cbae2
Include scatter_chunk_waste in arc_size
The ARC caches data in scatter ABD's, which are collections of pages,
which are typically 4K.  Therefore, the space used to cache each block
is rounded up to a multiple of 4K.  The ABD subsystem tracks this wasted
memory in the `scatter_chunk_waste` kstat.  However, the ARC's `size` is
not aware of the memory used by this round-up, it only accounts for the
size that it requested from the ABD subsystem.

Therefore, the ARC is effectively using more memory than it is aware of,
due to the `scatter_chunk_waste`.  This impacts observability, e.g.
`arcstat` will show that the ARC is using less memory than it
effectively is.  It also impacts how the ARC responds to memory
pressure.  As the amount of `scatter_chunk_waste` changes, it appears to
the ARC as memory pressure, so it needs to resize `arc_c`.

If the sector size (`1<<ashift`) is the same as the page size (or
larger), there won't be any waste.  If the (compressed) block size is
relatively large compared to the page size, the amount of
`scatter_chunk_waste` will be small, so the problematic effects are
minimal.

However, if using 512B sectors (`ashift=9`), and the (compressed) block
size is small (e.g. `compression=on` with the default `volblocksize=8k`
or a decreased `recordsize`), the amount of `scatter_chunk_waste` can be
very large.  On a production system, with `arc_size` at a constant 50%
of memory, `scatter_chunk_waste` has been been observed to be 10-30% of
memory.

This commit adds `scatter_chunk_waste` to `arc_size`, and adds a new
`waste` field to `arcstat`.  As a result, the ARC's memory usage is more
observable, and `arc_c` does not need to be adjusted as frequently.

Reviewed-by: Pavel Zakharov <pavel.zakharov@delphix.com>
Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
Reviewed-by: George Wilson <gwilson@delphix.com>
Reviewed-by: Ryan Moeller <ryan@iXsystems.com>
Signed-off-by: Matthew Ahrens <mahrens@delphix.com>
Closes #10701
2020-08-17 20:04:04 -07:00
..
abd_os.c Include scatter_chunk_waste in arc_size 2020-08-17 20:04:04 -07:00
arc_os.c Changes to make openzfs build within FreeBSD buildworld 2020-07-31 21:30:31 -07:00
crypto_os.c Fix crypto build on FreeBSD HEAD 2020-05-30 12:54:57 -07:00
dmu_os.c Refactor ccompile.h to not include system headers 2020-07-25 20:09:50 -07:00
hkdf.c Add FreeBSD support to OpenZFS 2020-04-14 11:36:28 -07:00
kmod_core.c Release onexit/events with any missed zfsdev_state 2020-08-13 15:03:23 -07:00
spa_os.c Add prototypes 2020-06-18 12:21:32 -07:00
spa_stats.c Add FreeBSD support to OpenZFS 2020-04-14 11:36:28 -07:00
sysctl_os.c Changes to make openzfs build within FreeBSD buildworld 2020-07-31 21:30:31 -07:00
vdev_file.c freebsd: changes necessary to coexist with dtrace in tree 2020-07-01 09:10:08 -07:00
vdev_geom.c freebsd: changes necessary to coexist with dtrace in tree 2020-07-01 09:10:08 -07:00
vdev_label_os.c Add support for boot environment data to be stored in the label 2020-05-07 09:36:33 -07:00
zfs_acl.c FreeBSD: fix merge error in zfs_acl_ids_create 2020-08-17 15:28:03 -07:00
zfs_ctldir.c Fix page fault in zfsctl_snapdir_getattr 2020-08-01 08:42:55 -07:00
zfs_debug.c Convert Linux-isms to FreeBSD-isms in platform zfs_debug.c 2020-07-31 21:25:35 -07:00
zfs_dir.c Refactor ccompile.h to not include system headers 2020-07-25 20:09:50 -07:00
zfs_file_os.c Add FreeBSD support to OpenZFS 2020-04-14 11:36:28 -07:00
zfs_fuid_os.c Rename refcount.h to zfs_refcount.h 2020-07-29 16:35:33 -07:00
zfs_ioctl_compat.c Changes to make openzfs build within FreeBSD buildworld 2020-07-31 21:30:31 -07:00
zfs_ioctl_os.c Remove redundant includes 2020-06-08 09:57:36 -07:00
zfs_onexit_os.c Add FreeBSD support to OpenZFS 2020-04-14 11:36:28 -07:00
zfs_vfsops.c FreeBSD: Add support for lockless lookup 2020-08-05 10:19:51 -07:00
zfs_vnops.c FreeBSD: update vaccess signature on most recent HEAD 2020-08-07 14:16:01 -07:00
zfs_znode.c FreeBSD: Add support for lockless lookup 2020-08-05 10:19:51 -07:00
zio_crypt.c Fix typos 2020-06-09 21:24:09 -07:00
zvol_os.c FreeBSD: Create taskq threads in appropriate proc 2020-08-17 11:01:19 -07:00