diff options
author | Russ Cox <rsc@golang.org> | 2017-02-03 19:26:13 -0500 |
---|---|---|
committer | Russ Cox <rsc@golang.org> | 2017-02-09 14:45:16 +0000 |
commit | e4371fb179ad69cbd057f2430120843948e09f2f (patch) | |
tree | 4e49771324f1f6bd35b2b962a9511fb9bb071455 /src/runtime/timeasm.go | |
parent | 3a6842a0ecf66cf06ce4f0a5fcb9c09fbfdbecc1 (diff) | |
download | go-e4371fb179ad69cbd057f2430120843948e09f2f.tar.gz go-e4371fb179ad69cbd057f2430120843948e09f2f.zip |
time: optimize Now on darwin, windows
Fetch both monotonic and wall time together when possible.
Avoids skew and is cheaper.
Also shave a few ns off in conversion in package time.
Compared to current implementation (after monotonic changes):
name old time/op new time/op delta
Now 19.6ns ± 1% 9.7ns ± 1% -50.63% (p=0.000 n=41+49) darwin/amd64
Now 23.5ns ± 4% 10.6ns ± 5% -54.61% (p=0.000 n=30+28) windows/amd64
Now 54.5ns ± 5% 29.8ns ± 9% -45.40% (p=0.000 n=27+29) windows/386
More importantly, compared to Go 1.8:
name old time/op new time/op delta
Now 9.5ns ± 1% 9.7ns ± 1% +1.94% (p=0.000 n=41+49) darwin/amd64
Now 12.9ns ± 5% 10.6ns ± 5% -17.73% (p=0.000 n=30+28) windows/amd64
Now 15.3ns ± 5% 29.8ns ± 9% +94.36% (p=0.000 n=30+29) windows/386
This brings time.Now back in line with Go 1.8 on darwin/amd64 and windows/amd64.
It's not obvious why windows/386 is still noticeably worse than Go 1.8,
but it's better than before this CL. The windows/386 speed is not too
important; the changes just keep the two architectures similar.
Change-Id: If69b94970c8a1a57910a371ee91e0d4e82e46c5d
Reviewed-on: https://go-review.googlesource.com/36428
Run-TryBot: Russ Cox <rsc@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Ian Lance Taylor <iant@golang.org>
Diffstat (limited to 'src/runtime/timeasm.go')
-rw-r--r-- | src/runtime/timeasm.go | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/src/runtime/timeasm.go b/src/runtime/timeasm.go new file mode 100644 index 0000000000..7474bec556 --- /dev/null +++ b/src/runtime/timeasm.go @@ -0,0 +1,16 @@ +// 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. + +// Declarations for operating systems implementing time.now directly in assembly. +// Those systems are also expected to have nanotime subtract startNano, +// so that time.now and nanotime return the same monotonic clock readings. + +// +build darwin,amd64 darwin,386 windows + +package runtime + +import _ "unsafe" + +//go:linkname time_now time.now +func time_now() (sec int64, nsec int32, mono int64) |