• Rick Hudson's avatar
    runtime: eagerly share GC work buffers · 9439fa10
    Rick Hudson authored
    Currently, due to an oversight, we only balance work buffers
    in background and idle workers and not in assists. As a
    result, in assist-heavy workloads, assists are likely to tie
    up large work buffers in per-P caches increasing the
    likelihood that the global list will be empty. This increases
    the likelihood that other GC workers will exit and assists
    will block, slowing down the system as a whole. Fix this by
    eagerly balancing work buffers as soon as the assists notice
    that the global buffers are empty. This makes it much more
    likely that work will be immediately available to other
    workers and assists.
    
    This change reduces the garbage benchmark time by 39% and
    fixes the regresssion seen at CL 15893 golang.org/cl/15893.
    
    Garbage benchmark times before and after this CL.
    Before GOPERF-METRIC:time=4427020
    After  GOPERF-METRIC:time=2721645
    
    Fixes #13827
    
    Change-Id: I9cb531fb873bab4b69ce9c1617e30df6c49cdcfe
    Reviewed-on: https://go-review.googlesource.com/18341Reviewed-by: default avatarAustin Clements <austin@google.com>
    9439fa10
mgcmark.go 35.6 KB