mirror of
https://github.com/golang/go
synced 2024-11-12 00:30:22 -07:00
runtime: remove VDSO fallback test and benchmarks
These tests assume that it is OK to switch between time implementations, but the clock_gettime call uses CLOCK_MONOTONIC and the fallback call, gettimeofday, uses CLOCK_REALTIME. Disabling the clock_gettime call means that calls to nanotime will start returning very different values. This breaks the new timer code, which assumes that nanotime will return a consistently increasing value. This test is not very useful in any case as it doesn't check the results. Removing this file also removes BenchmarkTimeNow, which is a duplicate of BenchmarkNow in the time package. Updates #27707 Fixes #32109 Change-Id: I6a884af07f75822d724193c5eed94742f524f07d Reviewed-on: https://go-review.googlesource.com/c/go/+/174679 Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
This commit is contained in:
parent
d97bd5d07a
commit
1531192272
@ -1,63 +0,0 @@
|
||||
// Copyright 2017 The Go Authors. All rights reserved.
|
||||
// Use of this source code is governed by a BSD-style
|
||||
// license that can be found in the LICENSE file.
|
||||
|
||||
// +build linux
|
||||
// +build 386 amd64 arm arm64 ppc64 ppc64le
|
||||
|
||||
package runtime_test
|
||||
|
||||
import (
|
||||
"testing"
|
||||
"time"
|
||||
_ "unsafe"
|
||||
)
|
||||
|
||||
// These tests are a little risky because they overwrite the vdsoClockgettimeSym value.
|
||||
// It's normally initialized at startup and remains unchanged after that.
|
||||
|
||||
//go:linkname vdsoClockgettimeSym runtime.vdsoClockgettimeSym
|
||||
var vdsoClockgettimeSym uintptr
|
||||
|
||||
func TestClockVDSOAndFallbackPaths(t *testing.T) {
|
||||
// Check that we can call walltime() and nanotime() with and without their (1st) fast-paths.
|
||||
// This just checks that fast and fallback paths can be called, rather than testing their
|
||||
// results.
|
||||
//
|
||||
// Call them indirectly via time.Now(), so we don't need auxiliary .s files to allow us to
|
||||
// use go:linkname to refer to the functions directly.
|
||||
|
||||
save := vdsoClockgettimeSym
|
||||
if save == 0 {
|
||||
t.Log("vdsoClockgettime symbol not found; fallback path will be used by default")
|
||||
}
|
||||
|
||||
// Call with fast-path enabled (if vDSO symbol found at startup)
|
||||
time.Now()
|
||||
|
||||
// Call with fast-path disabled
|
||||
vdsoClockgettimeSym = 0
|
||||
time.Now()
|
||||
vdsoClockgettimeSym = save
|
||||
}
|
||||
|
||||
func BenchmarkClockVDSOAndFallbackPaths(b *testing.B) {
|
||||
run := func(b *testing.B) {
|
||||
for i := 0; i < b.N; i++ {
|
||||
// Call via time.Now() - see comment in test above.
|
||||
time.Now()
|
||||
}
|
||||
}
|
||||
|
||||
save := vdsoClockgettimeSym
|
||||
b.Run("vDSO", run)
|
||||
vdsoClockgettimeSym = 0
|
||||
b.Run("Fallback", run)
|
||||
vdsoClockgettimeSym = save
|
||||
}
|
||||
|
||||
func BenchmarkTimeNow(b *testing.B) {
|
||||
for i := 0; i < b.N; i++ {
|
||||
time.Now()
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user