1
0
mirror of https://github.com/golang/go synced 2024-11-19 14:54:43 -07:00

runtime: use RunParallel in more benchmarks

LGTM=bradfitz
R=golang-codereviews, bradfitz
CC=golang-codereviews
https://golang.org/cl/68020043
This commit is contained in:
Dmitriy Vyukov 2014-02-24 20:50:12 +04:00
parent bb9531e11b
commit 69257d17fe
4 changed files with 50 additions and 123 deletions

View File

@ -431,27 +431,15 @@ func TestMultiConsumer(t *testing.T) {
}
func BenchmarkChanNonblocking(b *testing.B) {
const CallsPerSched = 1000
procs := runtime.GOMAXPROCS(-1)
N := int32(b.N / CallsPerSched)
c := make(chan bool, procs)
myc := make(chan int)
for p := 0; p < procs; p++ {
go func() {
for atomic.AddInt32(&N, -1) >= 0 {
for g := 0; g < CallsPerSched; g++ {
select {
case <-myc:
default:
}
}
b.RunParallel(func(pb *testing.PB) {
for pb.Next() {
select {
case <-myc:
default:
}
c <- true
}()
}
for p := 0; p < procs; p++ {
<-c
}
}
})
}
func BenchmarkSelectUncontended(b *testing.B) {
@ -713,23 +701,11 @@ func BenchmarkChanCreation(b *testing.B) {
func BenchmarkChanSem(b *testing.B) {
type Empty struct{}
const CallsPerSched = 1000
procs := runtime.GOMAXPROCS(0)
N := int32(b.N / CallsPerSched)
c := make(chan bool, procs)
myc := make(chan Empty, procs)
for p := 0; p < procs; p++ {
go func() {
for atomic.AddInt32(&N, -1) >= 0 {
for g := 0; g < CallsPerSched; g++ {
myc <- Empty{}
<-myc
}
}
c <- true
}()
}
for p := 0; p < procs; p++ {
<-c
}
myc := make(chan Empty, runtime.GOMAXPROCS(0))
b.RunParallel(func(pb *testing.PB) {
for pb.Next() {
myc <- Empty{}
<-myc
}
})
}

View File

@ -6,8 +6,6 @@ package runtime_test
import (
"runtime"
"sync"
"sync/atomic"
"testing"
"time"
)
@ -112,50 +110,28 @@ func TestFinalizerZeroSizedStruct(t *testing.T) {
}
func BenchmarkFinalizer(b *testing.B) {
const CallsPerSched = 1000
procs := runtime.GOMAXPROCS(-1)
N := int32(b.N / CallsPerSched)
var wg sync.WaitGroup
wg.Add(procs)
for p := 0; p < procs; p++ {
go func() {
var data [CallsPerSched]*int
for i := 0; i < CallsPerSched; i++ {
data[i] = new(int)
const Batch = 1000
b.RunParallel(func(pb *testing.PB) {
var data [Batch]*int
for i := 0; i < Batch; i++ {
data[i] = new(int)
}
for pb.Next() {
for i := 0; i < Batch; i++ {
runtime.SetFinalizer(data[i], fin)
}
for atomic.AddInt32(&N, -1) >= 0 {
runtime.Gosched()
for i := 0; i < CallsPerSched; i++ {
runtime.SetFinalizer(data[i], fin)
}
for i := 0; i < CallsPerSched; i++ {
runtime.SetFinalizer(data[i], nil)
}
for i := 0; i < Batch; i++ {
runtime.SetFinalizer(data[i], nil)
}
wg.Done()
}()
}
wg.Wait()
}
})
}
func BenchmarkFinalizerRun(b *testing.B) {
const CallsPerSched = 1000
procs := runtime.GOMAXPROCS(-1)
N := int32(b.N / CallsPerSched)
var wg sync.WaitGroup
wg.Add(procs)
for p := 0; p < procs; p++ {
go func() {
for atomic.AddInt32(&N, -1) >= 0 {
runtime.Gosched()
for i := 0; i < CallsPerSched; i++ {
v := new(int)
runtime.SetFinalizer(v, fin)
}
runtime.GC()
}
wg.Done()
}()
}
wg.Wait()
b.RunParallel(func(pb *testing.PB) {
for pb.Next() {
v := new(int)
runtime.SetFinalizer(v, fin)
}
})
}

View File

@ -9,7 +9,6 @@ package runtime_test
import (
"runtime"
"sync/atomic"
"testing"
)
@ -31,28 +30,17 @@ func BenchmarkSyscallExcessWork(b *testing.B) {
}
func benchmarkSyscall(b *testing.B, work, excess int) {
const CallsPerSched = 1000
procs := runtime.GOMAXPROCS(-1) * excess
N := int32(b.N / CallsPerSched)
c := make(chan bool, procs)
for p := 0; p < procs; p++ {
go func() {
foo := 42
for atomic.AddInt32(&N, -1) >= 0 {
runtime.Gosched()
for g := 0; g < CallsPerSched; g++ {
runtime.Entersyscall()
for i := 0; i < work; i++ {
foo *= 2
foo /= 2
}
runtime.Exitsyscall()
}
b.SetParallelism(excess)
b.RunParallel(func(pb *testing.PB) {
foo := 42
for pb.Next() {
runtime.Entersyscall()
for i := 0; i < work; i++ {
foo *= 2
foo /= 2
}
c <- foo == 42
}()
}
for p := 0; p < procs; p++ {
<-c
}
runtime.Exitsyscall()
}
_ = foo
})
}

View File

@ -370,24 +370,11 @@ func TestSchedLocalQueueSteal(t *testing.T) {
}
func benchmarkStackGrowth(b *testing.B, rec int) {
const CallsPerSched = 1000
procs := runtime.GOMAXPROCS(-1)
N := int32(b.N / CallsPerSched)
c := make(chan bool, procs)
for p := 0; p < procs; p++ {
go func() {
for atomic.AddInt32(&N, -1) >= 0 {
runtime.Gosched()
for g := 0; g < CallsPerSched; g++ {
stackGrowthRecursive(rec)
}
}
c <- true
}()
}
for p := 0; p < procs; p++ {
<-c
}
b.RunParallel(func(pb *testing.PB) {
for pb.Next() {
stackGrowthRecursive(rec)
}
})
}
func BenchmarkStackGrowth(b *testing.B) {