mirror_zfs/module/os/linux/zfs
Matthew Ahrens 8fbf432ae2
anon_pages are not free/evictable
`arc_free_memory()` returns the amount of memory that the ARC considers
to be free.  This includes pages that are not actually free, but can be
evicted with essentially zero cost (without doing any i/o), for example
the page cache.  The ARC can "squeeze out" any pages included in this
calculation, leaving only `arc_sys_free` (1/64th of RAM) for these
free/evictable pages.

Included in the count of free/evictable pages is
`nr_inactive_anon_pages()`, which is described as "Anonymous memory that
has not been used recently and can be swapped out".  These pages would
have to be written out to disk (swap) in order to evict them, and they
are not included in `/proc/meminfo`'s `MemAvailable`.

Therefore it is not appropriate for `nr_inactive_anon_pages()` to be
included in the free/evictable memory returned by `arc_free_memory()`,
because the ARC shouldn't (intentionally) make the system swap.

This commit removes `nr_inactive_anon_pages()` from the memory returned
by `arc_free_memory()`.  This is a step towards enabling the ARC to
manage free memory by monitoring it and reducing the ARC size as we
notice that there is insufficient free memory (in the `arc_reap_zthr`),
rather than the current method of relying on the `arc_shrinker`
callback.

Reviewed-by: Tony Nguyen <tony.nguyen@delphix.com>
Reviewed-by: Pavel Zakharov <pavel.zakharov@delphix.com>
Reviewed-by: George Wilson <gwilson@delphix.com>
Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
Signed-off-by: Matthew Ahrens <mahrens@delphix.com>
Closes #10575
2020-07-16 10:11:26 -07:00
..
abd_os.c Add abd_cache_reap_now for abd_chunk_cache users 2020-06-17 21:44:13 -07:00
arc_os.c anon_pages are not free/evictable 2020-07-16 10:11:26 -07:00
Makefile.in Cleanup linux module kbuild files 2020-06-10 09:24:15 -07:00
mmp_os.c Add zfs_multihost_interval tunable handler for FreeBSD 2020-06-23 13:32:42 -07:00
policy.c filesystem_limit/snapshot_limit is incorrectly enforced against root 2020-07-11 17:18:02 -07:00
qat_compress.c Fix QAT allocation failure return value 2020-01-06 11:17:53 -08:00
qat_crypt.c QAT related bug fixes 2019-09-12 13:33:44 -07:00
qat.c QAT related bug fixes 2019-09-12 13:33:44 -07:00
spa_misc_os.c Make spa_history_zone platform-dependent in kernel 2020-03-02 09:43:30 -08:00
spa_stats.c Mark functions as static 2020-06-18 12:20:38 -07:00
trace.c Enable use of DTRACE_PROBE* macros in "spl" module 2019-11-01 13:13:43 -07:00
vdev_disk.c Make struct vdev_disk_t be platform private 2020-06-16 11:43:33 -07:00
vdev_file.c Mark Linux fallocate extensions as specific to Linux 2019-11-30 15:40:22 -08:00
zfs_acl.c Mark functions as static 2020-06-18 12:20:38 -07:00
zfs_ctldir.c Eliminate Linux specific inode usage from common code 2019-12-11 11:53:57 -08:00
zfs_debug.c Linux 5.6 compat: time_t 2020-02-27 09:31:02 -08:00
zfs_dir.c Add 'zfs wait' command 2020-04-01 10:02:06 -07:00
zfs_file_os.c Re-share zfsdev_getminor and zfs_onexit_fd_hold 2020-02-28 14:50:32 -08:00
zfs_ioctl_os.c Restore support for in-kernel ZFS ioctls 2020-06-08 13:57:22 -07:00
zfs_sysfs.c Persistent L2ARC 2020-04-10 10:33:35 -07:00
zfs_vfsops.c Mark functions as static 2020-06-18 12:20:38 -07:00
zfs_vnops.c Remove dead code 2020-06-18 12:21:18 -07:00
zfs_znode.c Mark functions as static 2020-06-18 12:20:38 -07:00
zio_crypt.c Linux 4.14, 4.19, 5.0+ compat: SIMD save/restore 2019-10-24 10:17:33 -07:00
zpl_ctldir.c Eliminate Linux specific inode usage from common code 2019-12-11 11:53:57 -08:00
zpl_export.c Eliminate Linux specific inode usage from common code 2019-12-11 11:53:57 -08:00
zpl_file.c Mark functions as static 2020-06-18 12:20:38 -07:00
zpl_inode.c Mark functions as static 2020-06-18 12:20:38 -07:00
zpl_super.c linux: add basic fallocate(mode=0/2) compatibility 2020-06-18 11:22:11 -07:00
zpl_xattr.c Mark functions as static 2020-06-18 12:20:38 -07:00
zvol_os.c Remove dead code 2020-06-18 12:21:18 -07:00