mirror of
https://github.com/golang/go.git
synced 2025-12-08 06:10:04 +00:00
[dev.regabi] cmd/go: Use GOMAXPROCS to limit default build, compile parallelism
When people want deterministic/single-process builds, they probably assume that GOMAXPROCS=1 will do that. It currently does not, neither for build parallelism nor for compiler internal parallelism. (Current incantation for that is "go build -p=1 -gcflags=all=-c=1 ... ") This CL makes "GOMAXPROCS=1 go build ..." behave like "go build -p=1 -gcflags=all=-c=1 ... " RELNOTE=yes Change-Id: I9cfe50b7deee7334d2f1057b58385f6c98547b9f Reviewed-on: https://go-review.googlesource.com/c/go/+/284695 Trust: David Chase <drchase@google.com> Run-TryBot: David Chase <drchase@google.com> TryBot-Result: Go Bot <gobot@golang.org> Reviewed-by: Jeremy Faller <jeremy@golang.org>
This commit is contained in:
parent
9b636feafe
commit
667e08ba8c
4 changed files with 24 additions and 21 deletions
|
|
@ -111,7 +111,7 @@
|
|||
// -p n
|
||||
// the number of programs, such as build commands or
|
||||
// test binaries, that can be run in parallel.
|
||||
// The default is the number of CPUs available.
|
||||
// The default is GOMAXPROCS, normally the number of CPUs available.
|
||||
// -race
|
||||
// enable data race detection.
|
||||
// Supported only on linux/amd64, freebsd/amd64, darwin/amd64, windows/amd64,
|
||||
|
|
|
|||
|
|
@ -28,18 +28,18 @@ var (
|
|||
BuildA bool // -a flag
|
||||
BuildBuildmode string // -buildmode flag
|
||||
BuildContext = defaultContext()
|
||||
BuildMod string // -mod flag
|
||||
BuildModExplicit bool // whether -mod was set explicitly
|
||||
BuildModReason string // reason -mod was set, if set by default
|
||||
BuildI bool // -i flag
|
||||
BuildLinkshared bool // -linkshared flag
|
||||
BuildMSan bool // -msan flag
|
||||
BuildN bool // -n flag
|
||||
BuildO string // -o flag
|
||||
BuildP = runtime.NumCPU() // -p flag
|
||||
BuildPkgdir string // -pkgdir flag
|
||||
BuildRace bool // -race flag
|
||||
BuildToolexec []string // -toolexec flag
|
||||
BuildMod string // -mod flag
|
||||
BuildModExplicit bool // whether -mod was set explicitly
|
||||
BuildModReason string // reason -mod was set, if set by default
|
||||
BuildI bool // -i flag
|
||||
BuildLinkshared bool // -linkshared flag
|
||||
BuildMSan bool // -msan flag
|
||||
BuildN bool // -n flag
|
||||
BuildO string // -o flag
|
||||
BuildP = runtime.GOMAXPROCS(0) // -p flag
|
||||
BuildPkgdir string // -pkgdir flag
|
||||
BuildRace bool // -race flag
|
||||
BuildToolexec []string // -toolexec flag
|
||||
BuildToolchainName string
|
||||
BuildToolchainCompiler func() string
|
||||
BuildToolchainLinker func() string
|
||||
|
|
|
|||
|
|
@ -71,7 +71,7 @@ and test commands:
|
|||
-p n
|
||||
the number of programs, such as build commands or
|
||||
test binaries, that can be run in parallel.
|
||||
The default is the number of CPUs available.
|
||||
The default is GOMAXPROCS, normally the number of CPUs available.
|
||||
-race
|
||||
enable data race detection.
|
||||
Supported only on linux/amd64, freebsd/amd64, darwin/amd64, windows/amd64,
|
||||
|
|
|
|||
|
|
@ -239,16 +239,19 @@ CheckFlags:
|
|||
// - it has no successor packages to compile (usually package main)
|
||||
// - all paths through the build graph pass through it
|
||||
// - critical path scheduling says it is high priority
|
||||
// and in such a case, set c to runtime.NumCPU.
|
||||
// and in such a case, set c to runtime.GOMAXPROCS(0).
|
||||
// By default this is the same as runtime.NumCPU.
|
||||
// We do this now when p==1.
|
||||
// To limit parallelism, set GOMAXPROCS below numCPU; this may be useful
|
||||
// on a low-memory builder, or if a deterministic build order is required.
|
||||
c := runtime.GOMAXPROCS(0)
|
||||
if cfg.BuildP == 1 {
|
||||
// No process parallelism. Max out c.
|
||||
return runtime.NumCPU()
|
||||
// No process parallelism, do not cap compiler parallelism.
|
||||
return c
|
||||
}
|
||||
// Some process parallelism. Set c to min(4, numcpu).
|
||||
c := 4
|
||||
if ncpu := runtime.NumCPU(); ncpu < c {
|
||||
c = ncpu
|
||||
// Some process parallelism. Set c to min(4, maxprocs).
|
||||
if c > 4 {
|
||||
c = 4
|
||||
}
|
||||
return c
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue