git: kernel - Fix namecache issue that can slow systems down over time

Matthew Dillon dillon at crater.dragonflybsd.org
Sun Jan 30 10:53:36 PST 2022


commit 62560bbbce0dcd957ffaa36a58620311615d781b
Author: Matthew Dillon <dillon at apollo.backplane.com>
Date:   Sun Jan 30 10:42:11 2022 -0800

    kernel - Fix namecache issue that can slow systems down over time
    
    * Fix a serious dead-record issue with the namecache.
    
      It is very common to create a blah.new file and then rename it over
      an existing file, say, blah.jpg, in order to atomically replace the
      existing file.  Such rename-over operations can cause up to
      (2 * maxvnodes) dead dead namecache records to build up on a
      single hash slot's list.
    
    * Over time, this could result in over a million records on a single
      hash slot's list which is often scanned during namecache lookups,
      causing the kernel to turn into a sludge-pile.
    
      This was not a memory leak per-say, the kernel still cleans excess
      structures (above 2 * maxvnodes) up, but that just maintains the
      status-quo and leaves the system in a slow, poorly-responsive state.
    
    * Fixed by proactively deleting matching dead entries during namecache
      lookups.  The 'live' record is typically at the beginning of the list.
      So to fix, the namecache lookup now scans the list for the hash slot
      backwards and attempts to dispose of dead records.

Summary of changes:
 sys/kern/vfs_cache.c | 84 +++++++++++++++++++++++++++++++++++++++++++---------
 1 file changed, 70 insertions(+), 14 deletions(-)

http://gitweb.dragonflybsd.org/dragonfly.git/commitdiff/62560bbbce0dcd957ffaa36a58620311615d781b


-- 
DragonFly BSD source repository



More information about the Commits mailing list