]> Cypherpunks.ru repositories - gostls13.git/commitdiff
sync: add PoolStarvation benchmark
authorRuslan Andreev <kels9009@gmail.com>
Mon, 1 Nov 2021 18:17:49 +0000 (18:17 +0000)
committerDavid Chase <drchase@google.com>
Mon, 1 Nov 2021 19:42:30 +0000 (19:42 +0000)
This benchmark simulates object starvation in order to force Ps to steal
objects from other Ps. Extracted from CL 314229.

Change-Id: Iee31df355ba04d80fbd91c4414e397a375e6d6d7
Reviewed-on: https://go-review.googlesource.com/c/go/+/360256
Run-TryBot: Ian Lance Taylor <iant@golang.org>
TryBot-Result: Go Bot <gobot@golang.org>
Reviewed-by: David Chase <drchase@google.com>
Trust: Cherry Mui <cherryyz@google.com>

src/sync/pool_test.go

index f94153c8d78f4fd9eeb56f622e8ba12487ef5ec0..d991621624ca781e4db92aac5fee070c6c20a292 100644 (file)
@@ -270,6 +270,26 @@ func BenchmarkPoolOverflow(b *testing.B) {
        })
 }
 
+// Simulate object starvation in order to force Ps to steal objects
+// from other Ps.
+func BenchmarkPoolStarvation(b *testing.B) {
+       var p Pool
+       count := 100
+       // Reduce number of putted objects by 33 %. It creates objects starvation
+       // that force P-local storage to steal objects from other Ps.
+       countStarved := count - int(float32(count)*0.33)
+       b.RunParallel(func(pb *testing.PB) {
+               for pb.Next() {
+                       for b := 0; b < countStarved; b++ {
+                               p.Put(1)
+                       }
+                       for b := 0; b < count; b++ {
+                               p.Get()
+                       }
+               }
+       })
+}
+
 var globalSink interface{}
 
 func BenchmarkPoolSTW(b *testing.B) {