mirror of
https://github.com/golang/go
synced 2024-11-15 00:50:32 -07:00
cmd/go: preprocess PGO profiles
Following the previous CL, now actually run the preprofile tool to create the preprocessed output. There is still no build cache integration, so the tool will run on every build even if nothing has changed. For #58102. Cq-Include-Trybots: luci.golang.try:gotip-linux-amd64-longtest Change-Id: I0414377a956889f457e50898737fcaa8a698658d Reviewed-on: https://go-review.googlesource.com/c/go/+/569424 Auto-Submit: Michael Pratt <mpratt@google.com> LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com> Reviewed-by: Cherry Mui <cherryyz@google.com>
This commit is contained in:
parent
4084bc1aa2
commit
081dc9fd8c
2
src/cmd/dist/build.go
vendored
2
src/cmd/dist/build.go
vendored
@ -1354,7 +1354,7 @@ func toolenv() []string {
|
||||
return env
|
||||
}
|
||||
|
||||
var toolchain = []string{"cmd/asm", "cmd/cgo", "cmd/compile", "cmd/link"}
|
||||
var toolchain = []string{"cmd/asm", "cmd/cgo", "cmd/compile", "cmd/link", "cmd/preprofile"}
|
||||
|
||||
// The bootstrap command runs a build from scratch,
|
||||
// stopping at having installed the go_bootstrap command.
|
||||
|
@ -476,12 +476,7 @@ func (p *pgoActor) Act(b *Builder, ctx context.Context, a *Action) error {
|
||||
return err
|
||||
}
|
||||
|
||||
// TODO(prattmic): This should use go tool preprofile to actually
|
||||
// preprocess the profile. For now, this is a dummy implementation that
|
||||
// simply copies the input to the output. This is technically a valid
|
||||
// implementation because go tool compile -pgofile accepts either a
|
||||
// pprof file or preprocessed file.
|
||||
if err := sh.CopyFile(a.Target, p.input, 0644, false); err != nil {
|
||||
if err := sh.run(".", p.input, nil, cfg.BuildToolexec, base.Tool("preprofile"), "-o", a.Target, "-i", p.input); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
|
9
src/cmd/go/testdata/script/build_pgo.txt
vendored
9
src/cmd/go/testdata/script/build_pgo.txt
vendored
@ -9,7 +9,7 @@ go build triv.go
|
||||
# build with PGO, should trigger rebuild
|
||||
# starting with an empty profile (the compiler accepts it)
|
||||
go build -x -pgo=prof -o triv.exe triv.go
|
||||
stderr 'cp.*prof' # preprocess PGO profile
|
||||
stderr 'preprofile.*-i.*prof'
|
||||
stderr 'compile.*-pgoprofile=.*triv.go'
|
||||
|
||||
# check that PGO appears in build info
|
||||
@ -36,7 +36,7 @@ go run overwrite.go
|
||||
|
||||
# build again, profile content changed, should trigger rebuild, including std
|
||||
go build -n -pgo=prof triv.go
|
||||
stderr 'cp.*prof' # preprocess PGO profile
|
||||
stderr 'preprofile.*-i.*prof'
|
||||
stderr 'compile.*-pgoprofile=.*triv.go'
|
||||
stderr 'compile.*-p runtime.*-pgoprofile=.*'
|
||||
|
||||
@ -61,6 +61,7 @@ package main
|
||||
import (
|
||||
"os"
|
||||
"runtime/pprof"
|
||||
"time"
|
||||
)
|
||||
|
||||
func main() {
|
||||
@ -72,6 +73,10 @@ func main() {
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
// Spin to ensure we get some samples. If we get no samples, the result
|
||||
// is equivalent to an empty profile.
|
||||
start := time.Now()
|
||||
for time.Since(start) < 100*time.Millisecond {}
|
||||
pprof.StopCPUProfile()
|
||||
f.Close()
|
||||
}
|
||||
|
@ -4,7 +4,7 @@
|
||||
|
||||
# use default.pgo for a single main package
|
||||
go build -n -pgo=auto -o a1.exe ./a/a1
|
||||
stderr 'cp.*default\.pgo' # preprocess PGO profile
|
||||
stderr 'preprofile.*-i.*default\.pgo'
|
||||
stderr 'compile.*-pgoprofile=.*a1.go'
|
||||
|
||||
# check that pgo applied to dependencies
|
||||
|
@ -3,8 +3,8 @@
|
||||
go install -a -n -pgo=auto ./a ./b ./nopgo
|
||||
|
||||
# a/default.pgo and b/default.pgo are both preprocessed
|
||||
stderr 'cp.*a(/|\\)default\.pgo'
|
||||
stderr 'cp.*b(/|\\)default\.pgo'
|
||||
stderr 'preprofile.*-i.*a(/|\\\\)default\.pgo'
|
||||
stderr 'preprofile.*-i.*b(/|\\\\)default\.pgo'
|
||||
|
||||
# a and b built once each with PGO.
|
||||
# Ideally we would check that the passed profile is the expected profile (here
|
||||
|
Loading…
Reference in New Issue
Block a user