From: Austin Clements Date: Mon, 23 Mar 2015 17:27:24 +0000 (-0400) Subject: runtime: make time slice a const X-Git-Tag: go1.5beta1~1117 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=a23a341e10132532b3922ad7a77508df24db75f2;p=gostls13.git 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/8838 Reviewed-by: Brad Fitzpatrick Reviewed-by: Rick Hudson --- diff --git a/src/runtime/proc1.go b/src/runtime/proc1.go index 65f83e2caa..e3565a6d33 100644 --- a/src/runtime/proc1.go +++ b/src/runtime/proc1.go @@ -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_)