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.
5 // The file contains tests that can not run under race detector for some reason.
16 // Syscall tests split stack between Entersyscall and Exitsyscall under race detector.
17 func BenchmarkSyscall(b
*testing
.B
) {
18 benchmarkSyscall(b
, 0, 1)
21 func BenchmarkSyscallWork(b
*testing
.B
) {
22 benchmarkSyscall(b
, 100, 1)
25 func BenchmarkSyscallExcess(b
*testing
.B
) {
26 benchmarkSyscall(b
, 0, 4)
29 func BenchmarkSyscallExcessWork(b
*testing
.B
) {
30 benchmarkSyscall(b
, 100, 4)
33 func benchmarkSyscall(b
*testing
.B
, work
, excess
int) {
34 const CallsPerSched
= 1000
35 procs
:= runtime
.GOMAXPROCS(-1) * excess
36 N
:= int32(b
.N
/ CallsPerSched
)
37 c
:= make(chan bool, procs
)
38 for p
:= 0; p
< procs
; p
++ {
41 for atomic
.AddInt32(&N
, -1) >= 0 {
43 for g
:= 0; g
< CallsPerSched
; g
++ {
44 runtime
.Entersyscall()
45 for i
:= 0; i
< work
; i
++ {
55 for p
:= 0; p
< procs
; p
++ {