1
0
mirror of https://github.com/golang/go synced 2024-09-30 02:34:40 -06:00

sync: add PoolStarvation benchmark

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>
This commit is contained in:
Ruslan Andreev 2021-11-01 18:17:49 +00:00 committed by David Chase
parent b5a5b7bfb1
commit 5f1bcd1bc2

View 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) {