• Austin Clements's avatar
    runtime: make sweep trace events encompass entire sweep loop · 79c56add
    Austin Clements authored
    Currently, each individual span sweep emits a span to the trace. But
    sweeps are generally done in loops until some condition is satisfied,
    so this tracing is lower-level than anyone really wants any hides the
    fact that no other work is being accomplished between adjacent sweep
    events. This is also high overhead: enabling tracing significantly
    impacts sweep latency.
    
    Replace this with instead tracing around the sweep loops used for
    allocation. This is slightly tricky because sweep loops don't
    generally know if any sweeping will happen in them. Hence, we make the
    tracing lazy by recording in the P that we would like to start tracing
    the sweep *if* one happens, and then only closing the sweep event if
    we started it.
    
    This does mean we don't get tracing on every sweep path, which are
    legion. However, we get much more informative tracing on the paths
    that block allocation, which are the paths that matter.
    
    Change-Id: I73e14fbb250acb0c9d92e3648bddaa5e7d7e271c
    Reviewed-on: https://go-review.googlesource.com/40810
    Run-TryBot: Austin Clements <austin@google.com>
    Reviewed-by: 's avatarHyang-Ah Hana Kim <hyangah@gmail.com>
    TryBot-Result: Gobot Gobot <gobot@golang.org>
    79c56add
trace.go 33.3 KB