X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=blobdiff_plain;f=bench_test.go;h=0e4e9dc34b90ce4ba5c6f6abd6d1d7420751e78f;hb=HEAD;hp=328e54368c7e0c91e2dbd824ef5871894a91d023;hpb=97445fe7e6737da5536c5f7a6909821a1612f66c;p=ric-plt%2Fsdlgo.git diff --git a/bench_test.go b/bench_test.go index 328e543..0e4e9dc 100644 --- a/bench_test.go +++ b/bench_test.go @@ -31,63 +31,100 @@ import ( "gerrit.o-ran-sc.org/r/ric-plt/sdlgo" ) -type singleBenchmark struct { - key string +type nsKeysBenchmark struct { + ns string + nsCount int + keyName string + keyCount int keySize int valueSize int } -type multiBenchmark struct { - keyBase string +type keysBenchmark struct { + keyName string keyCount int keySize int valueSize int } -type setBenchmark struct { +type groupBenchmark struct { key string member string memberCount int } -func (bm singleBenchmark) String(oper string) string { - return fmt.Sprintf("op = %s key=%d value=%d", oper, bm.keySize, bm.valueSize) +func (bm nsKeysBenchmark) String(oper string) string { + return fmt.Sprintf("op=%s ns-cnt=%d key-cnt=%d key-sz=%d value-sz=%d", + oper, bm.nsCount, bm.keyCount, bm.keySize, bm.valueSize) +} + +func (bm keysBenchmark) String(oper string) string { + return fmt.Sprintf("op=%s key-cnt=%d key-sz=%d value-sz=%d", + oper, bm.keyCount, bm.keySize, bm.valueSize) } -func (bm multiBenchmark) String(oper string) string { - return fmt.Sprintf("op = %s keycnt=%d key=%d value=%d", oper, bm.keyCount, bm.keySize, bm.valueSize) +func (bm groupBenchmark) String(oper string) string { + return fmt.Sprintf("op=%s, mbr-cnt=%d", oper, bm.memberCount) } -func (bm setBenchmark) String(oper string) string { - return fmt.Sprintf("op = %s, memberCount=%d", oper, bm.memberCount) +func getNsKeyBenchmarkInput() []nsKeysBenchmark { + return []nsKeysBenchmark{ + {"ns-a", 1, "a", 100, 10, 64}, + {"ns-b", 10, "b", 100, 10, 64}, + {"ns-c", 100, "c", 100, 10, 64}, + {"ns-d", 1000, "d", 100, 10, 64}, + {"ns-e", 10000, "e", 100, 10, 64}, + } } -func BenchmarkSet(b *testing.B) { - benchmarks := []singleBenchmark{ - {"a", 10, 64}, - {"b", 10, 1024}, - {"c", 10, 64 * 1024}, - {"d", 10, 1024 * 1024}, - {"e", 10, 10 * 1024 * 1024}, - - {"f", 100, 64}, - {"g", 100, 1024}, - {"h", 100, 64 * 1024}, - {"i", 100, 1024 * 1024}, - {"j", 100, 10 * 1024 * 1024}, + +func getKeyBenchmarkInput() []keysBenchmark { + return []keysBenchmark{ + {"a", 1, 10, 64}, + {"b", 1, 10, 1024}, + {"c", 1, 10, 64 * 1024}, + {"d", 1, 10, 1024 * 1024}, + {"e", 1, 10, 10 * 1024 * 1024}, + + {"f", 1, 100, 64}, + {"g", 1, 100, 1024}, + {"h", 1, 100, 64 * 1024}, + {"i", 1, 100, 1024 * 1024}, + {"j", 1, 100, 10 * 1024 * 1024}, + + {"k", 2, 10, 64}, + {"l", 10, 10, 64}, + {"m", 100, 10, 64}, + {"n", 1000, 10, 64}, + {"r", 5000, 10, 64}, + + {"s", 2, 100, 64}, + {"t", 10, 100, 64}, + {"u", 100, 100, 64}, + {"v", 1000, 100, 64}, + {"x", 5000, 100, 64}, } +} + +func BenchmarkMultiNamespaceKeysWrite(b *testing.B) { + benchmarks := getNsKeyBenchmarkInput() for _, bm := range benchmarks { - b.Run(bm.String("set"), func(b *testing.B) { - key := strings.Repeat(bm.key, bm.keySize) + b.Run(bm.String("ns-keys-set"), func(b *testing.B) { + sdl := sdlgo.NewSyncStorage() value := strings.Repeat("1", bm.valueSize) - sdl := sdlgo.NewSdlInstance("namespace", sdlgo.NewDatabase()) - + keyVals := make([]string, 0) + for i := 0; i < bm.keyCount; i++ { + key := strings.Repeat(bm.keyName+strconv.Itoa(i), bm.keySize) + keyVals = append(keyVals, key, value) + } b.ResetTimer() b.RunParallel(func(pb *testing.PB) { for pb.Next() { - err := sdl.Set(key, value) - if err != nil { - b.Fatal(err) + for n := 0; n < bm.nsCount; n++ { + err := sdl.Set(bm.ns+strconv.Itoa(n), keyVals) + if err != nil { + b.Fatal(err) + } } } }) @@ -95,35 +132,25 @@ func BenchmarkSet(b *testing.B) { } } -func BenchmarkGet(b *testing.B) { - benchmarks := []singleBenchmark{ - {"a", 10, 64}, - {"b", 10, 1024}, - {"c", 10, 64 * 1024}, - {"d", 10, 1024 * 1024}, - {"e", 10, 10 * 1024 * 1024}, - - {"f", 100, 64}, - {"g", 100, 1024}, - {"h", 100, 64 * 1024}, - {"i", 100, 1024 * 1024}, - {"j", 100, 10 * 1024 * 1024}, - } +func BenchmarkMultiNamespaceKeysRead(b *testing.B) { + benchmarks := getNsKeyBenchmarkInput() for _, bm := range benchmarks { - b.Run(bm.String("Get"), func(b *testing.B) { - key := strings.Repeat(bm.key, bm.keySize) - value := strings.Repeat("1", bm.valueSize) - sdl := sdlgo.NewSdlInstance("namespace", sdlgo.NewDatabase()) - if err := sdl.Set(key, value); err != nil { - b.Fatal(err) + b.Run(bm.String("keys-get"), func(b *testing.B) { + sdl := sdlgo.NewSyncStorage() + keys := make([]string, 0) + for i := 0; i < bm.keyCount; i++ { + key := strings.Repeat(bm.keyName+strconv.Itoa(i), bm.keySize) + keys = append(keys, key) } b.ResetTimer() b.RunParallel(func(pb *testing.PB) { for pb.Next() { - _, err := sdl.Get([]string{key}) - if err != nil { - b.Fatal(err) + for n := 0; n < bm.nsCount; n++ { + _, err := sdl.Get(bm.ns+strconv.Itoa(n), keys) + if err != nil { + b.Fatal(err) + } } } }) @@ -131,28 +158,16 @@ func BenchmarkGet(b *testing.B) { } } -func BenchmarkMultiSet(b *testing.B) { - benchmarks := []multiBenchmark{ - {"a", 2, 10, 64}, - {"b", 10, 10, 64}, - {"c", 100, 10, 64}, - {"d", 1000, 10, 64}, - {"e", 5000, 10, 64}, - - {"f", 2, 100, 64}, - {"g", 10, 100, 64}, - {"h", 100, 100, 64}, - {"i", 1000, 100, 64}, - {"j", 5000, 100, 64}, - } +func BenchmarkKeysWrite(b *testing.B) { + benchmarks := getKeyBenchmarkInput() for _, bm := range benchmarks { - b.Run(bm.String("mset"), func(b *testing.B) { + b.Run(bm.String("keys-set"), func(b *testing.B) { sdl := sdlgo.NewSdlInstance("namespace", sdlgo.NewDatabase()) value := strings.Repeat("1", bm.valueSize) keyVals := make([]string, 0) for i := 0; i < bm.keyCount; i++ { - key := strings.Repeat(bm.keyBase+strconv.Itoa(i), bm.keySize) + key := strings.Repeat(bm.keyName+strconv.Itoa(i), bm.keySize) keyVals = append(keyVals, key, value) } b.ResetTimer() @@ -168,33 +183,21 @@ func BenchmarkMultiSet(b *testing.B) { } } -func BenchmarkMultiGet(b *testing.B) { - benchmarks := []multiBenchmark{ - {"a", 2, 10, 64}, - {"b", 10, 10, 64}, - {"c", 100, 10, 64}, - {"d", 1000, 10, 64}, - {"e", 5000, 10, 64}, - - {"f", 2, 100, 64}, - {"g", 10, 100, 64}, - {"h", 100, 100, 64}, - {"i", 1000, 100, 64}, - {"j", 5000, 100, 64}, - } +func BenchmarkKeysRead(b *testing.B) { + benchmarks := getKeyBenchmarkInput() for _, bm := range benchmarks { - b.Run(bm.String("gset"), func(b *testing.B) { + b.Run(bm.String("keys-get"), func(b *testing.B) { sdl := sdlgo.NewSdlInstance("namespace", sdlgo.NewDatabase()) - keyVals := make([]string, 0) + keys := make([]string, 0) for i := 0; i < bm.keyCount; i++ { - key := strings.Repeat(bm.keyBase+strconv.Itoa(i), bm.keySize) - keyVals = append(keyVals, key) + key := strings.Repeat(bm.keyName+strconv.Itoa(i), bm.keySize) + keys = append(keys, key) } b.ResetTimer() b.RunParallel(func(pb *testing.PB) { for pb.Next() { - _, err := sdl.Get(keyVals) + _, err := sdl.Get(keys) if err != nil { b.Fatal(err) } @@ -204,8 +207,8 @@ func BenchmarkMultiGet(b *testing.B) { } } -func BenchmarkSetAddMember(b *testing.B) { - benchmarks := []setBenchmark{ +func BenchmarkGroupMemberAdd(b *testing.B) { + benchmarks := []groupBenchmark{ {"a", "x", 1}, {"b", "x", 100}, {"c", "x", 10000}, @@ -213,7 +216,7 @@ func BenchmarkSetAddMember(b *testing.B) { } for _, bm := range benchmarks { - b.Run(bm.String("AddMember"), func(b *testing.B) { + b.Run(bm.String("group-add-member"), func(b *testing.B) { sdl := sdlgo.NewSdlInstance("namespace", sdlgo.NewDatabase()) members := make([]string, 0) for i := 0; i < bm.memberCount; i++ {