mirror of
https://github.com/VictoriaMetrics/VictoriaMetrics.git
synced 2024-11-21 14:44:00 +00:00
lib/cgroup: round GOMAXPROCS to the lower integer value of cpuQuota
Rounding GOMAXPROCS to the upper interger value of cpuQuota increases chances of CPU starvation, non-optimimal goroutine scheduling and additional CPU overhead related to context switching. So it is better to round GOMAXPROCS to the lower integer value of cpuQuota.
This commit is contained in:
parent
3964889705
commit
109772bdc4
1 changed files with 9 additions and 4 deletions
|
@ -37,15 +37,20 @@ func updateGOMAXPROCSToCPUQuota(cpuQuota float64) {
|
||||||
// Do not override explicitly set GOMAXPROCS.
|
// Do not override explicitly set GOMAXPROCS.
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
gomaxprocs := int(cpuQuota + 0.5)
|
|
||||||
|
// Round gomaxprocs to the floor of cpuQuota, since Go runtime doesn't work well
|
||||||
|
// with fractional available CPU cores.
|
||||||
|
gomaxprocs := int(cpuQuota)
|
||||||
|
if gomaxprocs <= 0 {
|
||||||
|
gomaxprocs = 1
|
||||||
|
}
|
||||||
|
|
||||||
numCPU := runtime.NumCPU()
|
numCPU := runtime.NumCPU()
|
||||||
if gomaxprocs > numCPU {
|
if gomaxprocs > numCPU {
|
||||||
// There is no sense in setting more GOMAXPROCS than the number of available CPU cores.
|
// There is no sense in setting more GOMAXPROCS than the number of available CPU cores.
|
||||||
gomaxprocs = numCPU
|
gomaxprocs = numCPU
|
||||||
}
|
}
|
||||||
if gomaxprocs <= 0 {
|
|
||||||
gomaxprocs = 1
|
|
||||||
}
|
|
||||||
runtime.GOMAXPROCS(gomaxprocs)
|
runtime.GOMAXPROCS(gomaxprocs)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue