• Radu Berinde's avatar
    trace: don't allocate all events upfront · f4b625ec
    Radu Berinde authored
    SetMaxEvent allocates storage for all events, which is very expensive
    if we want to set a high value; even with small values, the
    unnecessary allocation of the initial slice is measurable.
    
    We improve the performance by having a few events preallocated as part
    of the trace, and appending as necessary. We also co-locate the flags
    in event which makes it smaller (by a word).
    
    We also add a set of benchmarks; before and after amortized cost
    per-event is shown:
    
    name                    old time/op  new time/op  delta
    Trace_Default_2-32      1.19µs ± 1%  0.96µs ± 0%  -18.94%
    Trace_Default_10-32      579ns ± 0%   635ns ± 1%   +9.82%
    Trace_Default_100-32     463ns ± 1%   466ns ± 1%     ~
    Trace_Default_1000-32    451ns ± 1%   451ns ± 0%     ~
    Trace_Default_10000-32   451ns ± 2%   449ns ± 1%     ~
    Trace_10_2-32           1.41µs ± 1%  0.96µs ± 1%  -31.74%
    Trace_10_10-32           623ns ± 1%   634ns ± 1%   +1.73%
    Trace_10_100-32          469ns ± 1%   466ns ± 1%     ~
    Trace_10_1000-32         452ns ± 1%   453ns ± 2%     ~
    Trace_10_10000-32        451ns ± 1%   449ns ± 1%     ~
    Trace_100_2-32          2.78µs ± 2%  0.97µs ± 1%  -65.28%
    Trace_100_10-32          912ns ± 1%   637ns ± 1%  -30.23%
    Trace_100_100-32         479ns ± 1%   541ns ± 0%  +12.77%
    Trace_100_1000-32        510ns ± 0%   541ns ± 1%   +6.08%
    Trace_100_10000-32       514ns ± 1%   540ns ± 0%   +5.14%
    Trace_1000_2-32         17.2µs ± 1%   1.0µs ± 1%  -94.39%
    Trace_1000_10-32        3.90µs ± 1%  0.64µs ± 0%  -83.68%
    Trace_1000_100-32        814ns ± 1%   542ns ± 0%  -33.46%
    Trace_1000_1000-32       503ns ± 1%   581ns ± 0%  +15.56%
    Trace_1000_10000-32     1.28µs ± 2%  1.03µs ± 1%  -19.68%
    
    Change-Id: I5bbc12153a9f30dff821ef139583cb1c07a11069
    Reviewed-on: https://go-review.googlesource.com/30615Reviewed-by: 's avatarIan Lance Taylor <iant@golang.org>
    Run-TryBot: Ian Lance Taylor <iant@golang.org>
    TryBot-Result: Gobot Gobot <gobot@golang.org>
    f4b625ec
trace.go 26.6 KB