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 cannot run under race detector for some reason. 6// +build !race 7 8package runtime_test 9 10import ( 11 "runtime" 12 "testing" 13) 14 15// Syscall tests split stack between Entersyscall and Exitsyscall under race detector. 16func BenchmarkSyscall(b *testing.B) { 17 benchmarkSyscall(b, 0, 1) 18} 19 20func BenchmarkSyscallWork(b *testing.B) { 21 benchmarkSyscall(b, 100, 1) 22} 23 24func BenchmarkSyscallExcess(b *testing.B) { 25 benchmarkSyscall(b, 0, 4) 26} 27 28func BenchmarkSyscallExcessWork(b *testing.B) { 29 benchmarkSyscall(b, 100, 4) 30} 31 32func 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() 38 for i := 0; i < work; i++ { 39 foo *= 2 40 foo /= 2 41 } 42 runtime.Exitsyscall() 43 } 44 _ = foo 45 }) 46} 47