github.com/twelsh-aw/go/src@v0.0.0-20230516233729-a56fe86a7c81/runtime/norace_test.go (about) 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 // 7 //go:build !race 8 9 package runtime_test 10 11 import ( 12 "runtime" 13 "testing" 14 ) 15 16 // Syscall tests split stack between Entersyscall and Exitsyscall under race detector. 17 func BenchmarkSyscall(b *testing.B) { 18 benchmarkSyscall(b, 0, 1) 19 } 20 21 func BenchmarkSyscallWork(b *testing.B) { 22 benchmarkSyscall(b, 100, 1) 23 } 24 25 func BenchmarkSyscallExcess(b *testing.B) { 26 benchmarkSyscall(b, 0, 4) 27 } 28 29 func BenchmarkSyscallExcessWork(b *testing.B) { 30 benchmarkSyscall(b, 100, 4) 31 } 32 33 func benchmarkSyscall(b *testing.B, work, excess int) { 34 b.SetParallelism(excess) 35 b.RunParallel(func(pb *testing.PB) { 36 foo := 42 37 for pb.Next() { 38 runtime.Entersyscall() 39 for i := 0; i < work; i++ { 40 foo *= 2 41 foo /= 2 42 } 43 runtime.Exitsyscall() 44 } 45 _ = foo 46 }) 47 }