• Bryan C. Mills's avatar
    encoding/json: replace encoderCache RWMutex with a sync.Map · d6ce7e4f
    Bryan C. Mills authored
    This provides a moderate speedup for encoding when using many CPU cores.
    
    name                    old time/op    new time/op    delta
    CodeEncoder               14.1ms ±10%    13.5ms ± 4%      ~     (p=0.867 n=8+7)
    CodeEncoder-6             2.58ms ± 8%    2.72ms ± 6%      ~     (p=0.065 n=8+8)
    CodeEncoder-48             629µs ± 1%     629µs ± 1%      ~     (p=0.867 n=8+7)
    CodeMarshal               14.9ms ± 5%    14.9ms ± 5%      ~     (p=0.721 n=8+8)
    CodeMarshal-6             3.28ms ±11%    3.24ms ±12%      ~     (p=0.798 n=8+8)
    CodeMarshal-48             739µs ± 1%     745µs ± 2%      ~     (p=0.328 n=8+8)
    CodeDecoder               49.7ms ± 4%    49.2ms ± 4%      ~     (p=0.463 n=7+8)
    CodeDecoder-6             10.1ms ± 8%    10.4ms ± 3%      ~     (p=0.232 n=7+8)
    CodeDecoder-48            2.60ms ± 3%    2.61ms ± 2%      ~     (p=1.000 n=8+8)
    DecoderStream              352ns ± 5%     344ns ± 4%      ~     (p=0.077 n=8+8)
    DecoderStream-6            485ns ± 8%     503ns ± 6%      ~     (p=0.123 n=8+8)
    DecoderStream-48           522ns ± 7%     520ns ± 5%      ~     (p=0.959 n=8+8)
    CodeUnmarshal             52.2ms ± 5%    54.4ms ±18%      ~     (p=0.955 n=7+8)
    CodeUnmarshal-6           12.4ms ± 6%    12.3ms ± 6%      ~     (p=0.878 n=8+8)
    CodeUnmarshal-48          3.46ms ± 7%    3.40ms ± 9%      ~     (p=0.442 n=8+8)
    CodeUnmarshalReuse        48.9ms ± 6%    50.3ms ± 7%      ~     (p=0.279 n=8+8)
    CodeUnmarshalReuse-6      10.3ms ±11%    10.3ms ±10%      ~     (p=0.959 n=8+8)
    CodeUnmarshalReuse-48     2.68ms ± 3%    2.67ms ± 4%      ~     (p=0.878 n=8+8)
    UnmarshalString            476ns ± 7%     474ns ± 7%      ~     (p=0.644 n=8+8)
    UnmarshalString-6          164ns ± 9%     160ns ±10%      ~     (p=0.556 n=8+8)
    UnmarshalString-48         181ns ± 0%     177ns ± 2%    -2.36%  (p=0.001 n=7+7)
    UnmarshalFloat64           414ns ± 4%     418ns ± 4%      ~     (p=0.382 n=8+8)
    UnmarshalFloat64-6         147ns ± 9%     143ns ±16%      ~     (p=0.457 n=8+8)
    UnmarshalFloat64-48        176ns ± 2%     174ns ± 2%      ~     (p=0.118 n=8+8)
    UnmarshalInt64             369ns ± 4%     354ns ± 1%    -3.85%  (p=0.005 n=8+7)
    UnmarshalInt64-6           132ns ±11%     132ns ±10%      ~     (p=0.982 n=8+8)
    UnmarshalInt64-48          177ns ± 3%     174ns ± 2%    -1.84%  (p=0.028 n=8+7)
    Issue10335                 540ns ± 5%     535ns ± 0%      ~     (p=0.330 n=7+7)
    Issue10335-6               159ns ± 8%     164ns ± 8%      ~     (p=0.246 n=8+8)
    Issue10335-48              186ns ± 1%     182ns ± 2%    -1.89%  (p=0.010 n=8+8)
    Unmapped                  1.74µs ± 2%    1.76µs ± 6%      ~     (p=0.181 n=6+8)
    Unmapped-6                 414ns ± 5%     402ns ±10%      ~     (p=0.244 n=7+8)
    Unmapped-48                226ns ± 2%     224ns ± 2%      ~     (p=0.144 n=7+8)
    NumberIsValid             20.1ns ± 4%    19.7ns ± 3%      ~     (p=0.204 n=8+8)
    NumberIsValid-6           20.4ns ± 8%    22.2ns ±16%      ~     (p=0.129 n=7+8)
    NumberIsValid-48          23.1ns ±12%    23.8ns ± 8%      ~     (p=0.104 n=8+8)
    NumberIsValidRegexp        629ns ± 5%     622ns ± 0%      ~     (p=0.148 n=7+7)
    NumberIsValidRegexp-6      757ns ± 2%     725ns ±14%      ~     (p=0.351 n=8+7)
    NumberIsValidRegexp-48     757ns ± 2%     723ns ±13%      ~     (p=0.521 n=8+8)
    SkipValue                 13.2ms ± 9%    13.3ms ± 1%      ~     (p=0.130 n=8+8)
    SkipValue-6               15.1ms ±10%    14.8ms ± 2%      ~     (p=0.397 n=7+8)
    SkipValue-48              13.9ms ±12%    14.3ms ± 1%      ~     (p=0.694 n=8+7)
    EncoderEncode              433ns ± 4%     410ns ± 3%    -5.48%  (p=0.001 n=8+8)
    EncoderEncode-6            221ns ±15%      75ns ± 5%   -66.15%  (p=0.000 n=7+8)
    EncoderEncode-48           161ns ± 4%      19ns ± 7%   -88.29%  (p=0.000 n=7+8)
    
    name                    old speed      new speed      delta
    CodeEncoder              139MB/s ±10%   144MB/s ± 4%      ~     (p=0.844 n=8+7)
    CodeEncoder-6            756MB/s ± 8%   714MB/s ± 6%      ~     (p=0.065 n=8+8)
    CodeEncoder-48          3.08GB/s ± 1%  3.09GB/s ± 1%      ~     (p=0.867 n=8+7)
    CodeMarshal              130MB/s ± 5%   130MB/s ± 5%      ~     (p=0.721 n=8+8)
    CodeMarshal-6            594MB/s ±10%   601MB/s ±11%      ~     (p=0.798 n=8+8)
    CodeMarshal-48          2.62GB/s ± 1%  2.60GB/s ± 2%      ~     (p=0.328 n=8+8)
    CodeDecoder             39.0MB/s ± 4%  39.5MB/s ± 4%      ~     (p=0.463 n=7+8)
    CodeDecoder-6            189MB/s ±13%   187MB/s ± 3%      ~     (p=0.505 n=8+8)
    CodeDecoder-48           746MB/s ± 2%   745MB/s ± 2%      ~     (p=1.000 n=8+8)
    CodeUnmarshal           37.2MB/s ± 5%  35.9MB/s ±16%      ~     (p=0.955 n=7+8)
    CodeUnmarshal-6          157MB/s ± 6%   158MB/s ± 6%      ~     (p=0.878 n=8+8)
    CodeUnmarshal-48         561MB/s ± 7%   572MB/s ±10%      ~     (p=0.442 n=8+8)
    SkipValue                141MB/s ±10%   139MB/s ± 1%      ~     (p=0.130 n=8+8)
    SkipValue-6              131MB/s ± 3%   133MB/s ± 2%      ~     (p=0.662 n=6+8)
    SkipValue-48             138MB/s ±11%   132MB/s ± 1%      ~     (p=0.281 n=8+7)
    
    name                    old alloc/op   new alloc/op   delta
    CodeEncoder               45.9kB ± 0%    45.9kB ± 0%    -0.02%  (p=0.002 n=7+8)
    CodeEncoder-6             55.1kB ± 0%    55.1kB ± 0%    -0.01%  (p=0.002 n=7+8)
    CodeEncoder-48             110kB ± 0%     110kB ± 0%    -0.00%  (p=0.030 n=7+8)
    CodeMarshal               4.59MB ± 0%    4.59MB ± 0%    -0.00%  (p=0.000 n=8+8)
    CodeMarshal-6             4.59MB ± 0%    4.59MB ± 0%    -0.00%  (p=0.000 n=8+8)
    CodeMarshal-48            4.59MB ± 0%    4.59MB ± 0%    -0.00%  (p=0.001 n=7+8)
    CodeDecoder               2.28MB ± 5%    2.21MB ± 0%      ~     (p=0.257 n=8+7)
    CodeDecoder-6             2.43MB ±11%    2.51MB ± 0%      ~     (p=0.473 n=8+8)
    CodeDecoder-48            2.93MB ± 0%    2.93MB ± 0%      ~     (p=0.554 n=7+8)
    DecoderStream              16.0B ± 0%     16.0B ± 0%      ~     (all equal)
    DecoderStream-6            16.0B ± 0%     16.0B ± 0%      ~     (all equal)
    DecoderStream-48           16.0B ± 0%     16.0B ± 0%      ~     (all equal)
    CodeUnmarshal             3.28MB ± 0%    3.28MB ± 0%      ~     (p=1.000 n=7+7)
    CodeUnmarshal-6           3.28MB ± 0%    3.28MB ± 0%      ~     (p=0.593 n=8+8)
    CodeUnmarshal-48          3.28MB ± 0%    3.28MB ± 0%      ~     (p=0.670 n=8+8)
    CodeUnmarshalReuse        1.87MB ± 0%    1.88MB ± 1%    +0.48%  (p=0.011 n=7+8)
    CodeUnmarshalReuse-6      1.90MB ± 1%    1.90MB ± 1%      ~     (p=0.589 n=8+8)
    CodeUnmarshalReuse-48     1.96MB ± 0%    1.96MB ± 0%    +0.00%  (p=0.002 n=7+8)
    UnmarshalString             304B ± 0%      304B ± 0%      ~     (all equal)
    UnmarshalString-6           304B ± 0%      304B ± 0%      ~     (all equal)
    UnmarshalString-48          304B ± 0%      304B ± 0%      ~     (all equal)
    UnmarshalFloat64            292B ± 0%      292B ± 0%      ~     (all equal)
    UnmarshalFloat64-6          292B ± 0%      292B ± 0%      ~     (all equal)
    UnmarshalFloat64-48         292B ± 0%      292B ± 0%      ~     (all equal)
    UnmarshalInt64              289B ± 0%      289B ± 0%      ~     (all equal)
    UnmarshalInt64-6            289B ± 0%      289B ± 0%      ~     (all equal)
    UnmarshalInt64-48           289B ± 0%      289B ± 0%      ~     (all equal)
    Issue10335                  312B ± 0%      312B ± 0%      ~     (all equal)
    Issue10335-6                312B ± 0%      312B ± 0%      ~     (all equal)
    Issue10335-48               312B ± 0%      312B ± 0%      ~     (all equal)
    Unmapped                    344B ± 0%      344B ± 0%      ~     (all equal)
    Unmapped-6                  344B ± 0%      344B ± 0%      ~     (all equal)
    Unmapped-48                 344B ± 0%      344B ± 0%      ~     (all equal)
    NumberIsValid              0.00B          0.00B           ~     (all equal)
    NumberIsValid-6            0.00B          0.00B           ~     (all equal)
    NumberIsValid-48           0.00B          0.00B           ~     (all equal)
    NumberIsValidRegexp        0.00B          0.00B           ~     (all equal)
    NumberIsValidRegexp-6      0.00B          0.00B           ~     (all equal)
    NumberIsValidRegexp-48     0.00B          0.00B           ~     (all equal)
    SkipValue                  0.00B          0.00B           ~     (all equal)
    SkipValue-6                0.00B          0.00B           ~     (all equal)
    SkipValue-48              15.0B ±167%      0.0B           ~     (p=0.200 n=8+8)
    EncoderEncode              8.00B ± 0%     0.00B       -100.00%  (p=0.000 n=8+8)
    EncoderEncode-6            8.00B ± 0%     0.00B       -100.00%  (p=0.000 n=8+8)
    EncoderEncode-48           8.00B ± 0%     0.00B       -100.00%  (p=0.000 n=8+8)
    
    name                    old allocs/op  new allocs/op  delta
    CodeEncoder                 1.00 ± 0%      0.00       -100.00%  (p=0.000 n=8+8)
    CodeEncoder-6               1.00 ± 0%      0.00       -100.00%  (p=0.000 n=8+8)
    CodeEncoder-48              1.00 ± 0%      0.00       -100.00%  (p=0.000 n=8+8)
    CodeMarshal                 17.0 ± 0%      16.0 ± 0%    -5.88%  (p=0.000 n=8+8)
    CodeMarshal-6               17.0 ± 0%      16.0 ± 0%    -5.88%  (p=0.000 n=8+8)
    CodeMarshal-48              17.0 ± 0%      16.0 ± 0%    -5.88%  (p=0.000 n=8+8)
    CodeDecoder                89.6k ± 0%     89.5k ± 0%      ~     (p=0.154 n=8+7)
    CodeDecoder-6              89.8k ± 0%     89.9k ± 0%      ~     (p=0.467 n=8+8)
    CodeDecoder-48             90.5k ± 0%     90.5k ± 0%      ~     (p=0.533 n=8+7)
    DecoderStream               2.00 ± 0%      2.00 ± 0%      ~     (all equal)
    DecoderStream-6             2.00 ± 0%      2.00 ± 0%      ~     (all equal)
    DecoderStream-48            2.00 ± 0%      2.00 ± 0%      ~     (all equal)
    CodeUnmarshal               105k ± 0%      105k ± 0%      ~     (all equal)
    CodeUnmarshal-6             105k ± 0%      105k ± 0%      ~     (all equal)
    CodeUnmarshal-48            105k ± 0%      105k ± 0%      ~     (all equal)
    CodeUnmarshalReuse         89.5k ± 0%     89.6k ± 0%      ~     (p=0.246 n=7+8)
    CodeUnmarshalReuse-6       89.8k ± 0%     89.8k ± 0%      ~     (p=1.000 n=8+8)
    CodeUnmarshalReuse-48      90.5k ± 0%     90.5k ± 0%      ~     (all equal)
    UnmarshalString             2.00 ± 0%      2.00 ± 0%      ~     (all equal)
    UnmarshalString-6           2.00 ± 0%      2.00 ± 0%      ~     (all equal)
    UnmarshalString-48          2.00 ± 0%      2.00 ± 0%      ~     (all equal)
    UnmarshalFloat64            2.00 ± 0%      2.00 ± 0%      ~     (all equal)
    UnmarshalFloat64-6          2.00 ± 0%      2.00 ± 0%      ~     (all equal)
    UnmarshalFloat64-48         2.00 ± 0%      2.00 ± 0%      ~     (all equal)
    UnmarshalInt64              2.00 ± 0%      2.00 ± 0%      ~     (all equal)
    UnmarshalInt64-6            2.00 ± 0%      2.00 ± 0%      ~     (all equal)
    UnmarshalInt64-48           2.00 ± 0%      2.00 ± 0%      ~     (all equal)
    Issue10335                  3.00 ± 0%      3.00 ± 0%      ~     (all equal)
    Issue10335-6                3.00 ± 0%      3.00 ± 0%      ~     (all equal)
    Issue10335-48               3.00 ± 0%      3.00 ± 0%      ~     (all equal)
    Unmapped                    4.00 ± 0%      4.00 ± 0%      ~     (all equal)
    Unmapped-6                  4.00 ± 0%      4.00 ± 0%      ~     (all equal)
    Unmapped-48                 4.00 ± 0%      4.00 ± 0%      ~     (all equal)
    NumberIsValid               0.00           0.00           ~     (all equal)
    NumberIsValid-6             0.00           0.00           ~     (all equal)
    NumberIsValid-48            0.00           0.00           ~     (all equal)
    NumberIsValidRegexp         0.00           0.00           ~     (all equal)
    NumberIsValidRegexp-6       0.00           0.00           ~     (all equal)
    NumberIsValidRegexp-48      0.00           0.00           ~     (all equal)
    SkipValue                   0.00           0.00           ~     (all equal)
    SkipValue-6                 0.00           0.00           ~     (all equal)
    SkipValue-48                0.00           0.00           ~     (all equal)
    EncoderEncode               1.00 ± 0%      0.00       -100.00%  (p=0.000 n=8+8)
    EncoderEncode-6             1.00 ± 0%      0.00       -100.00%  (p=0.000 n=8+8)
    EncoderEncode-48            1.00 ± 0%      0.00       -100.00%  (p=0.000 n=8+8)
    
    https://perf.golang.org/search?q=upload:20170427.2
    
    updates #17973
    updates #18177
    
    Change-Id: I5881c7a2bfad1766e6aa3444bb630883e0be467b
    Reviewed-on: https://go-review.googlesource.com/41931
    Run-TryBot: Bryan Mills <bcmills@google.com>
    TryBot-Result: Gobot Gobot <gobot@golang.org>
    Reviewed-by: 's avatarIan Lance Taylor <iant@golang.org>
    Reviewed-by: 's avatarBrad Fitzpatrick <bradfitz@golang.org>
    d6ce7e4f
Name
Last commit
Last update
..
ascii85 Loading commit data...
asn1 Loading commit data...
base32 Loading commit data...
base64 Loading commit data...
binary Loading commit data...
csv Loading commit data...
gob Loading commit data...
hex Loading commit data...
json Loading commit data...
pem Loading commit data...
xml Loading commit data...
encoding.go Loading commit data...