Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Flatten MetricName builder #1373

Merged
merged 7 commits into from
Mar 2, 2022
Merged

Conversation

carterkozak
Copy link
Contributor

This drops the immutables implementation of the MetricName.builder
in favor of a custom-tailored implementation using TagMap.

Tag additions are copy-on-write, which would not scale well
with large maps, however we tend to use small (N < 10) tag
maps.

Benchmark                                                           Mode  Cnt     Score     Error   Units
MetricNameBenchmark.benchmarkName                                   avgt    5   142.270 ±   5.227   ns/op
MetricNameBenchmark.benchmarkName:·gc.alloc.rate                    avgt    5  2000.444 ±  72.309  MB/sec
MetricNameBenchmark.benchmarkName:·gc.alloc.rate.norm               avgt    5   448.014 ±   0.007    B/op
MetricNameBenchmark.benchmarkName:·gc.churn.G1_Eden_Space           avgt    5  2003.666 ± 908.211  MB/sec
MetricNameBenchmark.benchmarkName:·gc.churn.G1_Eden_Space.norm      avgt    5   448.922 ± 209.311    B/op
MetricNameBenchmark.benchmarkName:·gc.churn.G1_Survivor_Space       avgt    5     0.005 ±   0.014  MB/sec
MetricNameBenchmark.benchmarkName:·gc.churn.G1_Survivor_Space.norm  avgt    5     0.001 ±   0.003    B/op
MetricNameBenchmark.benchmarkName:·gc.count                         avgt    5    19.000            counts
MetricNameBenchmark.benchmarkName:·gc.time                          avgt    5    21.000                ms
Benchmark                                                           Mode  Cnt     Score    Error   Units
MetricNameBenchmark.benchmarkName                                   avgt    5    67.294 ±  2.825   ns/op
MetricNameBenchmark.benchmarkName:·gc.alloc.rate                    avgt    5  1585.976 ± 66.417  MB/sec
MetricNameBenchmark.benchmarkName:·gc.alloc.rate.norm               avgt    5   168.007 ±  0.001    B/op
MetricNameBenchmark.benchmarkName:·gc.churn.G1_Eden_Space           avgt    5  1576.576 ±  0.744  MB/sec
MetricNameBenchmark.benchmarkName:·gc.churn.G1_Eden_Space.norm      avgt    5   167.027 ±  7.090    B/op
MetricNameBenchmark.benchmarkName:·gc.churn.G1_Survivor_Space       avgt    5     0.004 ±  0.008  MB/sec
MetricNameBenchmark.benchmarkName:·gc.churn.G1_Survivor_Space.norm  avgt    5    ≈ 10⁻³             B/op
MetricNameBenchmark.benchmarkName:·gc.count                         avgt    5    20.000           counts
MetricNameBenchmark.benchmarkName:·gc.time                          avgt    5    22.000               ms

After this PR

==COMMIT_MSG==
Optimize MetricName builder for small tag maps
==COMMIT_MSG==

This drops the immutables implementation of the MetricName.builder
in favor of a custom-tailored implementation using TagMap.

Tag additions are copy-on-write, which would not scale well
with large maps, however we tend to use small (N < 10) tag
maps.

```
Benchmark                                                           Mode  Cnt     Score     Error   Units
MetricNameBenchmark.benchmarkName                                   avgt    5   142.270 ±   5.227   ns/op
MetricNameBenchmark.benchmarkName:·gc.alloc.rate                    avgt    5  2000.444 ±  72.309  MB/sec
MetricNameBenchmark.benchmarkName:·gc.alloc.rate.norm               avgt    5   448.014 ±   0.007    B/op
MetricNameBenchmark.benchmarkName:·gc.churn.G1_Eden_Space           avgt    5  2003.666 ± 908.211  MB/sec
MetricNameBenchmark.benchmarkName:·gc.churn.G1_Eden_Space.norm      avgt    5   448.922 ± 209.311    B/op
MetricNameBenchmark.benchmarkName:·gc.churn.G1_Survivor_Space       avgt    5     0.005 ±   0.014  MB/sec
MetricNameBenchmark.benchmarkName:·gc.churn.G1_Survivor_Space.norm  avgt    5     0.001 ±   0.003    B/op
MetricNameBenchmark.benchmarkName:·gc.count                         avgt    5    19.000            counts
MetricNameBenchmark.benchmarkName:·gc.time                          avgt    5    21.000                ms
```

```
Benchmark                                                           Mode  Cnt     Score    Error   Units
MetricNameBenchmark.benchmarkName                                   avgt    5    67.294 ±  2.825   ns/op
MetricNameBenchmark.benchmarkName:·gc.alloc.rate                    avgt    5  1585.976 ± 66.417  MB/sec
MetricNameBenchmark.benchmarkName:·gc.alloc.rate.norm               avgt    5   168.007 ±  0.001    B/op
MetricNameBenchmark.benchmarkName:·gc.churn.G1_Eden_Space           avgt    5  1576.576 ±  0.744  MB/sec
MetricNameBenchmark.benchmarkName:·gc.churn.G1_Eden_Space.norm      avgt    5   167.027 ±  7.090    B/op
MetricNameBenchmark.benchmarkName:·gc.churn.G1_Survivor_Space       avgt    5     0.004 ±  0.008  MB/sec
MetricNameBenchmark.benchmarkName:·gc.churn.G1_Survivor_Space.norm  avgt    5    ≈ 10⁻³             B/op
MetricNameBenchmark.benchmarkName:·gc.count                         avgt    5    20.000           counts
MetricNameBenchmark.benchmarkName:·gc.time                          avgt    5    22.000               ms
```
@changelog-app
Copy link

changelog-app bot commented Mar 1, 2022

Generate changelog in changelog/@unreleased

Type

  • Feature
  • Improvement
  • Fix
  • Break
  • Deprecation
  • Manual task
  • Migration

Description

Optimize MetricName builder for small tag maps

Check the box to generate changelog(s)

  • Generate changelog entry

@carterkozak
Copy link
Contributor Author

TODO: I need to expand the benchmark to better understand the point at which the old implementation outperforms this one.

@carterkozak
Copy link
Contributor Author

Results from m1 macbook air on battery, so take them with a grain of salt. aarch64 jdk-17.0.1.

A builder with 13 tag values resulted in ~10% more byes allocated per operation, but performed ~20% better. 7 tags per metric is more than we expect in most cases, but surprisingly showed lower allocation than the previous implementation with 30% greater throughput.

After:

Benchmark                                                                Mode  Cnt     Score    Error   Units
MetricNameBenchmark.benchmarkName3Tags                                   avgt    5    44.909 ±  1.195   ns/op
MetricNameBenchmark.benchmarkName3Tags:·gc.alloc.rate                    avgt    5  2711.499 ± 74.284  MB/sec
MetricNameBenchmark.benchmarkName3Tags:·gc.alloc.rate.norm               avgt    5   192.016 ±  0.001    B/op
MetricNameBenchmark.benchmarkName3Tags:·gc.churn.G1_Eden_Space           avgt    5  2704.819 ± 15.882  MB/sec
MetricNameBenchmark.benchmarkName3Tags:·gc.churn.G1_Eden_Space.norm      avgt    5   191.550 ±  5.490    B/op
MetricNameBenchmark.benchmarkName3Tags:·gc.churn.G1_Survivor_Space       avgt    5     0.009 ±  0.010  MB/sec
MetricNameBenchmark.benchmarkName3Tags:·gc.churn.G1_Survivor_Space.norm  avgt    5     0.001 ±  0.001    B/op
MetricNameBenchmark.benchmarkName3Tags:·gc.count                         avgt    5    70.000           counts
MetricNameBenchmark.benchmarkName3Tags:·gc.time                          avgt    5    38.000               ms
MetricNameBenchmark.benchmarkName7Tags                                   avgt    5   161.408 ±  1.725   ns/op
MetricNameBenchmark.benchmarkName7Tags:·gc.alloc.rate                    avgt    5  1949.075 ± 22.819  MB/sec
MetricNameBenchmark.benchmarkName7Tags:·gc.alloc.rate.norm               avgt    5   496.053 ±  0.004    B/op
MetricNameBenchmark.benchmarkName7Tags:·gc.churn.G1_Eden_Space           avgt    5  1946.124 ± 16.658  MB/sec
MetricNameBenchmark.benchmarkName7Tags:·gc.churn.G1_Eden_Space.norm      avgt    5   495.305 ±  7.039    B/op
MetricNameBenchmark.benchmarkName7Tags:·gc.churn.G1_Survivor_Space       avgt    5     0.009 ±  0.015  MB/sec
MetricNameBenchmark.benchmarkName7Tags:·gc.churn.G1_Survivor_Space.norm  avgt    5     0.002 ±  0.004    B/op
MetricNameBenchmark.benchmarkName7Tags:·gc.count                         avgt    5    65.000           counts
MetricNameBenchmark.benchmarkName7Tags:·gc.time                          avgt    5    34.000               ms

Before:

Benchmark                                                                Mode  Cnt     Score     Error   Units
MetricNameBenchmark.benchmarkName3Tags                                   avgt    5    91.902 ±   1.898   ns/op
MetricNameBenchmark.benchmarkName3Tags:·gc.alloc.rate                    avgt    5  3088.439 ±  56.889  MB/sec
MetricNameBenchmark.benchmarkName3Tags:·gc.alloc.rate.norm               avgt    5   448.034 ±   0.001    B/op
MetricNameBenchmark.benchmarkName3Tags:·gc.churn.G1_Eden_Space           avgt    5  3096.004 ±  27.405  MB/sec
MetricNameBenchmark.benchmarkName3Tags:·gc.churn.G1_Eden_Space.norm      avgt    5   449.139 ±   8.544    B/op
MetricNameBenchmark.benchmarkName3Tags:·gc.churn.G1_Survivor_Space       avgt    5     0.010 ±   0.010  MB/sec
MetricNameBenchmark.benchmarkName3Tags:·gc.churn.G1_Survivor_Space.norm  avgt    5     0.001 ±   0.002    B/op
MetricNameBenchmark.benchmarkName3Tags:·gc.count                         avgt    5    75.000            counts
MetricNameBenchmark.benchmarkName3Tags:·gc.time                          avgt    5    41.000                ms
MetricNameBenchmark.benchmarkName7Tags                                   avgt    5   228.094 ±   4.468   ns/op
MetricNameBenchmark.benchmarkName7Tags:·gc.alloc.rate                    avgt    5  1822.762 ±  40.661  MB/sec
MetricNameBenchmark.benchmarkName7Tags:·gc.alloc.rate.norm               avgt    5   656.061 ±   0.014    B/op
MetricNameBenchmark.benchmarkName7Tags:·gc.churn.G1_Eden_Space           avgt    5  1845.058 ± 371.915  MB/sec
MetricNameBenchmark.benchmarkName7Tags:·gc.churn.G1_Eden_Space.norm      avgt    5   664.075 ± 131.977    B/op
MetricNameBenchmark.benchmarkName7Tags:·gc.churn.G1_Survivor_Space       avgt    5     0.007 ±   0.005  MB/sec
MetricNameBenchmark.benchmarkName7Tags:·gc.churn.G1_Survivor_Space.norm  avgt    5     0.002 ±   0.002    B/op
MetricNameBenchmark.benchmarkName7Tags:·gc.count                         avgt    5    52.000            counts
MetricNameBenchmark.benchmarkName7Tags:·gc.time                          avgt    5    28.000                ms

After (13 tags):

Benchmark                                                                 Mode  Cnt     Score     Error   Units
MetricNameBenchmark.benchmarkName13Tags                                   avgt    5   406.467 ±  23.103   ns/op
MetricNameBenchmark.benchmarkName13Tags:·gc.alloc.rate                    avgt    5  1862.579 ± 109.546  MB/sec
MetricNameBenchmark.benchmarkName13Tags:·gc.alloc.rate.norm               avgt    5  1192.125 ±   0.019    B/op
MetricNameBenchmark.benchmarkName13Tags:·gc.churn.G1_Eden_Space           avgt    5  1876.116 ± 268.346  MB/sec
MetricNameBenchmark.benchmarkName13Tags:·gc.churn.G1_Eden_Space.norm      avgt    5  1200.742 ± 147.690    B/op
MetricNameBenchmark.benchmarkName13Tags:·gc.churn.G1_Survivor_Space       avgt    5     0.008 ±   0.008  MB/sec
MetricNameBenchmark.benchmarkName13Tags:·gc.churn.G1_Survivor_Space.norm  avgt    5     0.005 ±   0.005    B/op
MetricNameBenchmark.benchmarkName13Tags:·gc.count                         avgt    5    61.000            counts
MetricNameBenchmark.benchmarkName13Tags:·gc.time                          avgt    5    36.000                ms

Before (13 tags):

Benchmark                                                                 Mode  Cnt     Score     Error   Units
MetricNameBenchmark.benchmarkName13Tags                                   avgt    5   457.597 ±  16.235   ns/op
MetricNameBenchmark.benchmarkName13Tags:·gc.alloc.rate                    avgt    5  1497.065 ±  49.625  MB/sec
MetricNameBenchmark.benchmarkName13Tags:·gc.alloc.rate.norm               avgt    5  1080.119 ±   0.022    B/op
MetricNameBenchmark.benchmarkName13Tags:·gc.churn.G1_Eden_Space           avgt    5  1499.381 ± 261.050  MB/sec
MetricNameBenchmark.benchmarkName13Tags:·gc.churn.G1_Eden_Space.norm      avgt    5  1081.760 ± 181.054    B/op
MetricNameBenchmark.benchmarkName13Tags:·gc.churn.G1_Survivor_Space       avgt    5     0.007 ±   0.011  MB/sec
MetricNameBenchmark.benchmarkName13Tags:·gc.churn.G1_Survivor_Space.norm  avgt    5     0.005 ±   0.008    B/op
MetricNameBenchmark.benchmarkName13Tags:·gc.count                         avgt    5    51.000            counts
MetricNameBenchmark.benchmarkName13Tags:·gc.time                          avgt    5    27.000                ms

@carterkozak carterkozak marked this pull request as ready for review March 2, 2022 02:57
@Nullable
private String safeName;

private TagMap tagMap = TagMap.EMPTY;
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Wondering if it is worth keeping mutable Map<String, String> tagMap = new HashMap<>(); in builder and doing the final copy in build().

In the common cases of say 4 tags we would have 4 expansions & copies with immutable TagMap, but just one 1 expansion & copy with mutable builder. Probably nets out about the same, but might test out in the morning.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I initially tried this, although I only tested using the original three-tags case. Performance changed from ~142 ns/op down to ~138 ns/op, roughly equivalent to the original ImmutableSortedMap.naturalOrder().

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think this is good to go as is. I ran a quick test locally on JDK 11.0.13, OpenJDK 64-Bit Server VM, 11.0.13+8-LTS with 16 core Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz.

Builder using TagMap:

Benchmark                                                                 Mode  Cnt     Score      Error   Units
MetricNameBenchmark.benchmarkName13Tags                                   avgt    5  1096.259 ±   52.889   ns/op
MetricNameBenchmark.benchmarkName13Tags:·gc.alloc.rate                    avgt    5   691.103 ±   32.862  MB/sec
MetricNameBenchmark.benchmarkName13Tags:·gc.alloc.rate.norm               avgt    5  1192.000 ±    0.001    B/op
MetricNameBenchmark.benchmarkName13Tags:·gc.churn.G1_Eden_Space           avgt    5   680.688 ±  650.573  MB/sec
MetricNameBenchmark.benchmarkName13Tags:·gc.churn.G1_Eden_Space.norm      avgt    5  1171.395 ± 1086.287    B/op
MetricNameBenchmark.benchmarkName13Tags:·gc.churn.G1_Old_Gen              avgt    5     0.009 ±    0.079  MB/sec
MetricNameBenchmark.benchmarkName13Tags:·gc.churn.G1_Old_Gen.norm         avgt    5     0.016 ±    0.134    B/op
MetricNameBenchmark.benchmarkName13Tags:·gc.churn.G1_Survivor_Space       avgt    5     0.800 ±    2.811  MB/sec
MetricNameBenchmark.benchmarkName13Tags:·gc.churn.G1_Survivor_Space.norm  avgt    5     1.387 ±    4.878    B/op
MetricNameBenchmark.benchmarkName13Tags:·gc.count                         avgt    5     9.000             counts
MetricNameBenchmark.benchmarkName13Tags:·gc.time                          avgt    5    19.000                 ms
MetricNameBenchmark.benchmarkName3Tags                                    avgt    5   110.109 ±    4.138   ns/op
MetricNameBenchmark.benchmarkName3Tags:·gc.alloc.rate                     avgt    5   969.659 ±   35.967  MB/sec
MetricNameBenchmark.benchmarkName3Tags:·gc.alloc.rate.norm                avgt    5   168.000 ±    0.001    B/op
MetricNameBenchmark.benchmarkName3Tags:·gc.churn.G1_Eden_Space            avgt    5   909.846 ±  802.157  MB/sec
MetricNameBenchmark.benchmarkName3Tags:·gc.churn.G1_Eden_Space.norm       avgt    5   157.790 ±  142.323    B/op
MetricNameBenchmark.benchmarkName3Tags:·gc.churn.G1_Old_Gen               avgt    5     0.005 ±    0.031  MB/sec
MetricNameBenchmark.benchmarkName3Tags:·gc.churn.G1_Old_Gen.norm          avgt    5     0.001 ±    0.006    B/op
MetricNameBenchmark.benchmarkName3Tags:·gc.churn.G1_Survivor_Space        avgt    5     0.533 ±    4.590  MB/sec
MetricNameBenchmark.benchmarkName3Tags:·gc.churn.G1_Survivor_Space.norm   avgt    5     0.094 ±    0.808    B/op
MetricNameBenchmark.benchmarkName3Tags:·gc.count                          avgt    5    12.000             counts
MetricNameBenchmark.benchmarkName3Tags:·gc.time                           avgt    5    15.000                 ms
MetricNameBenchmark.benchmarkName7Tags                                    avgt    5   341.880 ±    3.927   ns/op
MetricNameBenchmark.benchmarkName7Tags:·gc.alloc.rate                     avgt    5   877.358 ±   10.247  MB/sec
MetricNameBenchmark.benchmarkName7Tags:·gc.alloc.rate.norm                avgt    5   472.000 ±    0.001    B/op
MetricNameBenchmark.benchmarkName7Tags:·gc.churn.G1_Eden_Space            avgt    5   909.056 ±  795.569  MB/sec
MetricNameBenchmark.benchmarkName7Tags:·gc.churn.G1_Eden_Space.norm       avgt    5   488.978 ±  426.224    B/op
MetricNameBenchmark.benchmarkName7Tags:·gc.churn.G1_Old_Gen               avgt    5     0.006 ±    0.032  MB/sec
MetricNameBenchmark.benchmarkName7Tags:·gc.churn.G1_Old_Gen.norm          avgt    5     0.003 ±    0.017    B/op
MetricNameBenchmark.benchmarkName7Tags:·gc.churn.G1_Survivor_Space        avgt    5     0.800 ±    4.589  MB/sec
MetricNameBenchmark.benchmarkName7Tags:·gc.churn.G1_Survivor_Space.norm   avgt    5     0.431 ±    2.476    B/op
MetricNameBenchmark.benchmarkName7Tags:·gc.count                          avgt    5    12.000             counts
MetricNameBenchmark.benchmarkName7Tags:·gc.time                           avgt    5    19.000                 ms

Builder using HashMap:

Benchmark                                                                 Mode  Cnt     Score      Error   Units
MetricNameBenchmark.benchmarkName13Tags                                   avgt    5  1102.731 ±   55.355   ns/op
MetricNameBenchmark.benchmarkName13Tags:·gc.alloc.rate                    avgt    5   562.526 ±   28.167  MB/sec
MetricNameBenchmark.benchmarkName13Tags:·gc.alloc.rate.norm               avgt    5   976.000 ±    0.001    B/op
MetricNameBenchmark.benchmarkName13Tags:·gc.churn.G1_Eden_Space           avgt    5   603.632 ±  796.288  MB/sec
MetricNameBenchmark.benchmarkName13Tags:·gc.churn.G1_Eden_Space.norm      avgt    5  1048.448 ± 1394.980    B/op
MetricNameBenchmark.benchmarkName13Tags:·gc.churn.G1_Survivor_Space       avgt    5     0.267 ±    2.295  MB/sec
MetricNameBenchmark.benchmarkName13Tags:·gc.churn.G1_Survivor_Space.norm  avgt    5     0.470 ±    4.048    B/op
MetricNameBenchmark.benchmarkName13Tags:·gc.count                         avgt    5     8.000             counts
MetricNameBenchmark.benchmarkName13Tags:·gc.time                          avgt    5    21.000                 ms
MetricNameBenchmark.benchmarkName3Tags                                    avgt    5   225.453 ±    8.105   ns/op
MetricNameBenchmark.benchmarkName3Tags:·gc.alloc.rate                     avgt    5  1105.089 ±   39.260  MB/sec
MetricNameBenchmark.benchmarkName3Tags:·gc.alloc.rate.norm                avgt    5   392.000 ±    0.001    B/op
MetricNameBenchmark.benchmarkName3Tags:·gc.churn.G1_Eden_Space            avgt    5  1138.591 ±    7.194  MB/sec
MetricNameBenchmark.benchmarkName3Tags:·gc.churn.G1_Eden_Space.norm       avgt    5   403.913 ±   15.075    B/op
MetricNameBenchmark.benchmarkName3Tags:·gc.churn.G1_Old_Gen               avgt    5     0.013 ±    0.067  MB/sec
MetricNameBenchmark.benchmarkName3Tags:·gc.churn.G1_Old_Gen.norm          avgt    5     0.004 ±    0.024    B/op
MetricNameBenchmark.benchmarkName3Tags:·gc.churn.G1_Survivor_Space        avgt    5     0.533 ±    4.589  MB/sec
MetricNameBenchmark.benchmarkName3Tags:·gc.churn.G1_Survivor_Space.norm   avgt    5     0.189 ±    1.624    B/op
MetricNameBenchmark.benchmarkName3Tags:·gc.count                          avgt    5    15.000             counts
MetricNameBenchmark.benchmarkName3Tags:·gc.time                           avgt    5    15.000                 ms
MetricNameBenchmark.benchmarkName7Tags                                    avgt    5   474.985 ±   20.967   ns/op
MetricNameBenchmark.benchmarkName7Tags:·gc.alloc.rate                     avgt    5   760.064 ±   33.249  MB/sec
MetricNameBenchmark.benchmarkName7Tags:·gc.alloc.rate.norm                avgt    5   568.000 ±    0.001    B/op
MetricNameBenchmark.benchmarkName7Tags:·gc.churn.G1_Eden_Space            avgt    5   756.664 ±   10.632  MB/sec
MetricNameBenchmark.benchmarkName7Tags:·gc.churn.G1_Eden_Space.norm       avgt    5   565.509 ±   22.428    B/op
MetricNameBenchmark.benchmarkName7Tags:·gc.churn.G1_Old_Gen               avgt    5     0.009 ±    0.059  MB/sec
MetricNameBenchmark.benchmarkName7Tags:·gc.churn.G1_Old_Gen.norm          avgt    5     0.006 ±    0.044    B/op
MetricNameBenchmark.benchmarkName7Tags:·gc.churn.G1_Survivor_Space        avgt    5     0.800 ±    4.589  MB/sec
MetricNameBenchmark.benchmarkName7Tags:·gc.churn.G1_Survivor_Space.norm   avgt    5     0.603 ±    3.452    B/op
MetricNameBenchmark.benchmarkName7Tags:·gc.count                          avgt    5    10.000             counts
MetricNameBenchmark.benchmarkName7Tags:·gc.time                           avgt    5    19.000                 ms

@policy-bot policy-bot bot requested a review from jkozlowski March 2, 2022 14:29
@carterkozak
Copy link
Contributor Author

I've rerun benchmarks on an x86_64 linux system (xeon W-2175) with azul zulu 17.0.2

The copy-on-write approach does more allocation in nontrivial cases, but creation throughput is better despite this.

After:

Benchmark                                                                 Mode  Cnt     Score     Error   Units
MetricNameBenchmark.benchmarkName13Tags                                   avgt    5   738.984 ± 110.909   ns/op
MetricNameBenchmark.benchmarkName13Tags:·gc.alloc.rate                    avgt    5  1025.764 ± 147.823  MB/sec
MetricNameBenchmark.benchmarkName13Tags:·gc.alloc.rate.norm               avgt    5  1192.056 ±   0.066    B/op
MetricNameBenchmark.benchmarkName13Tags:·gc.churn.G1_Eden_Space           avgt    5  1024.874 ± 831.156  MB/sec
MetricNameBenchmark.benchmarkName13Tags:·gc.churn.G1_Eden_Space.norm      avgt    5  1186.114 ± 838.651    B/op
MetricNameBenchmark.benchmarkName13Tags:·gc.churn.G1_Survivor_Space       avgt    5     0.330 ±   2.693  MB/sec
MetricNameBenchmark.benchmarkName13Tags:·gc.churn.G1_Survivor_Space.norm  avgt    5     0.375 ±   3.062    B/op
MetricNameBenchmark.benchmarkName13Tags:·gc.count                         avgt    5    13.000            counts
MetricNameBenchmark.benchmarkName13Tags:·gc.time                          avgt    5    20.000                ms
MetricNameBenchmark.benchmarkName3Tags                                    avgt    5    70.086 ±   3.679   ns/op
MetricNameBenchmark.benchmarkName3Tags:·gc.alloc.rate                     avgt    5  1522.875 ±  80.512  MB/sec
MetricNameBenchmark.benchmarkName3Tags:·gc.alloc.rate.norm                avgt    5   168.007 ±   0.001    B/op
MetricNameBenchmark.benchmarkName3Tags:·gc.churn.G1_Eden_Space            avgt    5  1576.621 ±   0.890  MB/sec
MetricNameBenchmark.benchmarkName3Tags:·gc.churn.G1_Eden_Space.norm       avgt    5   173.963 ±   9.156    B/op
MetricNameBenchmark.benchmarkName3Tags:·gc.churn.G1_Survivor_Space        avgt    5     0.012 ±   0.070  MB/sec
MetricNameBenchmark.benchmarkName3Tags:·gc.churn.G1_Survivor_Space.norm   avgt    5     0.001 ±   0.008    B/op
MetricNameBenchmark.benchmarkName3Tags:·gc.count                          avgt    5    20.000            counts
MetricNameBenchmark.benchmarkName3Tags:·gc.time                           avgt    5    23.000                ms
MetricNameBenchmark.benchmarkName7Tags                                    avgt    5   291.180 ±  18.506   ns/op
MetricNameBenchmark.benchmarkName7Tags:·gc.alloc.rate                     avgt    5  1030.044 ±  65.133  MB/sec
MetricNameBenchmark.benchmarkName7Tags:·gc.alloc.rate.norm                avgt    5   472.022 ±   0.014    B/op
MetricNameBenchmark.benchmarkName7Tags:·gc.churn.G1_Eden_Space            avgt    5  1024.862 ± 831.075  MB/sec
MetricNameBenchmark.benchmarkName7Tags:·gc.churn.G1_Eden_Space.norm       avgt    5   469.597 ± 379.062    B/op
MetricNameBenchmark.benchmarkName7Tags:·gc.churn.G1_Survivor_Space        avgt    5     0.328 ±   2.683  MB/sec
MetricNameBenchmark.benchmarkName7Tags:·gc.churn.G1_Survivor_Space.norm   avgt    5     0.149 ±   1.218    B/op
MetricNameBenchmark.benchmarkName7Tags:·gc.count                          avgt    5    13.000            counts
MetricNameBenchmark.benchmarkName7Tags:·gc.time                           avgt    5    17.000                ms

After, using a HashMap in the builder

As described in #1373 (comment)

Benchmark                                                                 Mode  Cnt     Score      Error   Units
MetricNameBenchmark.benchmarkName13Tags                                   avgt    5   892.600 ±   75.416   ns/op
MetricNameBenchmark.benchmarkName13Tags:·gc.alloc.rate                    avgt    5   694.911 ±   56.857  MB/sec
MetricNameBenchmark.benchmarkName13Tags:·gc.alloc.rate.norm               avgt    5   976.049 ±    0.079    B/op
MetricNameBenchmark.benchmarkName13Tags:·gc.churn.G1_Eden_Space           avgt    5   709.428 ±  678.502  MB/sec
MetricNameBenchmark.benchmarkName13Tags:·gc.churn.G1_Eden_Space.norm      avgt    5   998.128 ±  974.470    B/op
MetricNameBenchmark.benchmarkName13Tags:·gc.churn.G1_Survivor_Space       avgt    5     0.334 ±    2.638  MB/sec
MetricNameBenchmark.benchmarkName13Tags:·gc.churn.G1_Survivor_Space.norm  avgt    5     0.485 ±    3.851    B/op
MetricNameBenchmark.benchmarkName13Tags:·gc.count                         avgt    5     9.000             counts
MetricNameBenchmark.benchmarkName13Tags:·gc.time                          avgt    5    19.000                 ms
MetricNameBenchmark.benchmarkName3Tags                                    avgt    5   144.243 ±    9.105   ns/op
MetricNameBenchmark.benchmarkName3Tags:·gc.alloc.rate                     avgt    5  1726.813 ±  108.674  MB/sec
MetricNameBenchmark.benchmarkName3Tags:·gc.alloc.rate.norm                avgt    5   392.013 ±    0.008    B/op
MetricNameBenchmark.benchmarkName3Tags:·gc.churn.G1_Eden_Space            avgt    5  1757.179 ± 1090.386  MB/sec
MetricNameBenchmark.benchmarkName3Tags:·gc.churn.G1_Eden_Space.norm       avgt    5   399.074 ±  251.618    B/op
MetricNameBenchmark.benchmarkName3Tags:·gc.churn.G1_Survivor_Space        avgt    5     0.012 ±    0.064  MB/sec
MetricNameBenchmark.benchmarkName3Tags:·gc.churn.G1_Survivor_Space.norm   avgt    5     0.003 ±    0.015    B/op
MetricNameBenchmark.benchmarkName3Tags:·gc.count                          avgt    5    17.000             counts
MetricNameBenchmark.benchmarkName3Tags:·gc.time                           avgt    5    20.000                 ms
MetricNameBenchmark.benchmarkName7Tags                                    avgt    5   321.950 ±   52.668   ns/op
MetricNameBenchmark.benchmarkName7Tags:·gc.alloc.rate                     avgt    5  1122.221 ±  173.390  MB/sec
MetricNameBenchmark.benchmarkName7Tags:·gc.alloc.rate.norm                avgt    5   568.024 ±    0.016    B/op
MetricNameBenchmark.benchmarkName7Tags:·gc.churn.G1_Eden_Space            avgt    5  1103.642 ±  679.241  MB/sec
MetricNameBenchmark.benchmarkName7Tags:·gc.churn.G1_Eden_Space.norm       avgt    5   560.127 ±  374.172    B/op
MetricNameBenchmark.benchmarkName7Tags:·gc.churn.G1_Survivor_Space        avgt    5     0.035 ±    0.219  MB/sec
MetricNameBenchmark.benchmarkName7Tags:·gc.churn.G1_Survivor_Space.norm   avgt    5     0.018 ±    0.109    B/op
MetricNameBenchmark.benchmarkName7Tags:·gc.count                          avgt    5    14.000             counts
MetricNameBenchmark.benchmarkName7Tags:·gc.time                           avgt    5    17.000                 ms

Before:

Benchmark                                                                 Mode  Cnt     Score      Error   Units
MetricNameBenchmark.benchmarkName13Tags                                   avgt    5   838.357 ±   65.537   ns/op
MetricNameBenchmark.benchmarkName13Tags:·gc.alloc.rate                    avgt    5   818.646 ±   64.085  MB/sec
MetricNameBenchmark.benchmarkName13Tags:·gc.alloc.rate.norm               avgt    5  1080.055 ±    0.056    B/op
MetricNameBenchmark.benchmarkName13Tags:·gc.churn.G1_Eden_Space           avgt    5   867.028 ±  678.099  MB/sec
MetricNameBenchmark.benchmarkName13Tags:·gc.churn.G1_Eden_Space.norm      avgt    5  1142.286 ±  838.105    B/op
MetricNameBenchmark.benchmarkName13Tags:·gc.churn.G1_Survivor_Space       avgt    5     0.337 ±    2.426  MB/sec
MetricNameBenchmark.benchmarkName13Tags:·gc.churn.G1_Survivor_Space.norm  avgt    5     0.455 ±    3.283    B/op
MetricNameBenchmark.benchmarkName13Tags:·gc.count                         avgt    5    11.000             counts
MetricNameBenchmark.benchmarkName13Tags:·gc.time                          avgt    5    19.000                 ms
MetricNameBenchmark.benchmarkName3Tags                                    avgt    5   146.981 ±   18.254   ns/op
MetricNameBenchmark.benchmarkName3Tags:·gc.alloc.rate                     avgt    5  1937.857 ±  233.008  MB/sec
MetricNameBenchmark.benchmarkName3Tags:·gc.alloc.rate.norm                avgt    5   448.014 ±    0.009    B/op
MetricNameBenchmark.benchmarkName3Tags:·gc.churn.G1_Eden_Space            avgt    5  1936.617 ± 1135.326  MB/sec
MetricNameBenchmark.benchmarkName3Tags:·gc.churn.G1_Eden_Space.norm       avgt    5   448.762 ±  288.150    B/op
MetricNameBenchmark.benchmarkName3Tags:·gc.churn.G1_Survivor_Space        avgt    5     0.011 ±    0.064  MB/sec
MetricNameBenchmark.benchmarkName3Tags:·gc.churn.G1_Survivor_Space.norm   avgt    5     0.003 ±    0.014    B/op
MetricNameBenchmark.benchmarkName3Tags:·gc.count                          avgt    5    18.000             counts
MetricNameBenchmark.benchmarkName3Tags:·gc.time                           avgt    5    21.000                 ms
MetricNameBenchmark.benchmarkName7Tags                                    avgt    5   391.906 ±   48.613   ns/op
MetricNameBenchmark.benchmarkName7Tags:·gc.alloc.rate                     avgt    5  1064.238 ±  128.731  MB/sec
MetricNameBenchmark.benchmarkName7Tags:·gc.alloc.rate.norm                avgt    5   656.030 ±    0.038    B/op
MetricNameBenchmark.benchmarkName7Tags:·gc.churn.G1_Eden_Space            avgt    5  1024.812 ±  831.336  MB/sec
MetricNameBenchmark.benchmarkName7Tags:·gc.churn.G1_Eden_Space.norm       avgt    5   632.999 ±  535.816    B/op
MetricNameBenchmark.benchmarkName7Tags:·gc.churn.G1_Survivor_Space        avgt    5     0.337 ±    2.808  MB/sec
MetricNameBenchmark.benchmarkName7Tags:·gc.churn.G1_Survivor_Space.norm   avgt    5     0.206 ±    1.716    B/op
MetricNameBenchmark.benchmarkName7Tags:·gc.count                          avgt    5    13.000             counts
MetricNameBenchmark.benchmarkName7Tags:·gc.time                           avgt    5    17.000                 ms

@bulldozer-bot bulldozer-bot bot merged commit b382a75 into develop Mar 2, 2022
@bulldozer-bot bulldozer-bot bot deleted the ckozak/metricname_optimization branch March 2, 2022 15:41
@svc-autorelease
Copy link
Collaborator

Released 0.42.0

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants