From 5d68121628afe73ea093bb46dac45f71f92eecac Mon Sep 17 00:00:00 2001 From: Michael Anthony Knyszek Date: Tue, 23 May 2023 21:02:36 +0000 Subject: [PATCH] runtime: move pinned object out of inner loop for benchmarks In theory by allocating new objects every time, the benchmark is including the performance of allocating new pinner bits for a span. In practice however, most of the time each span already does have pinner bits allocated (it's still a rare operation). We can get a better sense of the raw cost of pinning an object (minus pinner bits allocation) by moving the object allocation out of the inner loop. Change-Id: I2869fa6c3f353b726fe8440d2e6b7f89902f9364 Reviewed-on: https://go-review.googlesource.com/c/go/+/497620 Auto-Submit: Michael Knyszek Reviewed-by: Austin Clements TryBot-Result: Gopher Robot Run-TryBot: Michael Knyszek --- src/runtime/pinner_test.go | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/src/runtime/pinner_test.go b/src/runtime/pinner_test.go index 1caebcb265..88ead7c946 100644 --- a/src/runtime/pinner_test.go +++ b/src/runtime/pinner_test.go @@ -420,25 +420,27 @@ func BenchmarkPinnerPinUnpinBatchTiny(b *testing.B) { } func BenchmarkPinnerPinUnpin(b *testing.B) { + p := new(obj) for n := 0; n < b.N; n++ { var pinner runtime.Pinner - pinner.Pin(new(obj)) + pinner.Pin(p) pinner.Unpin() } } func BenchmarkPinnerPinUnpinTiny(b *testing.B) { + p := new(bool) for n := 0; n < b.N; n++ { var pinner runtime.Pinner - pinner.Pin(new(bool)) + pinner.Pin(p) pinner.Unpin() } } func BenchmarkPinnerPinUnpinDouble(b *testing.B) { + p := new(obj) for n := 0; n < b.N; n++ { var pinner runtime.Pinner - p := new(obj) pinner.Pin(p) pinner.Pin(p) pinner.Unpin() @@ -447,9 +449,10 @@ func BenchmarkPinnerPinUnpinDouble(b *testing.B) { func BenchmarkPinnerPinUnpinParallel(b *testing.B) { b.RunParallel(func(pb *testing.PB) { + p := new(obj) for pb.Next() { var pinner runtime.Pinner - pinner.Pin(new(obj)) + pinner.Pin(p) pinner.Unpin() } }) @@ -457,9 +460,10 @@ func BenchmarkPinnerPinUnpinParallel(b *testing.B) { func BenchmarkPinnerPinUnpinParallelTiny(b *testing.B) { b.RunParallel(func(pb *testing.PB) { + p := new(bool) for pb.Next() { var pinner runtime.Pinner - pinner.Pin(new(bool)) + pinner.Pin(p) pinner.Unpin() } }) @@ -467,9 +471,9 @@ func BenchmarkPinnerPinUnpinParallelTiny(b *testing.B) { func BenchmarkPinnerPinUnpinParallelDouble(b *testing.B) { b.RunParallel(func(pb *testing.PB) { + p := new(obj) for pb.Next() { var pinner runtime.Pinner - p := new(obj) pinner.Pin(p) pinner.Pin(p) pinner.Unpin() -- 2.48.1