Updated Benchmarks for NavigableMap

This commit is contained in:
Trial97
2020-05-07 13:11:58 +03:00
committed by Dan Christian Bogos
parent a1e99e37d5
commit eacce5c5fd
3 changed files with 67 additions and 53 deletions

View File

@@ -20,6 +20,7 @@ package config
import (
"encoding/xml"
"fmt"
"math/rand"
"reflect"
"sort"
"strings"
@@ -1512,3 +1513,68 @@ func TestNMItemSet(t *testing.T) {
t.Errorf("Expected %q ,received: %q", expected, rply)
}
}
/*
goos: linux
goarch: amd64
pkg: github.com/cgrates/cgrates/config
BenchmarkOrderdNavigableMapSet2-16 1738 6463443 ns/op
BenchmarkOrderdNavigableMapSet2-16 1792 6536313 ns/op
BenchmarkOrderdNavigableMapSet2-16 1744 6554331 ns/op
BenchmarkNavigableMapOld1Set-16 2980 3831743 ns/op
BenchmarkNavigableMapOld1Set-16 2758 3789885 ns/op
BenchmarkNavigableMapOld1Set-16 2916 3741273 ns/op
PASS
ok github.com/cgrates/cgrates/config 71.065s
*/
var generator = rand.New(rand.NewSource(42))
var gen = generateRandomTemplate(10_000)
type benchData struct {
path []string
pathItems utils.PathItems
strPath string
data string
}
func generateRandomPath() (out []string) {
size := generator.Intn(16) + 1
out = make([]string, size)
for i := 0; i < size; i++ {
out[i] = utils.Sha1(utils.GenUUID())
}
return
}
func generateRandomTemplate(size int) (out []benchData) {
out = make([]benchData, size)
for i := 0; i < size; i++ {
out[i].path = generateRandomPath()
out[i].data = utils.UUIDSha1Prefix()
out[i].pathItems = utils.NewPathToItem(out[i].path)
out[i].strPath = out[i].pathItems.String()
// out[i].pathItems[len(out[i].pathItems)-1].Index = IntPointer(0)
}
return
}
func BenchmarkOrderdNavigableMapSet2(b *testing.B) {
nm := utils.NewOrderedNavigableMap()
b.ResetTimer()
for n := 0; n < b.N; n++ {
for _, data := range gen {
if _, err := nm.Set(&utils.FullPath{PathItems: data.pathItems, Path: data.strPath}, utils.NewNMData(data.data)); err != nil {
b.Log(err, data.path)
}
}
}
}
func BenchmarkNavigableMapOld1Set(b *testing.B) {
nm := NewNavigableMap(nil)
b.ResetTimer()
for n := 0; n < b.N; n++ {
for _, data := range gen {
nm.Set(data.path, data.data, false, true)
}
}
}

View File

@@ -21,6 +21,7 @@ cgrates (0.10.1~dev) UNRELEASED; urgency=medium
* [Migrator] Auto discover tenant from key instead of taking it from config
* [Templates] Fixed missing "*" for strip and padding strategy
* [SessionS] Update subflags for *rals ( *authorize and *initiate )
* [AgentRequest] Improved NavigableMap
-- Alexandru Tripon <alexandru.tripon@itsyscom.com> Wed, 19 Feb 2020 15:22:59 +0200

View File

@@ -18,7 +18,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>
package utils
import (
"math/rand"
"reflect"
"testing"
)
@@ -748,59 +747,7 @@ func TestOrderedNavigableRemote(t *testing.T) {
}
}
var generator = rand.New(rand.NewSource(42))
var gen = generateRandomTemplate(10_000)
type benchData struct {
path []string
pathItems PathItems
strPath string
data string
}
func generateRandomPath() (out []string) {
size := generator.Intn(16) + 1
out = make([]string, size)
for i := 0; i < size; i++ {
out[i] = Sha1(GenUUID())
}
return
}
func generateRandomTemplate(size int) (out []benchData) {
out = make([]benchData, size)
for i := 0; i < size; i++ {
out[i].path = generateRandomPath()
out[i].data = UUIDSha1Prefix()
out[i].pathItems = NewPathToItem(out[i].path)
out[i].strPath = out[i].pathItems.String()
// out[i].pathItems[len(out[i].pathItems)-1].Index = IntPointer(0)
}
return
}
func BenchmarkOrderdNavigableMapSet2(b *testing.B) {
nm := NewOrderedNavigableMap()
b.ResetTimer()
for n := 0; n < b.N; n++ {
for _, data := range gen {
if _, err := nm.Set(&FullPath{PathItems: data.pathItems, Path: data.strPath}, NewNMData(data.data)); err != nil {
b.Log(err, data.path)
}
}
}
}
/*
func BenchmarkNavigableMapOld1Set(b *testing.B) {
nm := NewNavigableMapOld1(nil)
b.ResetTimer()
for n := 0; n < b.N; n++ {
for _, data := range gen {
nm.Set(data.path, data.data, false)
}
}
}
func BenchmarkOrderdNavigableMapSet(b *testing.B) {
nm := NewOrderedNavigableMap()
b.ResetTimer()