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
This commit is contained in:
parent
f6088e5008
commit
f8ad2ac3e2
@ -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()
|
||||
|
@ -14,6 +14,11 @@ import (
|
||||
"time"
|
||||
)
|
||||
|
||||
// gocryptfs may hold up to maxCacheFds open for caching
|
||||
// Keep in sync with fusefrontend.dirCacheSize
|
||||
// TODO: How to share this constant without causing an import cycle?!
|
||||
const maxCacheFds = 20
|
||||
|
||||
// Indexed by mountpoint. Initialized in doInit().
|
||||
var MountInfo map[string]mountInfo
|
||||
|
||||
@ -137,11 +142,6 @@ func UnmountPanic(dir string) {
|
||||
}
|
||||
}
|
||||
|
||||
// gocryptfs may hold up to maxCacheFds open for caching
|
||||
// Keep in sync with fusefrontend.dirCacheSize
|
||||
// TODO: How to share this constant without causing an import cycle?!
|
||||
const maxCacheFds = 3
|
||||
|
||||
// UnmountErr tries to unmount "dir", retrying 10 times, and returns the
|
||||
// resulting error.
|
||||
func UnmountErr(dir string) (err error) {
|
||||
|
Loading…
Reference in New Issue
Block a user