Skip to content

Commit 385000b

Browse files
committed
runtime: fix idle time double-counting bug
This change fixes a bug in the accounting of sched.idleTime. In just the case where the GC CPU limiter needs up-to-date data, sched.idleTime is incremented in both the P-idle-time and idle-mark-work paths, but it should only be incremented in the former case. Fixes #74627. Change-Id: If41b03da102d47d25bec48ff750a9da27019b71d Reviewed-on: https://go-review.googlesource.com/c/go/+/687998 Reviewed-by: Cherry Mui <[email protected]> LUCI-TryBot-Result: Go LUCI <[email protected]> Reviewed-by: Michael Pratt <[email protected]>
1 parent f506ad2 commit 385000b

File tree

1 file changed

+8
-12
lines changed

1 file changed

+8
-12
lines changed

src/runtime/mgclimit.go

Lines changed: 8 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -209,14 +209,12 @@ func (l *gcCPULimiterState) updateLocked(now int64) {
209209
for _, pp := range allp {
210210
typ, duration := pp.limiterEvent.consume(now)
211211
switch typ {
212-
case limiterEventIdleMarkWork:
213-
fallthrough
214212
case limiterEventIdle:
215-
idleTime += duration
216213
sched.idleTime.Add(duration)
217-
case limiterEventMarkAssist:
218-
fallthrough
219-
case limiterEventScavengeAssist:
214+
idleTime += duration
215+
case limiterEventIdleMarkWork:
216+
idleTime += duration
217+
case limiterEventMarkAssist, limiterEventScavengeAssist:
220218
assistTime += duration
221219
case limiterEventNone:
222220
break
@@ -470,14 +468,12 @@ func (e *limiterEvent) stop(typ limiterEventType, now int64) {
470468
}
471469
// Account for the event.
472470
switch typ {
473-
case limiterEventIdleMarkWork:
474-
gcCPULimiter.addIdleTime(duration)
475471
case limiterEventIdle:
476-
gcCPULimiter.addIdleTime(duration)
477472
sched.idleTime.Add(duration)
478-
case limiterEventMarkAssist:
479-
fallthrough
480-
case limiterEventScavengeAssist:
473+
gcCPULimiter.addIdleTime(duration)
474+
case limiterEventIdleMarkWork:
475+
gcCPULimiter.addIdleTime(duration)
476+
case limiterEventMarkAssist, limiterEventScavengeAssist:
481477
gcCPULimiter.addAssistTime(duration)
482478
default:
483479
throw("limiterEvent.stop: invalid limiter event type found")

0 commit comments

Comments
 (0)