git: kernel - Attempt to fix high vnlru cpu use

Matthew Dillon dillon at crater.dragonflybsd.org
Mon Mar 19 18:44:24 PDT 2018


commit e83d5c121c899edad9e4cab9fee4465c6d39d04c
Author: Matthew Dillon <dillon at apollo.backplane.com>
Date:   Mon Mar 19 18:39:21 2018 -0700

    kernel - Attempt to fix high vnlru cpu use
    
    * In certain situations _cache_cleanpos() gets into a livelock
      of some sort.  It is limited by a counter but the livelock creates
      havoc when it happens.
    
    * It appears that _cache_cleanpos() can get into a situation where
      the head element of all available nchashtbl[] slots is not freeable
      (e.g. due to having multiple refs).  When this occurs, trailing
      elements in the chained hash table cannot be recycled.
    
      nchashtbl[] is typically very large, so this situation does not
      happen very often.  There are usually plenty of entries to pick
      away at.  However, it looks like situations can develop where
      enough entries get into this masked state that the hysteresis is
      unable to complete, resulting in a cpubound loop.
    
    * Refactor the chained list from LIST to TAILQ and modify the
      _cache_cleanpos() function to cycle ncp's to the end of the
      list before trying to zap them.  If the zap fails, the next
      iteration will encounter a different head.
    
    Reported-by: ftigeot

Summary of changes:
 sys/kern/vfs_cache.c | 52 ++++++++++++++++++++++++++++++++++------------------
 sys/sys/namecache.h  |  2 +-
 2 files changed, 35 insertions(+), 19 deletions(-)

http://gitweb.dragonflybsd.org/dragonfly.git/commitdiff/e83d5c121c899edad9e4cab9fee4465c6d39d04c


-- 
DragonFly BSD source repository


More information about the Commits mailing list