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
|
// -p n
|
||||||
// the number of programs, such as build commands or
|
// the number of programs, such as build commands or
|
||||||
// test binaries, that can be run in parallel.
|
// 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
|
// -race
|
||||||
// enable data race detection.
|
// enable data race detection.
|
||||||
// Supported only on linux/amd64, freebsd/amd64, darwin/amd64, windows/amd64,
|
// Supported only on linux/amd64, freebsd/amd64, darwin/amd64, windows/amd64,
|
||||||
|
|
|
||||||
|
|
@ -28,18 +28,18 @@ var (
|
||||||
BuildA bool // -a flag
|
BuildA bool // -a flag
|
||||||
BuildBuildmode string // -buildmode flag
|
BuildBuildmode string // -buildmode flag
|
||||||
BuildContext = defaultContext()
|
BuildContext = defaultContext()
|
||||||
BuildMod string // -mod flag
|
BuildMod string // -mod flag
|
||||||
BuildModExplicit bool // whether -mod was set explicitly
|
BuildModExplicit bool // whether -mod was set explicitly
|
||||||
BuildModReason string // reason -mod was set, if set by default
|
BuildModReason string // reason -mod was set, if set by default
|
||||||
BuildI bool // -i flag
|
BuildI bool // -i flag
|
||||||
BuildLinkshared bool // -linkshared flag
|
BuildLinkshared bool // -linkshared flag
|
||||||
BuildMSan bool // -msan flag
|
BuildMSan bool // -msan flag
|
||||||
BuildN bool // -n flag
|
BuildN bool // -n flag
|
||||||
BuildO string // -o flag
|
BuildO string // -o flag
|
||||||
BuildP = runtime.NumCPU() // -p flag
|
BuildP = runtime.GOMAXPROCS(0) // -p flag
|
||||||
BuildPkgdir string // -pkgdir flag
|
BuildPkgdir string // -pkgdir flag
|
||||||
BuildRace bool // -race flag
|
BuildRace bool // -race flag
|
||||||
BuildToolexec []string // -toolexec flag
|
BuildToolexec []string // -toolexec flag
|
||||||
BuildToolchainName string
|
BuildToolchainName string
|
||||||
BuildToolchainCompiler func() string
|
BuildToolchainCompiler func() string
|
||||||
BuildToolchainLinker func() string
|
BuildToolchainLinker func() string
|
||||||
|
|
|
||||||
|
|
@ -71,7 +71,7 @@ and test commands:
|
||||||
-p n
|
-p n
|
||||||
the number of programs, such as build commands or
|
the number of programs, such as build commands or
|
||||||
test binaries, that can be run in parallel.
|
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
|
-race
|
||||||
enable data race detection.
|
enable data race detection.
|
||||||
Supported only on linux/amd64, freebsd/amd64, darwin/amd64, windows/amd64,
|
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)
|
// - it has no successor packages to compile (usually package main)
|
||||||
// - all paths through the build graph pass through it
|
// - all paths through the build graph pass through it
|
||||||
// - critical path scheduling says it is high priority
|
// - 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.
|
// 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 {
|
if cfg.BuildP == 1 {
|
||||||
// No process parallelism. Max out c.
|
// No process parallelism, do not cap compiler parallelism.
|
||||||
return runtime.NumCPU()
|
return c
|
||||||
}
|
}
|
||||||
// Some process parallelism. Set c to min(4, numcpu).
|
// Some process parallelism. Set c to min(4, maxprocs).
|
||||||
c := 4
|
if c > 4 {
|
||||||
if ncpu := runtime.NumCPU(); ncpu < c {
|
c = 4
|
||||||
c = ncpu
|
|
||||||
}
|
}
|
||||||
return c
|
return c
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue