diff options
| author | Jakob Unterwurzacher | 2021-04-05 18:20:17 +0200 | 
|---|---|---|
| committer | Jakob Unterwurzacher | 2021-04-05 18:20:17 +0200 | 
| commit | f73aee72f87ba6cd3e46184ae75824fd38250f04 (patch) | |
| tree | 270b10742ea9f4fb70795becb9e44d862480048e /internal/fusefrontend | |
| parent | 043f81dd0129b78ec7d4553843f90203535fa406 (diff) | |
fusefrontend: print dirCache stats after unmount
Diffstat (limited to 'internal/fusefrontend')
| -rw-r--r-- | internal/fusefrontend/dircache.go | 29 | ||||
| -rw-r--r-- | internal/fusefrontend/root_node.go | 6 | 
2 files changed, 24 insertions, 11 deletions
| diff --git a/internal/fusefrontend/dircache.go b/internal/fusefrontend/dircache.go index ea0d1c8..6732de1 100644 --- a/internal/fusefrontend/dircache.go +++ b/internal/fusefrontend/dircache.go @@ -151,17 +151,24 @@ func (d *dirCache) expireThread() {  	for {  		time.Sleep(60 * time.Second)  		d.Clear() -		if enableStats { -			d.Lock() -			lookups := d.lookups -			hits := d.hits -			d.lookups = 0 -			d.hits = 0 -			d.Unlock() -			if lookups > 0 { -				fmt.Printf("dirCache: hits=%3d lookups=%3d, rate=%3d%%\n", hits, lookups, (hits*100)/lookups) -			} -		} +		d.stats() +	} +} + +// stats prints hit rate statistics and resets the counters. No-op if +// enableStats == false. +func (d *dirCache) stats() { +	if !enableStats { +		return +	} +	d.Lock() +	lookups := d.lookups +	hits := d.hits +	d.lookups = 0 +	d.hits = 0 +	d.Unlock() +	if lookups > 0 { +		fmt.Printf("dirCache: hits=%3d lookups=%3d, rate=%3d%%\n", hits, lookups, (hits*100)/lookups)  	}  } diff --git a/internal/fusefrontend/root_node.go b/internal/fusefrontend/root_node.go index 2b4ad24..3a2ecf3 100644 --- a/internal/fusefrontend/root_node.go +++ b/internal/fusefrontend/root_node.go @@ -76,6 +76,12 @@ func NewRootNode(args Args, c *contentenc.ContentEnc, n nametransform.NameTransf  	return rn  } +// main.doMount() calls this after unmount +func (rn *RootNode) AfterUnmount() { +	// print stats before we exit +	rn.dirCache.stats() +} +  // mangleOpenFlags is used by Create() and Open() to convert the open flags the user  // wants to the flags we internally use to open the backing file.  // The returned flags always contain O_NOFOLLOW. | 
