Allow profiling Soong from the full build
Test: treehugger Change-Id: I5112364fff635b856a55744457f547d3eba91391
This commit is contained in:
21
docs/perf.md
21
docs/perf.md
@@ -42,16 +42,29 @@ critical path:
|
|||||||
```
|
```
|
||||||
|
|
||||||
If the elapsed time is much longer than the critical path then additional
|
If the elapsed time is much longer than the critical path then additional
|
||||||
parallelism on the build machine will improve total build times. If there are
|
parallelism on the build machine will improve total build times. If there are
|
||||||
long individual times listed in the critical path then improving build times
|
long individual times listed in the critical path then improving build times
|
||||||
for those steps or adjusting dependencies so that those steps can run earlier
|
for those steps or adjusting dependencies so that those steps can run earlier
|
||||||
in the build graph will improve total build times.
|
in the build graph will improve total build times.
|
||||||
|
|
||||||
### Soong
|
### Soong
|
||||||
|
|
||||||
Soong can be traced and profiled using the standard Go tools. It understands
|
Soong proper (i.e., `soong_build` executable that processes the blueprint
|
||||||
the `-cpuprofile`, `-trace`, and `-memprofile` command line arguments, but we
|
files) can be traced and profiled using the standard Go tools. It understands
|
||||||
don't currently have an easy way to enable them in the context of a full build.
|
the `-trace`, `-cpuprofile`, and `-memprofile` command line arguments.
|
||||||
|
Setting `SOONG_PROFILE_CPU` and/or `SOONG_PROFILE_MEM` environment variables
|
||||||
|
for the build enables respective profiling, e.g., running
|
||||||
|
|
||||||
|
```shell
|
||||||
|
SOONG_PROFILE_CPU=/tmp/foo m ..._
|
||||||
|
```
|
||||||
|
|
||||||
|
saves CPU profile for each Soong invocation in /tmp/foo._step_ file, where
|
||||||
|
_step_ is Soong execution step. The main step is `build`. The others as
|
||||||
|
`bp2build_files`, `bp2build_workspace`, `modulegraph`, `queryview`,
|
||||||
|
`api_bp2build`, `soong_docs` (not all of them necessarily run during the build).
|
||||||
|
The profiles can be inspected with `go tool pprof` from the command line or
|
||||||
|
with _Run>Open Profiler Snapshot_ in IntelliJ IDEA.
|
||||||
|
|
||||||
### Kati
|
### Kati
|
||||||
|
|
||||||
|
@@ -195,6 +195,12 @@ func primaryBuilderInvocation(
|
|||||||
|
|
||||||
allArgs = append(allArgs, commonArgs...)
|
allArgs = append(allArgs, commonArgs...)
|
||||||
allArgs = append(allArgs, environmentArgs(config, name)...)
|
allArgs = append(allArgs, environmentArgs(config, name)...)
|
||||||
|
if profileCpu := os.Getenv("SOONG_PROFILE_CPU"); profileCpu != "" {
|
||||||
|
allArgs = append(allArgs, "--cpuprofile", profileCpu+"."+name)
|
||||||
|
}
|
||||||
|
if profileMem := os.Getenv("SOONG_PROFILE_MEM"); profileMem != "" {
|
||||||
|
allArgs = append(allArgs, "--memprofile", profileMem+"."+name)
|
||||||
|
}
|
||||||
allArgs = append(allArgs, "Android.bp")
|
allArgs = append(allArgs, "Android.bp")
|
||||||
|
|
||||||
return bootstrap.PrimaryBuilderInvocation{
|
return bootstrap.PrimaryBuilderInvocation{
|
||||||
|
Reference in New Issue
Block a user