36 lines
831 B
Go
36 lines
831 B
Go
package scan
|
|
|
|
import (
|
|
"context"
|
|
"os"
|
|
"runtime"
|
|
"testing"
|
|
"time"
|
|
)
|
|
|
|
// TestMemoryPerNode reports heap use per inventory node for a real tree.
|
|
// Set MAPSIZE_MEM_ROOT to a directory to run it.
|
|
func TestMemoryPerNode(t *testing.T) {
|
|
root := os.Getenv("MAPSIZE_MEM_ROOT")
|
|
if root == "" {
|
|
t.Skip("set MAPSIZE_MEM_ROOT")
|
|
}
|
|
var before, after runtime.MemStats
|
|
runtime.GC()
|
|
runtime.ReadMemStats(&before)
|
|
start := time.Now()
|
|
s, err := Start(context.Background(), root, Options{})
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
<-s.Done()
|
|
el := time.Since(start)
|
|
runtime.GC()
|
|
runtime.ReadMemStats(&after)
|
|
n := s.Tree.Len()
|
|
heap := after.HeapAlloc - before.HeapAlloc
|
|
t.Logf("nodes=%d scan=%s heap=%.1f MiB (%.0f bytes/node)", n, el.Round(time.Millisecond),
|
|
float64(heap)/(1<<20), float64(heap)/float64(n))
|
|
runtime.KeepAlive(s)
|
|
}
|