• Michael Anthony Knyszek's avatar
    runtime: add background scavenger · fe67ea32
    Michael Anthony Knyszek authored
    This change adds a background scavenging goroutine whose pacing is
    determined when the heap goal changes. The scavenger is paced to use
    at most 1% of the mutator's time for most systems. Furthermore, the
    scavenger's pacing is computed based on the estimated number of
    scavengable huge pages to take advantage of optimizations provided by
    the OS.
    
    The purpose of this scavenger is to deal with a shrinking heap: if the
    heap goal is falling over time, the scavenger should kick in and start
    returning free pages from the heap to the OS.
    
    Also, now that we have a pacing system, the credit system used by
    scavengeLocked has become redundant. Replace it with a mechanism which
    only scavenges on the allocation path if it makes sense to do so with
    respect to the new pacing system.
    
    Fixes #30333.
    
    Change-Id: I6203f8dc84affb26c3ab04528889dd9663530edc
    Reviewed-on: https://go-review.googlesource.com/c/go/+/142960
    Run-TryBot: Michael Knyszek <mknyszek@google.com>
    TryBot-Result: Gobot Gobot <gobot@golang.org>
    Reviewed-by: default avatarAustin Clements <austin@google.com>
    fe67ea32
mheap.go 60.5 KB