mirror of
https://github.com/golang/go.git
synced 2025-12-08 06:10:04 +00:00
runtime: preempt fractional worker after reaching utilization goal
Currently fractional workers run until preempted by the scheduler, which means they typically run for 20ms. During this time, all other goroutines on that P are blocked, which can introduce significant latency variance. This modifies fractional workers to self-preempt shortly after achieving the fractional utilization goal. In practice this means they preempt much sooner, and the scale of their preemption is on the order of how often the user goroutine block (so, if the application is compute-bound, the fractional workers will also run for long times, but if the application blocks frequently, the fractional workers will also preempt quickly). Fixes #21698. Updates #18534. Change-Id: I03a5ab195dae93154a46c32083c4bb52415d2017 Reviewed-on: https://go-review.googlesource.com/68573 Run-TryBot: Austin Clements <austin@google.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Rick Hudson <rlh@golang.org>
This commit is contained in:
parent
b783930e63
commit
28e1a8e47a
3 changed files with 54 additions and 17 deletions
|
|
@ -526,6 +526,10 @@ type p struct {
|
|||
gcBgMarkWorker guintptr
|
||||
gcMarkWorkerMode gcMarkWorkerMode
|
||||
|
||||
// gcMarkWorkerStartTime is the nanotime() at which this mark
|
||||
// worker started.
|
||||
gcMarkWorkerStartTime int64
|
||||
|
||||
// gcw is this P's GC work buffer cache. The work buffer is
|
||||
// filled by write barriers, drained by mutator assists, and
|
||||
// disposed on certain GC state transitions.
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue