From 9ff45e73cf3d91d12f09e108e1267e37ae842c87 Mon Sep 17 00:00:00 2001 From: Andrew Deason Date: Mon, 16 Jul 2018 16:53:34 -0500 Subject: [PATCH 1/1] afs: Skip bulkstat if stat cache looks full Currently, afs_lookup() will try to prefetch dir entries for normal dirs via bulkstat whenever multiple pids are reading that dir. However, if we already have a lot of vcaches, ShakeLooseVCaches may be struggling to limit the vcaches we already have. Entering afs_DoBulkStat can make this worse, since we grab afs_xvcache repeatedly, we may kick out other vcaches, and we'll possibly create 30 new vcaches that may not even be used before they're evicted. To try to avoid this, skip running afs_DoBulkStat if it looks like the stat cache is really full. Change-Id: I1634530170a189f32cb962dd7df28f88bc758b71 Reviewed-on: https://gerrit.openafs.org/13256 Reviewed-by: Cheyenne Wills Tested-by: BuildBot Reviewed-by: Benjamin Kaduk --- src/afs/VNOPS/afs_vnop_lookup.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/afs/VNOPS/afs_vnop_lookup.c b/src/afs/VNOPS/afs_vnop_lookup.c index 8534707..dd585e9 100644 --- a/src/afs/VNOPS/afs_vnop_lookup.c +++ b/src/afs/VNOPS/afs_vnop_lookup.c @@ -1355,6 +1355,11 @@ afs_ShouldTryBulkStat(struct vcache *adp) * while we're doing a lookup. */ return 0; } + if (afs_VCacheStressed()) { + /* If we already have too many vcaches, don't create more vcaches we + * may not even use. */ + return 0; + } if ((adp->f.states & CForeign)) { /* Don't bulkstat for dfs xlator dirs. */ return 0; -- 1.9.4