Commit a23a341e authored by Austin Clements's avatar Austin Clements

runtime: make time slice a const

A G will be preempted if it runs for 10ms without blocking. Currently
this constant is hard-coded in retake. Move it to a global const.
We'll use the time slice length in scheduling background GC.

Change-Id: I79a979948af2fad3afe5df9d4af4062f166554b7
Reviewed-on: https://go-review.googlesource.com/8838Reviewed-by: 's avatarBrad Fitzpatrick <bradfitz@golang.org>
Reviewed-by: 's avatarRick Hudson <rlh@golang.org>
parent 69001e40
......@@ -2874,6 +2874,10 @@ var pdesc [_MaxGomaxprocs]struct {
syscallwhen int64
}
// forcePreemptNS is the time slice given to a G before it is
// preempted.
const forcePreemptNS = 10 * 1000 * 1000 // 10ms
func retake(now int64) uint32 {
n := 0
for i := int32(0); i < gomaxprocs; i++ {
......@@ -2913,14 +2917,14 @@ func retake(now int64) uint32 {
}
incidlelocked(1)
} else if s == _Prunning {
// Preempt G if it's running for more than 10ms.
// Preempt G if it's running for too long.
t := int64(_p_.schedtick)
if int64(pd.schedtick) != t {
pd.schedtick = uint32(t)
pd.schedwhen = now
continue
}
if pd.schedwhen+10*1000*1000 > now {
if pd.schedwhen+forcePreemptNS > now {
continue
}
preemptone(_p_)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment