From: Cherry Mui Date: Thu, 10 Nov 2022 16:23:40 +0000 (-0500) Subject: runtime: make Malloc benchmarks actually benchmark malloc X-Git-Tag: go1.20rc1~331 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=7717ac151ae1556541dddc6a817ac04733f1af44;p=gostls13.git runtime: make Malloc benchmarks actually benchmark malloc The compiler is too clever so the allocations are currently avoided. Rewrite to make them actually allocate. Change-Id: I9542e1365120b2ace318360883b0b01ed5670da7 Reviewed-on: https://go-review.googlesource.com/c/go/+/449476 TryBot-Result: Gopher Robot Run-TryBot: Cherry Mui Reviewed-by: Michael Knyszek --- diff --git a/src/runtime/malloc_test.go b/src/runtime/malloc_test.go index a13f382172..5b9ce9882e 100644 --- a/src/runtime/malloc_test.go +++ b/src/runtime/malloc_test.go @@ -318,46 +318,36 @@ func TestArenaCollision(t *testing.T) { } } -var mallocSink uintptr - func BenchmarkMalloc8(b *testing.B) { - var x uintptr for i := 0; i < b.N; i++ { p := new(int64) - x ^= uintptr(unsafe.Pointer(p)) + Escape(p) } - mallocSink = x } func BenchmarkMalloc16(b *testing.B) { - var x uintptr for i := 0; i < b.N; i++ { p := new([2]int64) - x ^= uintptr(unsafe.Pointer(p)) + Escape(p) } - mallocSink = x } func BenchmarkMallocTypeInfo8(b *testing.B) { - var x uintptr for i := 0; i < b.N; i++ { p := new(struct { p [8 / unsafe.Sizeof(uintptr(0))]*int }) - x ^= uintptr(unsafe.Pointer(p)) + Escape(p) } - mallocSink = x } func BenchmarkMallocTypeInfo16(b *testing.B) { - var x uintptr for i := 0; i < b.N; i++ { p := new(struct { p [16 / unsafe.Sizeof(uintptr(0))]*int }) - x ^= uintptr(unsafe.Pointer(p)) + Escape(p) } - mallocSink = x } type LargeStruct struct { @@ -365,12 +355,10 @@ type LargeStruct struct { } func BenchmarkMallocLargeStruct(b *testing.B) { - var x uintptr for i := 0; i < b.N; i++ { p := make([]LargeStruct, 2) - x ^= uintptr(unsafe.Pointer(&p[0])) + Escape(p) } - mallocSink = x } var n = flag.Int("n", 1000, "number of goroutines")