• 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
Name
Last commit
Last update
bpf Loading commit data...
context Loading commit data...
dict Loading commit data...
html Loading commit data...
http2 Loading commit data...
icmp Loading commit data...
idna Loading commit data...
internal Loading commit data...
ipv4 Loading commit data...
ipv6 Loading commit data...
lex/httplex Loading commit data...
lif Loading commit data...
netutil Loading commit data...
proxy Loading commit data...
publicsuffix Loading commit data...
route Loading commit data...
trace Loading commit data...
webdav Loading commit data...
websocket Loading commit data...
xsrftoken Loading commit data...
.gitattributes Loading commit data...
.gitignore Loading commit data...
AUTHORS Loading commit data...
CONTRIBUTING.md Loading commit data...
CONTRIBUTORS Loading commit data...
LICENSE Loading commit data...
PATENTS Loading commit data...
README Loading commit data...
codereview.cfg Loading commit data...