diff options
author | Michael Pratt <mpratt@google.com> | 2024-03-04 13:29:39 -0500 |
---|---|---|
committer | Gopher Robot <gobot@golang.org> | 2024-03-27 20:20:01 +0000 |
commit | 63deaf00ea6058d1422f0b435e475666cba5743e (patch) | |
tree | 20ea11d36b1c627fd99993ea6eaff8835e698ffc /src/cmd/dist | |
parent | 2860e01853174e278900ef6907b1941b16fb1645 (diff) | |
download | go-63deaf00ea6058d1422f0b435e475666cba5743e.tar.gz go-63deaf00ea6058d1422f0b435e475666cba5743e.zip |
cmd/compile,cmd/preprofile: move logic to shared common package
The processing performed in cmd/preprofile is a simple version of the
same initial processing performed by cmd/compile/internal/pgo. Refactor
this processing into the new IR-independent cmd/internal/pgo package.
Now cmd/preprofile and cmd/compile run the same code for initial
processing of a pprof profile, guaranteeing that they always stay in
sync.
Since it is now trivial, this CL makes one change to the serialization
format: the entries are ordered by weight. This allows us to avoid
sorting ByWeight on deserialization.
Impact on PGO parsing when compiling cmd/compile with PGO:
* Without preprocessing: PGO parsing ~13.7% of CPU time
* With preprocessing (unsorted): ~2.9% of CPU time (sorting ~1.7%)
* With preprocessing (sorted): ~1.3% of CPU time
The remaining 1.3% of CPU time approximately breaks down as:
* ~0.5% parsing the preprocessed profile
* ~0.7% building weighted IR call graph
* ~0.5% walking function IR to find direct calls
* ~0.2% performing lookups for indirect calls targets
For #58102.
Change-Id: Iaba425ea30b063ca195fb2f7b29342961c8a64c2
Reviewed-on: https://go-review.googlesource.com/c/go/+/569337
LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
Auto-Submit: Michael Pratt <mpratt@google.com>
Reviewed-by: Cherry Mui <cherryyz@google.com>
Diffstat (limited to 'src/cmd/dist')
-rw-r--r-- | src/cmd/dist/buildtool.go | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/src/cmd/dist/buildtool.go b/src/cmd/dist/buildtool.go index 3232896f26..8949949bd2 100644 --- a/src/cmd/dist/buildtool.go +++ b/src/cmd/dist/buildtool.go @@ -47,6 +47,7 @@ var bootstrapDirs = []string{ "cmd/internal/notsha256", "cmd/internal/obj/...", "cmd/internal/objabi", + "cmd/internal/pgo", "cmd/internal/pkgpath", "cmd/internal/quoted", "cmd/internal/src", @@ -316,7 +317,7 @@ func bootstrapFixImports(srcFile string) string { continue } if strings.HasPrefix(line, `import "`) || strings.HasPrefix(line, `import . "`) || - inBlock && (strings.HasPrefix(line, "\t\"") || strings.HasPrefix(line, "\t. \"") || strings.HasPrefix(line, "\texec \"") || strings.HasPrefix(line, "\trtabi \"")) { + inBlock && (strings.HasPrefix(line, "\t\"") || strings.HasPrefix(line, "\t. \"") || strings.HasPrefix(line, "\texec \"") || strings.HasPrefix(line, "\trtabi \"") || strings.HasPrefix(line, "\tpgoir \"")) { line = strings.Replace(line, `"cmd/`, `"bootstrap/cmd/`, -1) for _, dir := range bootstrapDirs { if strings.HasPrefix(dir, "cmd/") { |