git: kernel - Fix bugs and refactor namecache cleaning code
Matthew Dillon
dillon at crater.dragonflybsd.org
Sat Oct 28 16:12:36 PDT 2017
commit bf3f67a7c2acae2b8e097b00c9e13bc4241dfebb
Author: Matthew Dillon <dillon at apollo.backplane.com>
Date: Sat Oct 28 16:04:58 2017 -0700
kernel - Fix bugs and refactor namecache cleaning code
* Refactor the cleaning code. For positive namecache entries,
track based on NCHHASH linkages rather than v_namecache linkages.
Also maintain a count of freeable (leaf) entries and use that
in the _cache_cleanpos() code.
This should hopefully fix a bug where the system can get stuck
constantly calling _cache_cleanpos() in situations where there
are not any freeable entries.
* Refactor the negative namecache tracking code. Move to a per-cpu
structure where entries are made based on the current cpu and removed
based on the recorded cpu. Refactor the cleaning code to iterate
the cpu list on a per-call basis which should hopefully allow multiple
cpus to clean the ncneg lists concurrently.
This reduces a SMP bottleneck, but does not deal with cache
ping-ponging issues on related structures.
Reported-by: ftigeot
Summary of changes:
sys/kern/kern_clock.c | 1 +
sys/kern/vfs_cache.c | 202 ++++++++++++++++++++++++++++++++++++++------------
sys/sys/namecache.h | 4 +-
3 files changed, 158 insertions(+), 49 deletions(-)
http://gitweb.dragonflybsd.org/dragonfly.git/commitdiff/bf3f67a7c2acae2b8e097b00c9e13bc4241dfebb
--
DragonFly BSD source repository
More information about the Commits
mailing list