Skip to content
This repository has been archived by the owner on Jul 31, 2023. It is now read-only.

Optimize Record() to avoid extra allocations #1267

Commits on Sep 14, 2021

  1. Register metrics in benchmark

    Currently, the metric we record is not registered. This hits the
    fast-path code of not actually recording the metric, so we miss out on
    detecting any performance to that main code path.
    
    This registers the metrics so we actually trigger `record`.
    howardjohn committed Sep 14, 2021
    Copy the full SHA
    3e1aa28 View commit details
    Browse the repository at this point in the history
  2. Optimize Record() to avoid extra allocations

    Currently, `Record()` re-uses code with `RecordWithOptions`. This always creates
    allocations for createRecordOption, which is not needed in this case - we only
    have measurements and not generic options.
    
    With a little code duplication, we can reduce these allocations.
    
    ```
    name                    old time/op    new time/op    delta
    Record0-6                 92.2ns ± 9%     1.7ns ± 4%   -98.11%  (p=0.008 n=5+5)
    Record1-6                  665ns ± 5%     634ns ± 6%    -4.57%  (p=0.095 n=5+5)
    Record8-6                 1.24µs ± 5%    1.21µs ± 5%    -2.18%  (p=0.206 n=5+5)
    Record8_WithRecorder-6     796ns ± 5%     777ns ± 5%    -2.45%  (p=0.222 n=5+5)
    Record8_Parallel-6        1.21µs ± 2%    1.26µs ±24%      ~     (p=0.690 n=5+5)
    Record8_8Tags-6           1.23µs ± 4%    1.23µs ± 2%      ~     (p=0.968 n=5+5)
    
    name                    old alloc/op   new alloc/op   delta
    Record0-6                  80.0B ± 0%      0.0B       -100.00%  (p=0.008 n=5+5)
    Record1-6                   200B ± 0%      120B ± 0%   -40.00%  (p=0.008 n=5+5)
    Record8-6                   424B ± 0%      344B ± 0%   -18.87%  (p=0.008 n=5+5)
    Record8_WithRecorder-6      424B ± 0%      424B ± 0%      ~     (all equal)
    Record8_Parallel-6          424B ± 0%      344B ± 0%   -18.87%  (p=0.008 n=5+5)
    Record8_8Tags-6             424B ± 0%      344B ± 0%   -18.87%  (p=0.008 n=5+5)
    
    name                    old allocs/op  new allocs/op  delta
    Record0-6                   1.00 ± 0%      0.00       -100.00%  (p=0.008 n=5+5)
    Record1-6                   4.00 ± 0%      3.00 ± 0%   -25.00%  (p=0.008 n=5+5)
    Record8-6                   4.00 ± 0%      3.00 ± 0%   -25.00%  (p=0.008 n=5+5)
    Record8_WithRecorder-6      4.00 ± 0%      4.00 ± 0%      ~     (all equal)
    Record8_Parallel-6          4.00 ± 0%      3.00 ± 0%   -25.00%  (p=0.008 n=5+5)
    Record8_8Tags-6             4.00 ± 0%      3.00 ± 0%   -25.00%  (p=0.008 n=5+5)
    ```
    howardjohn committed Sep 14, 2021
    Copy the full SHA
    b395dd0 View commit details
    Browse the repository at this point in the history