File: file_timing_test.go

package info (click to toggle)
golang-github-victoriametrics-fastcache 1.12.0%2Bds1-1
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 192 kB
  • sloc: makefile: 2
file content (85 lines) | stat: -rw-r--r-- 1,949 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
package fastcache

import (
	"fmt"
	"os"
	"sync"
	"testing"
)

func BenchmarkSaveToFile(b *testing.B) {
	for _, concurrency := range []int{1, 2, 4, 8, 16} {
		b.Run(fmt.Sprintf("concurrency_%d", concurrency), func(b *testing.B) {
			benchmarkSaveToFile(b, concurrency)
		})
	}
}

func benchmarkSaveToFile(b *testing.B, concurrency int) {
	filePath := fmt.Sprintf("BencharkSaveToFile.%d.fastcache", concurrency)
	defer os.RemoveAll(filePath)
	c := newBenchCache()

	b.ReportAllocs()
	b.ResetTimer()
	b.SetBytes(benchCacheSize)
	for i := 0; i < b.N; i++ {
		if err := c.SaveToFileConcurrent(filePath, concurrency); err != nil {
			b.Fatalf("unexpected error when saving to file: %s", err)
		}
	}
}

func BenchmarkLoadFromFile(b *testing.B) {
	for _, concurrency := range []int{1, 2, 4, 8, 16} {
		b.Run(fmt.Sprintf("concurrency_%d", concurrency), func(b *testing.B) {
			benchmarkLoadFromFile(b, concurrency)
		})
	}
}

func benchmarkLoadFromFile(b *testing.B, concurrency int) {
	filePath := fmt.Sprintf("BenchmarkLoadFromFile.%d.fastcache", concurrency)
	defer os.RemoveAll(filePath)

	c := newBenchCache()
	if err := c.SaveToFileConcurrent(filePath, concurrency); err != nil {
		b.Fatalf("cannot save cache to file: %s", err)
	}

	b.ReportAllocs()
	b.ResetTimer()
	b.SetBytes(benchCacheSize)
	for i := 0; i < b.N; i++ {
		c, err := LoadFromFile(filePath)
		if err != nil {
			b.Fatalf("cannot load cache from file: %s", err)
		}
		var s Stats
		c.UpdateStats(&s)
		if s.EntriesCount == 0 {
			b.Fatalf("unexpected zero entries")
		}
	}
}

var (
	benchCache     *Cache
	benchCacheOnce sync.Once
)

func newBenchCache() *Cache {
	benchCacheOnce.Do(func() {
		c := New(benchCacheSize)
		itemsCount := benchCacheSize / 20
		for i := 0; i < itemsCount; i++ {
			k := []byte(fmt.Sprintf("key %d", i))
			v := []byte(fmt.Sprintf("value %d", i))
			c.Set(k, v)
		}
		benchCache = c
	})
	return benchCache
}

const benchCacheSize = bucketsCount * chunkSize