OpenAFS Master Repository branch, master, updated. BP-openafs-stable-1_8_x-640-gcd65475

Gerrit Code Review gerrit@openafs.org
Fri, 10 Jul 2020 01:30:54 -0400


The following commit has been merged in the master branch:
commit cd65475e95e25c8e7071e099a682bdcc03d2cce1
Author: Andrew Deason <adeason@sinenomine.net>
Date:   Fri Jul 26 15:28:44 2019 -0500

    afs: Let afs_ShakeLooseVCaches run longer
    
    Currently, when afs_ShakeLooseVCaches runs osi_TryEvictVCache, we
    check if osi_TryEvictVCache slept (i.e. dropped afs_xvcache/GLOCK). If
    we sleep over 100 times, then we stop trying to evict vcaches and
    return.
    
    If we have recently accessed a lot of AFS files, this limitation can
    severely reduce our ability to keep our number of vcaches limited to a
    reasonable size. For example:
    
    Say a Linux client runs a process that quickly accesses 1 million
    files (a simple 'find' command) and then does nothing else. A few
    minutes later, afs_ShakeLooseVCaches is run, but since all of the
    newly accessed vcaches have dentries attached to them, we will sleep
    on each one in order to try to prune the attached dentries. This means
    that afs_ShakeLooseVCaches will evict 100 vcaches, and then return,
    leaving us with still almost 1 million vcaches. This will happen
    repeatedly until afs_ShakeLooseVCaches finally works its way through
    all of the vcaches (which takes quite a while, if we only clear 100 at
    once), or the dentries get pruned by other means (such as, if Linux
    evicts them due to memory pressure).
    
    The limit of 100 sleeps was originally added in commit 29277d96
    (newvcache-dont-spin-20060128), but the current effect of it was
    largely introduced in commit 9be76c0d (Refactor afs_NewVCache). It
    exists to ensure that afs_ShakeLooseVCaches doesn't take forever to
    run, but the limit of 100 sleeps may seem quite low, especially if
    those 100 sleeps run very quickly.
    
    To avoid the situation described above, instead of limiting
    afs_ShakeLooseVCaches based on a fixed number of sleeps, limit it
    based on how long we've been running, and set an arbitrary limit of
    roughly 3 seconds. Only check how long we've been running after 100
    sleeps like before, so we're not constantly checking the time while
    running.
    
    Log a new warning if we exit afs_ShakeLooseVCaches prematurely if
    we've been running for too long, to help indicate what is going on.
    
    Change-Id: I65729ace748e8507cc0d5c26dec39e74d7bff5d2
    Reviewed-on: https://gerrit.openafs.org/14254
    Reviewed-by: Cheyenne Wills <cwills@sinenomine.net>
    Tested-by: BuildBot <buildbot@rampaginggeek.com>
    Reviewed-by: Benjamin Kaduk <kaduk@mit.edu>

 src/afs/afs_vcache.c |   33 +++++++++++++++++++++++++++++++--
 1 files changed, 31 insertions(+), 2 deletions(-)

-- 
OpenAFS Master Repository