From f8ad2ac3e252108ccfedd115eb3009a5a7d77106 Mon Sep 17 00:00:00 2001 From: Jakob Unterwurzacher Date: Sun, 17 May 2020 21:37:36 +0200 Subject: dircache: increase cache size & lifetime Looking at the dircache debug output, we see that a "git status" workload has a very bad cache hit rate because the entries expire or get evicted before they can be reused. Increase both cache size and lifetime for a 4x speedup: Before: 75s After: 17s https://github.com/rfjakob/gocryptfs/issues/410 --- internal/fusefrontend/dircache.go | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'internal/fusefrontend') diff --git a/internal/fusefrontend/dircache.go b/internal/fusefrontend/dircache.go index 718e5b2..d6ec52c 100644 --- a/internal/fusefrontend/dircache.go +++ b/internal/fusefrontend/dircache.go @@ -12,11 +12,11 @@ import ( ) const ( - // Number of entries in the dirCache. Three entries work well for two - // (probably also three) parallel tar extracts (hit rate around 92%). + // Number of entries in the dirCache. + // 20 entries work well for "git stat" on a small git repo on sshfs. // Keep in sync with test_helpers.maxCacheFds ! // TODO: How to share this constant without causing an import cycle? - dirCacheSize = 3 + dirCacheSize = 20 // Enable Lookup/Store/Clear debug messages enableDebugMessages = false // Enable hit rate statistics printing @@ -151,7 +151,7 @@ func (d *dirCacheStruct) Lookup(dirRelPath string) (fd int, iv []byte) { // expireThread is started on the first Lookup() func (d *dirCacheStruct) expireThread() { for { - time.Sleep(1 * time.Second) + time.Sleep(60 * time.Second) d.Clear() if enableStats { d.Lock() -- cgit v1.2.3