From 39651bb50bc0e1038e77e63baa37729bc4676e8a Mon Sep 17 00:00:00 2001 From: "Bryan C. Mills" Date: Thu, 9 Feb 2017 18:39:16 -0500 Subject: [PATCH] expvar: parallelize BenchmarkMapAdd{Same,Different} The other expvar tests are already parallelized, and this will help to measure the impact of potential implementations for #18177. updates #18177 Change-Id: I0f4f1a16a0285556cbcc8339855b6459af412675 Reviewed-on: https://go-review.googlesource.com/36717 Reviewed-by: Russ Cox --- src/expvar/expvar_test.go | 47 ++++++++++++++++++++++++++++----------- 1 file changed, 34 insertions(+), 13 deletions(-) diff --git a/src/expvar/expvar_test.go b/src/expvar/expvar_test.go index 0efa8643c0..f802cfd37e 100644 --- a/src/expvar/expvar_test.go +++ b/src/expvar/expvar_test.go @@ -7,12 +7,14 @@ package expvar import ( "bytes" "encoding/json" + "fmt" "net" "net/http/httptest" "reflect" "runtime" "strconv" "sync" + "sync/atomic" "testing" ) @@ -219,23 +221,42 @@ func BenchmarkMapSet(b *testing.B) { } func BenchmarkMapAddSame(b *testing.B) { - for i := 0; i < b.N; i++ { - m := new(Map).Init() - m.Add("red", 1) - m.Add("red", 1) - m.Add("red", 1) - m.Add("red", 1) - } + m := new(Map).Init() + b.ResetTimer() + + b.RunParallel(func(pb *testing.PB) { + for pb.Next() { + m.Add("red", 1) + } + }) } func BenchmarkMapAddDifferent(b *testing.B) { - for i := 0; i < b.N; i++ { - m := new(Map).Init() - m.Add("red", 1) - m.Add("blue", 1) - m.Add("green", 1) - m.Add("yellow", 1) + procKeys := make([][]string, runtime.GOMAXPROCS(0)) + for i := range procKeys { + keys := make([]string, 4) + for j := range keys { + keys[j] = fmt.Sprint(i, j) + } + procKeys[i] = keys } + + m := new(Map).Init() + b.ResetTimer() + + var n int32 + b.RunParallel(func(pb *testing.PB) { + i := int(atomic.AddInt32(&n, 1)-1) % len(procKeys) + keys := procKeys[i] + j := 0 + + for pb.Next() { + m.Add(keys[j], 1) + if j++; j == len(keys) { + j = 0 + } + } + }) } func TestFunc(t *testing.T) { -- 2.50.0