mirror of
https://github.com/golang/go.git
synced 2025-05-14 20:04:39 +00:00
runtime: add countAlloc benchmark
This change adds a small microbenchmark for (*mspan).countAlloc, which we're about to replace. Admittedly this isn't a critical piece of code, but the benchmark was useful in understanding the performance change. Change-Id: Iea93c00f571ee95534a42f2ef2ab026b382242b3 Reviewed-on: https://go-review.googlesource.com/c/go/+/224438 Run-TryBot: Michael Knyszek <mknyszek@google.com> Reviewed-by: Emmanuel Odeke <emm.odeke@gmail.com> Reviewed-by: Austin Clements <austin@google.com> Reviewed-by: Keith Randall <khr@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org>
This commit is contained in:
parent
8c30971da6
commit
7af6a31b48
@ -975,3 +975,11 @@ func MapHashCheck(m interface{}, k interface{}) (uintptr, uintptr) {
|
|||||||
y := typehash(kt, noescape(p), uintptr(mh.hash0))
|
y := typehash(kt, noescape(p), uintptr(mh.hash0))
|
||||||
return x, y
|
return x, y
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func MSpanCountAlloc(bits []byte) int {
|
||||||
|
s := mspan{
|
||||||
|
nelems: uintptr(len(bits) * 8),
|
||||||
|
gcmarkBits: (*gcBits)(unsafe.Pointer(&bits[0])),
|
||||||
|
}
|
||||||
|
return s.countAlloc()
|
||||||
|
}
|
||||||
|
@ -6,6 +6,7 @@ package runtime_test
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"math/rand"
|
||||||
"os"
|
"os"
|
||||||
"reflect"
|
"reflect"
|
||||||
"runtime"
|
"runtime"
|
||||||
@ -751,6 +752,24 @@ func BenchmarkScanStackNoLocals(b *testing.B) {
|
|||||||
close(teardown)
|
close(teardown)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func BenchmarkMSpanCountAlloc(b *testing.B) {
|
||||||
|
// n is the number of bytes to benchmark against.
|
||||||
|
// n must always be a multiple of 8, since gcBits is
|
||||||
|
// always rounded up 8 bytes.
|
||||||
|
for _, n := range []int{8, 16, 32, 64, 128} {
|
||||||
|
b.Run(fmt.Sprintf("bits=%d", n*8), func(b *testing.B) {
|
||||||
|
// Initialize a new byte slice with pseduo-random data.
|
||||||
|
bits := make([]byte, n)
|
||||||
|
rand.Read(bits)
|
||||||
|
|
||||||
|
b.ResetTimer()
|
||||||
|
for i := 0; i < b.N; i++ {
|
||||||
|
runtime.MSpanCountAlloc(bits)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func countpwg(n *int, ready *sync.WaitGroup, teardown chan bool) {
|
func countpwg(n *int, ready *sync.WaitGroup, teardown chan bool) {
|
||||||
if *n == 0 {
|
if *n == 0 {
|
||||||
ready.Done()
|
ready.Done()
|
||||||
|
Loading…
x
Reference in New Issue
Block a user