-
Notifications
You must be signed in to change notification settings - Fork 17.7k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
cmd/compile: pgo support for external Linux perf profiles and perf_data_converter #64489
Comments
CC @golang/compiler. |
https://github.com/google/perf_data_converter should be the way to do this, but there a couple of minor roadblocks:
|
Do we need to create a separate issue in the pprof repo to add this functionality? |
I filed google/pprof#823 for this, including a prototype implementation. This made me realize one more tiny snag: the compiler is picky about the sample types reported by the profile (mostly to warn users if they try to use a heap profile or something), but the sample types selected by perf_to_profile aren't quite right. It is easy to change them [1], but we should probably just make the compiler less picky. [1]
package main
import (
"os"
"github.com/google/pprof/profile"
)
func main() {
p, _ := profile.Parse(os.Stdin)
p.SampleType = []*profile.ValueType{
{
Type: "event",
Unit: "count",
},
{
Type: "samples",
Unit: "count",
},
}
p.Write(os.Stdout)
}
|
It would be nice to see |
Go PGO docs mentions some support for the external profile tooling and has a reference to the external page about supported PGO tools. Having support for the external profiling tooling is important since some organizations already have their profiling infrastructure (GWP in Google, Perforator in Yandex, sometimes even Grafana Pyroscope or similar in-house solutions).
The official documentation explicitly mentions widely used Linux'
perf
profiles for PGO purposes. Using these profiles are common thing in the C++ world due to sampling PGO support with AutoFDO tooling.pprof
package has a reference to a converter from Linuxperf
profiles topprof
profiles - https://github.com/google/perf_data_converter . Did anyone try to test it with Go PGO? Is it possible with this tool to useperf
profiles to enable PGO optimization with the current PGO infrastructure in the Go compiler?If it works, I suggest adding a mention about
perf_data_converter
to the https://github.com/golang/go/wiki/PGO-Tools page. Having a possibility to use Linux'perf
profiles can be important since it allows users to implement company-wide PGO optimization pipelines in the same way as it's done for C++ infrastructure (infrastructure and tooling reusage, you know).The text was updated successfully, but these errors were encountered: