12 releases

0.0.13 Feb 11, 2024
0.0.12 Feb 10, 2024

#58 in Profiling

Download history 177/week @ 2024-02-01 237/week @ 2024-02-08 306/week @ 2024-02-15

720 downloads per month

MIT/Apache

145KB
2K SLoC

measured

A better metrics crate

docs

Benchmark results

The benchmark runs on multiple threads a simple counter increment, with various labels, and then samples/encodes the values into the Prometheus text format. This crate outperforms both metrics and prometheus when it comes to both speed and allocations. The prometheus_client crate shares some goals to this library and performs well, but still not as fast.

Counters

The fixed_cardinality group has only 2 label pairs and 18 distinct label groups and runs 20000 times per thread. The high_cardinality group has 3 label pairs and 2,000 distinct label groups per thread and runs 2000 times per thread.

Time in both groups also includes text encoding

The test runs on the max (N) threads for the CPU, and all label groups are selected at random (repeatable) with each thread having a unique sequence

Ryzen 9 7950X (32 threads):

Timer precision: 2.22 µs
counters                 fastest       │ slowest       │ median        │ mean          │ samples │ iters
├─ fixed_cardinality                   │               │               │               │         │
│  ├─ measured           3.871 ms      │ 6.786 ms      │ 5.879 ms      │ 5.754 ms      │ 5122560
│  │                     alloc:        │               │               │               │         │
│  │                       2222             │         │
│  │                       48 B        │ 48 B          │ 48 B          │ 48 B          │         │
│  │                     grow:         │               │               │               │         │
│  │                       7777             │         │
│  │                       1.656 KB1.656 KB1.656 KB1.656 KB      │         │
│  ├─ measured_sparse    4.355 ms      │ 9.268 ms      │ 6.879 ms      │ 6.904 ms      │ 5122560
│  │                     alloc:        │               │               │               │         │
│  │                       2222.007         │         │
│  │                       48 B        │ 48 B          │ 48 B          │ 48.59 B       │         │
│  │                     grow:         │               │               │               │         │
│  │                       7777             │         │
│  │                       1.656 KB1.656 KB1.656 KB1.656 KB      │         │
│  ├─ metrics            10.99 ms      │ 13.54 ms      │ 11.86 ms      │ 11.86 ms      │ 5122560
│  │                     alloc:        │               │               │               │         │
│  │                       40299402994029940299         │         │
│  │                       2.576 MB2.576 MB2.576 MB2.576 MB      │         │
│  │                     dealloc:      │               │               │               │         │
│  │                       40298402984029840298         │         │
│  │                       2.577 MB2.577 MB2.577 MB2.577 MB      │         │
│  │                     grow:         │               │               │               │         │
│  │                       61616161            │         │
│  │                       2.634 KB2.634 KB2.634 KB2.634 KB      │         │
│  ├─ prometheus         32.43 ms      │ 46.04 ms      │ 42.43 ms      │ 42.2 ms       │ 5122560
│  │                     alloc:        │               │               │               │         │
│  │                       118118118118.1         │         │
│  │                       6.589 KB6.589 KB6.589 KB6.602 KB      │         │
│  │                     dealloc:      │               │               │               │         │
│  │                       117117117117           │         │
│  │                       6.581 KB6.581 KB6.581 KB6.585 KB      │         │
│  │                     grow:         │               │               │               │         │
│  │                       7777.014         │         │
│  │                       1.656 KB1.656 KB1.656 KB1.656 KB      │         │
│  ╰─ prometheus_client  53.64 ms      │ 69.07 ms      │ 66.76 ms      │ 66.15 ms      │ 5122560
│                        alloc:        │               │               │               │         │
│                          1111.009         │         │
│                          8 B         │ 8 B           │ 10.4 B        │ 9.267 B       │         │
│                        dealloc:      │               │               │               │         │
│                          0000.001         │         │
│                          0 B         │ 0 B           │ 0 B           │ 0.829 B       │         │
│                        grow:         │               │               │               │         │
│                          7777             │         │
│                          1.656 KB1.656 KB1.656 KB1.656 KB      │         │
╰─ high_cardinality                    │               │               │               │         │
   ├─ measured           27.5 ms       │ 115.1 ms      │ 68.78 ms      │ 71.65 ms      │ 128256
   │                     alloc:        │               │               │               │         │
   │                       11722.51421.64         │         │
   │                       406.6 KB1.538 MB373.1 KB1.982 MB      │         │
   │                     dealloc:      │               │               │               │         │
   │                       10620.51219.02         │         │
   │                       189.5 KB770.9 KB189.2 KB129.5 KB      │         │
   │                     grow:         │               │               │               │         │
   │                       22.52424.524.15         │         │
   │                       5.113 MB27.26 MB13.63 MB18.7 MB       │         │
   ├─ metrics            228 ms        │ 1.592 s       │ 711.8 ms      │ 783 ms        │ 128256
   │                     alloc:        │               │               │               │         │
   │                       1356104548388527767533420460       │         │
   │                       69.93 MB281 MB141.3 MB167.4 MB      │         │
   │                     dealloc:      │               │               │               │         │
   │                       1352105547991227727653416572       │         │
   │                       74.57 MB300.3 MB151.1 MB179.6 MB      │         │
   │                     grow:         │               │               │               │         │
   │                       3054871243624628363774683        │         │
   │                       11.78 MB47.48 MB23.84 MB31.34 MB      │         │
   ├─ prometheus         654.7 ms      │ 2.787 s       │ 1.685 s       │ 1.65 s        │ 128256
   │                     alloc:        │               │               │               │         │
   │                       519361201024912690611261922       │         │
   │                       26.67 MB103.8 MB65.48 MB65.18 MB      │         │
   │                     dealloc:      │               │               │               │         │
   │                       505381199640912551231248315       │         │
   │                       26.2 MB103.3 MB65.01 MB64.69 MB      │         │
   │                     grow:         │               │               │               │         │
   │                       3014299630102937          │         │
   │                       8.408 MB33.57 MB25.18 MB23.02 MB      │         │
   ╰─ prometheus_client  27.83 ms      │ 5.692 s       │ 5.275 s       │ 5.106 s       │ 128256
                         alloc:        │               │               │               │         │
                           2001492849454868          │         │
                           27.12 KB427.7 KB429.6 KB651.6 KB      │         │
                         dealloc:      │               │               │               │         │
                           2000294629502923          │         │
                           27.11 KB751.3 KB757.3 KB852.3 KB      │         │
                         grow:         │               │               │               │         │
                           19960.5970.5941.7         │         │
                           6.815 MB27.62 MB17.4 MB18.93 MB      │         │

Macbook Pro M2 Max (12 threads):

Timer precision: 41 ns
counters                 fastest       │ slowest       │ median        │ mean          │ samples │ iters
├─ fixed_cardinality                   │               │               │               │         │
│  ├─ measured           13.86 ms      │ 16.27 ms      │ 16.02 ms      │ 15.94 ms      │ 5042520
│  │                     alloc:        │               │               │               │         │
│  │                       0000.162         │         │
│  │                       0 B         │ 0 B           │ 0 B           │ 3.904 B       │         │
│  │                     grow:         │               │               │               │         │
│  │                       0000.569         │         │
│  │                       0 B         │ 0 B           │ 0 B           │ 134.7 B       │         │
│  ├─ measured_sparse    6.337 ms      │ 8.403 ms      │ 8.076 ms      │ 8.039 ms      │ 5042520
│  │                     alloc:        │               │               │               │         │
│  │                       0010.166         │         │
│  │                       0 B         │ 0 B           │ 24 B          │ 4 B           │         │
│  │                     grow:         │               │               │               │         │
│  │                       003.40.583         │         │
│  │                       0 B         │ 0 B           │ 828 B         │ 138 B         │         │
│  ├─ metrics            17.52 ms      │ 22.96 ms      │ 20.87 ms      │ 20.8 ms       │ 5042520
│  │                     alloc:        │               │               │               │         │
│  │                       0003358          │         │
│  │                       0 B         │ 0 B           │ 0 B           │ 214.7 KB      │         │
│  │                     dealloc:      │               │               │               │         │
│  │                       0003358          │         │
│  │                       0 B         │ 0 B           │ 0 B           │ 214.7 KB      │         │
│  │                     grow:         │               │               │               │         │
│  │                       0005.083         │         │
│  │                       0 B         │ 0 B           │ 0 B           │ 219.5 B       │         │
│  ├─ prometheus         75.22 ms      │ 81.62 ms      │ 80.89 ms      │ 80.58 ms      │ 5042520
│  │                     alloc:        │               │               │               │         │
│  │                       0009.833         │         │
│  │                       0 B         │ 0 B           │ 0 B           │ 549 B         │         │
│  │                     dealloc:      │               │               │               │         │
│  │                       0009.75          │         │
│  │                       0 B         │ 0 B           │ 0 B           │ 548.4 B       │         │
│  │                     grow:         │               │               │               │         │
│  │                       0000.583         │         │
│  │                       0 B         │ 0 B           │ 0 B           │ 138 B         │         │
│  ╰─ prometheus_client  73.34 ms      │ 77.37 ms      │ 76.32 ms      │ 76.19 ms      │ 5042520
│                        alloc:        │               │               │               │         │
│                          000.40.083         │         │
│                          0 B         │ 0 B           │ 4 B           │ 0.666 B       │         │
│                        grow:         │               │               │               │         │
│                          003.40.583         │         │
│                          0 B         │ 0 B           │ 828 B         │ 138 B         │         │
╰─ high_cardinality                    │               │               │               │         │
   ├─ measured           7.706 ms      │ 71.54 ms      │ 32.35 ms      │ 34.49 ms      │ 108216
   │                     alloc:        │               │               │               │         │
   │                       0000.666         │         │
   │                       0 B         │ 0 B           │ 0 B           │ 1.909 KB      │         │
   │                     dealloc:      │               │               │               │         │
   │                       0000.472         │         │
   │                       0 B         │ 0 B           │ 0 B           │ 801.4 B       │         │
   │                     grow:         │               │               │               │         │
   │                       0001.657         │         │
   │                       0 B         │ 0 B           │ 0 B           │ 1.293 MB      │         │
   ├─ metrics            90.01 ms      │ 1.045 s       │ 526.1 ms      │ 523.4 ms      │ 108216
   │                     alloc:        │               │               │               │         │
   │                       000197792        │         │
   │                       0 B         │ 0 B           │ 0 B           │ 8.963 MB      │         │
   │                     dealloc:      │               │               │               │         │
   │                       000197755        │         │
   │                       0 B         │ 0 B           │ 0 B           │ 9.689 MB      │         │
   │                     grow:         │               │               │               │         │
   │                       00044793         │         │
   │                       0 B         │ 0 B           │ 0 B           │ 1.943 MB      │         │
   ├─ prometheus         58.7 ms       │ 1 s           │ 398.3 ms      │ 442.5 ms      │ 108216
   │                     alloc:        │               │               │               │         │
   │                       01594124074606         │         │
   │                       0 B         │ 82.49 MB0 B           │ 3.859 MB      │         │
   │                     dealloc:      │               │               │               │         │
   │                       01594123074476         │         │
   │                       0 B         │ 82.49 MB0 B           │ 3.854 MB      │         │
   │                     grow:         │               │               │               │         │
   │                       021029.41         │         │
   │                       0 B         │ 33.55 MB0 B           │ 1.437 MB      │         │
   ╰─ prometheus_client  61.44 ms      │ 281.2 ms      │ 179.3 ms      │ 163.1 ms      │ 108216
                         alloc:        │               │               │               │         │
                           200100185.7         │         │
                           27.12 KB0 B           │ 0 B           │ 3.884 KB      │         │
                         dealloc:      │               │               │               │         │
                           200000167.1         │         │
                           27.11 KB0 B           │ 0 B           │ 2.995 KB      │         │
                         grow:         │               │               │               │         │
                           19001.657         │         │
                           6.815 MB0 B           │ 0 B           │ 1.293 MB      │         │

Histograms

The fixed_cardinality group has only 2 label pairs and 18 distinct label groups. The no_cardinality group has no label pairs and tests the timer mechanisms

The test runs on the max (N) threads for the CPU, and all label groups are selected at random (repeatable) with each thread having a unique sequence

Ryzen 9 7950X (32 threads):

Timer precision: 2.25 µs
histograms               fastest       │ slowest       │ median        │ mean          │ samples │ iters
├─ fixed_cardinality                   │               │               │               │         │
│  ├─ measured           9.143 ms      │ 11.6 ms       │ 10.64 ms      │ 10.61 ms      │ 5122560
│  │                     alloc:        │               │               │               │         │
│  │                       2.2222.029         │         │
│  │                       124.8 B     │ 48 B          │ 48 B          │ 64.32 B       │         │
│  │                     dealloc:      │               │               │               │         │
│  │                       0.2000.026         │         │
│  │                       153.6 B     │ 0 B           │ 0 B           │ 18.82 B       │         │
│  │                     grow:         │               │               │               │         │
│  │                       11.2111111.02         │         │
│  │                       26.69 KB26.61 KB26.61 KB26.62 KB      │         │
│  ├─ measured_sparse    10.03 ms      │ 11.95 ms      │ 10.82 ms      │ 10.79 ms      │ 5122560
│  │                     alloc:        │               │               │               │         │
│  │                       2222.021         │         │
│  │                       48 B        │ 48 B          │ 48 B          │ 56.39 B       │         │
│  │                     dealloc:      │               │               │               │         │
│  │                       0000.014         │         │
│  │                       0 B         │ 0 B           │ 0 B           │ 10.2 B        │         │
│  │                     grow:         │               │               │               │         │
│  │                       11111111.01         │         │
│  │                       26.61 KB26.61 KB26.61 KB26.62 KB      │         │
│  ├─ metrics            82.64 ms      │ 91.73 ms      │ 85.76 ms      │ 85.8 ms       │ 5122560
│  │                     alloc:        │               │               │               │         │
│  │                       41553415614148141709         │         │
│  │                       3.295 MB3.305 MB3.307 MB3.248 MB      │         │
│  │                     dealloc:      │               │               │               │         │
│  │                       41563414084146241708         │         │
│  │                       3.304 MB3.143 MB3.284 MB3.252 MB      │         │
│  │                     grow:         │               │               │               │         │
│  │                       94.695.685.2113.3         │         │
│  │                       28.43 KB28.55 KB27.84 KB29.96 KB      │         │
│  ├─ prometheus         45.52 ms      │ 54.23 ms      │ 50.21 ms      │ 49.9 ms       │ 5122560
│  │                     alloc:        │               │               │               │         │
│  │                       460460460460.1         │         │
│  │                       11.48 KB11.48 KB11.48 KB11.49 KB      │         │
│  │                     dealloc:      │               │               │               │         │
│  │                       459459459459           │         │
│  │                       11.65 KB11.65 KB11.64 KB11.65 KB      │         │
│  │                     grow:         │               │               │               │         │
│  │                       29292929.02         │         │
│  │                       26.79 KB26.78 KB26.77 KB26.78 KB      │         │
│  ╰─ prometheus_client  53.95 ms      │ 73.95 ms      │ 71.4 ms       │ 70.74 ms      │ 5122560
│                        alloc:        │               │               │               │         │
│                          1111.022         │         │
│                          8 B         │ 8 B           │ 8 B           │ 12.81 B       │         │
│                        dealloc:      │               │               │               │         │
│                          0000.007         │         │
│                          0 B         │ 0 B           │ 0 B           │ 5.029 B       │         │
│                        grow:         │               │               │               │         │
│                          11111111            │         │
│                          26.61 KB26.61 KB26.61 KB26.61 KB      │         │
╰─ no_cardinality                      │               │               │               │         │
   ├─ measured           144.7 ms      │ 156.4 ms      │ 147.8 ms      │ 148.5 ms      │ 5122560
   │                     alloc:        │               │               │               │         │
   │                       2222             │         │
   │                       48 B        │ 48 B          │ 48 B          │ 48.15 B       │         │
   │                     dealloc:      │               │               │               │         │
   │                       0000             │         │
   │                       0 B         │ 0 B           │ 0 B           │ 0.3 B         │         │
   │                     grow:         │               │               │               │         │
   │                       6666             │         │
   │                       824 B       │ 824 B         │ 824 B         │ 824.1 B       │         │
   ├─ metrics            233.1 ms      │ 248.4 ms      │ 236.2 ms      │ 236.6 ms      │ 5122560
   │                     alloc:        │               │               │               │         │
   │                       22013238692286821940         │         │
   │                       2.498 MB2.436 MB2.609 MB2.324 MB      │         │
   │                     dealloc:      │               │               │               │         │
   │                       21678256172289221939         │         │
   │                       2.154 MB4.288 MB2.658 MB2.327 MB      │         │
   │                     grow:         │               │               │               │         │
   │                       27.821399.836.45         │         │
   │                       2.375 KB16.2 KB7.757 KB3.025 KB      │         │
   ├─ prometheus         145.7 ms      │ 156.7 ms      │ 147 ms        │ 147.5 ms      │ 5122560
   │                     alloc:        │               │               │               │         │
   │                       30303030            │         │
   │                       2.049 KB2.049 KB2.049 KB2.049 KB      │         │
   │                     dealloc:      │               │               │               │         │
   │                       29292929            │         │
   │                       2.051 KB2.05 KB2.05 KB2.05 KB       │         │
   │                     grow:         │               │               │               │         │
   │                       7777             │         │
   │                       834 B       │ 833 B         │ 833.6 B       │ 833.4 B       │         │
   ╰─ prometheus_client  2.074 s       │ 2.149 s       │ 2.109 s       │ 2.11 s        │ 5122560
                         alloc:        │               │               │               │         │
                           1111             │         │
                           8 B         │ 8 B           │ 8 B           │ 8 B           │         │
                         grow:         │               │               │               │         │
                           6666             │         │
                           824 B       │ 824 B         │ 824 B         │ 824 B         │         │

Macbook Pro M2 Max (12 threads):

Timer precision: 41 ns
histograms               fastest       │ slowest       │ median        │ mean          │ samples │ iters
├─ fixed_cardinality                   │               │               │               │         │
│  ├─ measured           6.044 ms      │ 14.43 ms      │ 10.91 ms      │ 10.92 ms      │ 5042520
│  │                     alloc:        │               │               │               │         │
│  │                       0000.172         │         │
│  │                       0 B         │ 0 B           │ 0 B           │ 7.561 B       │         │
│  │                     dealloc:      │               │               │               │         │
│  │                       0000.009         │         │
│  │                       0 B         │ 0 B           │ 0 B           │ 3.657 B       │         │
│  │                     grow:         │               │               │               │         │
│  │                       0000.894         │         │
│  │                       0 B         │ 0 B           │ 0 B           │ 2.165 KB      │         │
│  ├─ measured_sparse    8.487 ms      │ 11.62 ms      │ 10.12 ms      │ 10.09 ms      │ 5042520
│  │                     alloc:        │               │               │               │         │
│  │                       0000.168         │         │
│  │                       0 B         │ 0 B           │ 0 B           │ 4.761 B       │         │
│  │                     dealloc:      │               │               │               │         │
│  │                       0000.001         │         │
│  │                       0 B         │ 0 B           │ 0 B           │ 0.761 B       │         │
│  │                     grow:         │               │               │               │         │
│  │                       0000.916         │         │
│  │                       0 B         │ 0 B           │ 0 B           │ 2.218 KB      │         │
│  ├─ metrics            20.01 ms      │ 29.88 ms      │ 23.19 ms      │ 23.31 ms      │ 5042520
│  │                     alloc:        │               │               │               │         │
│  │                       0003460          │         │
│  │                       0 B         │ 0 B           │ 0 B           │ 253.7 KB      │         │
│  │                     dealloc:      │               │               │               │         │
│  │                       0003459          │         │
│  │                       0 B         │ 0 B           │ 0 B           │ 253 KB        │         │
│  │                     grow:         │               │               │               │         │
│  │                       00010.1          │         │
│  │                       0 B         │ 0 B           │ 0 B           │ 2.517 KB      │         │
│  ├─ prometheus         59.25 ms      │ 76.23 ms      │ 75.31 ms      │ 74.65 ms      │ 5042520
│  │                     alloc:        │               │               │               │         │
│  │                       0460038.33         │         │
│  │                       0 B         │ 11.48 KB0 B           │ 957.3 B       │         │
│  │                     dealloc:      │               │               │               │         │
│  │                       0459038.25         │         │
│  │                       0 B         │ 11.65 KB0 B           │ 970.7 B       │         │
│  │                     grow:         │               │               │               │         │
│  │                       02902.416         │         │
│  │                       0 B         │ 26.79 KB0 B           │ 2.232 KB      │         │
│  ╰─ prometheus_client  71.87 ms      │ 74.84 ms      │ 74.18 ms      │ 74.07 ms      │ 5042520
│                        alloc:        │               │               │               │         │
│                          0000.083         │         │
│                          0 B         │ 0 B           │ 0 B           │ 0.666 B       │         │
│                        grow:         │               │               │               │         │
│                          0000.916         │         │
│                          0 B         │ 0 B           │ 0 B           │ 2.218 KB      │         │
╰─ no_cardinality                      │               │               │               │         │
   ├─ measured           86.05 ms      │ 92.41 ms      │ 91.69 ms      │ 91.5 ms       │ 5042520
   │                     alloc:        │               │               │               │         │
   │                       0000.169         │         │
   │                       0 B         │ 0 B           │ 0 B           │ 4.914 B       │         │
   │                     dealloc:      │               │               │               │         │
   │                       0000.002         │         │
   │                       0 B         │ 0 B           │ 0 B           │ 0.914 B       │         │
   │                     grow:         │               │               │               │         │
   │                       0000.5           │         │
   │                       0 B         │ 0 B           │ 0 B           │ 68.66 B       │         │
   ├─ metrics            109.1 ms      │ 165 ms        │ 160.9 ms      │ 156.4 ms      │ 5042520
   │                     alloc:        │               │               │               │         │
   │                       0001738          │         │
   │                       0 B         │ 0 B           │ 0 B           │ 91.02 KB      │         │
   │                     dealloc:      │               │               │               │         │
   │                       0001743          │         │
   │                       0 B         │ 0 B           │ 0 B           │ 96.31 KB      │         │
   │                     grow:         │               │               │               │         │
   │                       0003.892         │         │
   │                       0 B         │ 0 B           │ 0 B           │ 315 B         │         │
   ├─ prometheus         58.45 ms      │ 84.68 ms      │ 81.73 ms      │ 79.27 ms      │ 5042520
   │                     alloc:        │               │               │               │         │
   │                       0002.5           │         │
   │                       0 B         │ 0 B           │ 0 B           │ 170.7 B       │         │
   │                     dealloc:      │               │               │               │         │
   │                       0002.416         │         │
   │                       0 B         │ 0 B           │ 0 B           │ 170.9 B       │         │
   │                     grow:         │               │               │               │         │
   │                       0000.583         │         │
   │                       0 B         │ 0 B           │ 0 B           │ 69.5 B        │         │
   ╰─ prometheus_client  28.14 ms      │ 32.68 ms      │ 30.78 ms      │ 30.93 ms      │ 5042520
                         alloc:        │               │               │               │         │
                           0000.083         │         │
                           0 B         │ 0 B           │ 0 B           │ 0.666 B       │         │
                         grow:         │               │               │               │         │
                           0000.5           │         │
                           0 B         │ 0 B           │ 0 B           │ 68.66 B       │         │

Dependencies

~2.5–9.5MB
~65K SLoC