1 // Copyright 2013 The Go Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style 3 // license that can be found in the LICENSE file. 4 5 // The file contains tests that can not run under race detector for some reason. 6 // +build !race 7 8 package runtime_test 9 10 import ( 11 "runtime" 12 "testing" 13 ) 14 15 // Syscall tests split stack between Entersyscall and Exitsyscall under race detector. 16 func BenchmarkSyscall(b *testing.B) { 17 benchmarkSyscall(b, 0, 1) 18 } 19 20 func BenchmarkSyscallWork(b *testing.B) { 21 benchmarkSyscall(b, 100, 1) 22 } 23 24 func BenchmarkSyscallExcess(b *testing.B) { 25 benchmarkSyscall(b, 0, 4) 26 } 27 28 func BenchmarkSyscallExcessWork(b *testing.B) { 29 benchmarkSyscall(b, 100, 4) 30 } 31 32 func benchmarkSyscall(b *testing.B, work, excess int) { 33 b.SetParallelism(excess) 34 b.RunParallel(func(pb *testing.PB) { 35 foo := 42 36 for pb.Next() { 37 runtime.Entersyscall(0) 38 for i := 0; i < work; i++ { 39 foo *= 2 40 foo /= 2 41 } 42 runtime.Exitsyscall(0) 43 } 44 _ = foo 45 }) 46 } 47