Source file src/runtime/norace_test.go

     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  }
    48  

View as plain text