aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Pratt <mpratt@google.com>2021-12-13 17:32:07 -0500
committerMichael Pratt <mpratt@google.com>2022-01-14 18:36:41 +0000
commit1302f93c4e1eae0e625b372f9bb6bb48780af30f (patch)
tree1e937d0aa089ab67c6a4f072a183268e2c79744b
parente4a6b84962cc2fb4f4b8bb532a84bab5bfd68d99 (diff)
downloadgo-1302f93c4e1eae0e625b372f9bb6bb48780af30f.tar.gz
go-1302f93c4e1eae0e625b372f9bb6bb48780af30f.zip
cmd/dist: log CPU model when testing
Knowing whether test failures are correlated with specific CPU models on has proven useful on several issues. Log it for prior to testing so it is always available. internal/sysinfo provides the CPU model, but it is not available in the bootstrap toolchain, so we can't access this unconditionally in cmd/dist. Instead use a build-tagged file, as the final version of cmd/dist will use the final toolchain. The addition of new data to the beginning of cmd/dist output will break x/build/cmd/coordinator's banner parsing, leaving extra lines in the log output, though information will not be lost. https://golang.org/cl/372538 fixes up the coordinator and should be submitted and deployed before this CL is submitted. For #46272. For #49209. For #50146. Change-Id: I515d2ec58e4c0034b76bf624ecaab38f16146074 Reviewed-on: https://go-review.googlesource.com/c/go/+/371474 Trust: Benny Siegert <bsiegert@gmail.com> Reviewed-by: Benny Siegert <bsiegert@gmail.com> Trust: Michael Pratt <mpratt@google.com> Run-TryBot: Michael Pratt <mpratt@google.com> TryBot-Result: Gopher Robot <gobot@golang.org> Reviewed-by: Austin Clements <austin@google.com>
-rw-r--r--src/cmd/dist/metadata.go24
-rw-r--r--src/cmd/dist/metadata_bootstrap.go21
-rw-r--r--src/cmd/dist/sys_windows.go6
-rw-r--r--src/cmd/dist/test.go19
4 files changed, 67 insertions, 3 deletions
diff --git a/src/cmd/dist/metadata.go b/src/cmd/dist/metadata.go
new file mode 100644
index 00000000000..f0a125fb8a2
--- /dev/null
+++ b/src/cmd/dist/metadata.go
@@ -0,0 +1,24 @@
+// Copyright 2021 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.
+
+// Helper to print system metadata (CPU model, etc). This uses packages that
+// may not be available in the bootstrap toolchain. It only needs to be built
+// on the dist build using the final toolchain.
+
+//go:build go1.18
+// +build go1.18
+
+package main
+
+import (
+ "fmt"
+ "internal/sysinfo"
+ "runtime"
+)
+
+func logMetadata() error {
+ fmt.Printf("# GOARCH: %s\n", runtime.GOARCH)
+ fmt.Printf("# CPU: %s\n", sysinfo.CPU.Name())
+ return nil
+}
diff --git a/src/cmd/dist/metadata_bootstrap.go b/src/cmd/dist/metadata_bootstrap.go
new file mode 100644
index 00000000000..fe5f422b0b9
--- /dev/null
+++ b/src/cmd/dist/metadata_bootstrap.go
@@ -0,0 +1,21 @@
+// Copyright 2021 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.
+
+// No-op metadata implementation when building with an old bootstrap toolchain.
+
+//go:build !go1.18
+// +build !go1.18
+
+package main
+
+import (
+ "fmt"
+)
+
+func logMetadata() error {
+ // We don't return an error so we don't completely preclude running
+ // tests with a bootstrap dist.
+ fmt.Printf("# Metadata unavailable: bootstrap build\n")
+ return nil
+}
diff --git a/src/cmd/dist/sys_windows.go b/src/cmd/dist/sys_windows.go
index 265f729d0fc..0fb66ad27db 100644
--- a/src/cmd/dist/sys_windows.go
+++ b/src/cmd/dist/sys_windows.go
@@ -38,11 +38,11 @@ const (
PROCESSOR_ARCHITECTURE_IA64 = 6
)
-var sysinfo systeminfo
+var winsysinfo systeminfo
func sysinit() {
- syscall.Syscall(procGetSystemInfo.Addr(), 1, uintptr(unsafe.Pointer(&sysinfo)), 0, 0)
- switch sysinfo.wProcessorArchitecture {
+ syscall.Syscall(procGetSystemInfo.Addr(), 1, uintptr(unsafe.Pointer(&winsysinfo)), 0, 0)
+ switch winsysinfo.wProcessorArchitecture {
case PROCESSOR_ARCHITECTURE_AMD64:
gohostarch = "amd64"
case PROCESSOR_ARCHITECTURE_INTEL:
diff --git a/src/cmd/dist/test.go b/src/cmd/dist/test.go
index 50a2e5936c6..fed83120ed2 100644
--- a/src/cmd/dist/test.go
+++ b/src/cmd/dist/test.go
@@ -218,6 +218,15 @@ func (t *tester) run() {
}
}
+ if err := t.maybeLogMetadata(); err != nil {
+ t.failed = true
+ if t.keepGoing {
+ log.Printf("Failed logging metadata: %v", err)
+ } else {
+ fatalf("Failed logging metadata: %v", err)
+ }
+ }
+
for _, dt := range t.tests {
if !t.shouldRunTest(dt.name) {
t.partial = true
@@ -268,6 +277,16 @@ func (t *tester) shouldRunTest(name string) bool {
return false
}
+func (t *tester) maybeLogMetadata() error {
+ if t.compileOnly {
+ // We need to run a subprocess to log metadata. Don't do that
+ // on compile-only runs.
+ return nil
+ }
+ t.out("Test execution environment.")
+ return logMetadata()
+}
+
// short returns a -short flag value to use with 'go test'
// or a test binary for tests intended to run in short mode.
// It returns "true", unless the environment variable