[PATCH v5 0/6] fs/dcache: Track & limit # of negative dentries
From: Waiman Long
Date: Mon Jul 02 2018 - 01:52:57 EST
v4->v5:
- Backed to the latest 4.18 kernel and modify the code
accordingly. Patch 1 "Relocate dentry_kill() after lock_parent()"
is now no longer necessary.
- Make tracking and limiting of negative dentries an user configurable
option (CONFIG_DCACHE_TRACK_NEG_ENTRY) so that users can decide if
they want to include this capability in the kernel.
- Make killing excess negative dentries an optional feature that can be
enabled via a boot command line option or a sysctl parameter.
- Spread negative dentry pruning across multiple CPUs.
v4: https://lkml.org/lkml/2017/9/18/739
A rogue application can potentially create a large number of negative
dentries in the system consuming most of the memory available if it
is not under the direct control of a memory controller that enforce
kernel memory limit.
This patchset introduces changes to the dcache subsystem to track and
optionally limit the number of negative dentries allowed to be created by
background pruning of excess negative dentries or even kill it after use.
This capability will help to limit the amount of memory that can be
consumed by negative dentries.
Patch 1 tracks the number of negative dentries present in the LRU
lists and reports it in /proc/sys/fs/dentry-state.
Patch 2 makes negative dentry tracking a user configurable option
(CONFIG_DCACHE_TRACK_NEG_ENTRY) as well as adding a "neg_dentry_pc=" boot
command line option to specify a soft limit on the number of negative
allowed as a percentage of total system memory. The default is 2%.
Patch 3 enables automatic pruning of least recently used negative
dentries when the total number is close to the preset limit.
Patch 4 spreads the negative dentry pruning effort to multiple CPUs to
make it more fair.
Patch 5 extends the "neg_dentry_pc=" boot command line option to
optionally enable enforcing the limit by killing off excess negative
dentries immediately after use.
Patch 6 makes the limit enforcing option a sysctl parameter so that it
can be dynamically enabled at run time if the need arises, for example,
when a rogue application generating a lot of negative dentries is
detected.
Waiman Long (6):
fs/dcache: Track & report number of negative dentries
fs/dcache: Make negative dentry tracking configurable
fs/dcache: Enable automatic pruning of negative dentries
fs/dcache: Spread negative dentry pruning across multiple CPUs
fs/dcache: Allow optional enforcement of negative dentry limit
fs/dcache: Make negative dentry limit enforcement sysctl parameter
Documentation/admin-guide/kernel-parameters.txt | 12 +
Documentation/sysctl/fs.txt | 30 +-
fs/Kconfig | 10 +
fs/dcache.c | 452 +++++++++++++++++++++++-
include/linux/dcache.h | 13 +-
include/linux/list_lru.h | 1 +
kernel/sysctl.c | 11 +
mm/list_lru.c | 4 +-
8 files changed, 519 insertions(+), 14 deletions(-)
--
1.8.3.1