Skip to content

Commit 4e49b8f

Browse files
committed
Benchmarks and experiments using rapidhash instead of FNV
1 parent 2289dce commit 4e49b8f

File tree

3 files changed

+81
-1
lines changed

3 files changed

+81
-1
lines changed

Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ protobuf = { version = "^3.7.2", optional = true }
3232
memchr = "^2.3"
3333
reqwest = { version = "^0.12", features = ["blocking"], optional = true }
3434
thiserror = "^2.0"
35+
rapidhash = { version = "1.4.0" } # path = "../rapidhash"
3536

3637
[target.'cfg(target_os = "linux")'.dependencies]
3738
procfs = { version = "^0.17", optional = true, default-features = false }

benches/counter.rs

Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ use prometheus::{Counter, CounterVec, IntCounter, Opts};
1717
use std::collections::HashMap;
1818
use std::sync::{atomic, Arc};
1919
use std::thread;
20+
use rapidhash::RapidBuildHasher;
2021

2122
fn bench_counter_with_label_values(c: &mut Criterion) {
2223
let counter = CounterVec::new(
@@ -69,6 +70,78 @@ fn bench_counter_with_mapped_labels_fnv(c: &mut Criterion) {
6970
});
7071
}
7172

73+
fn bench_counter_with_mapped_labels_rapidhash(c: &mut Criterion) {
74+
let counter = CounterVec::new(
75+
Opts::new("benchmark_counter", "A counter to benchmark it."),
76+
&["one", "two", "three"],
77+
)
78+
.unwrap();
79+
80+
c.bench_function("counter_with_mapped_labels_rapidhash", |b| {
81+
b.iter(|| {
82+
let mut labels = HashMap::with_capacity_and_hasher(3, RapidBuildHasher::default());
83+
labels.insert("two", "zwei");
84+
labels.insert("one", "eins");
85+
labels.insert("three", "drei");
86+
counter.with(&black_box(labels)).inc();
87+
})
88+
});
89+
}
90+
91+
fn bench_counter_with_mapped_longer_labels(c: &mut Criterion) {
92+
let counter = CounterVec::new(
93+
Opts::new("benchmark_counter", "A counter to benchmark it."),
94+
&["longer_field_number_one", "longer_field_number_two", "longer_field_number_three"],
95+
)
96+
.unwrap();
97+
98+
c.bench_function("counter_with_mapped_longer_labels", |b| {
99+
b.iter(|| {
100+
let mut labels = HashMap::with_capacity(3);
101+
labels.insert("longer_field_number_two", "longer_field_number_zwei");
102+
labels.insert("longer_field_number_one", "longer_field_number_eins");
103+
labels.insert("longer_field_number_three", "longer_field_number_drei");
104+
counter.with(&black_box(labels)).inc();
105+
})
106+
});
107+
}
108+
109+
fn bench_counter_with_mapped_longer_labels_fnv(c: &mut Criterion) {
110+
let counter = CounterVec::new(
111+
Opts::new("benchmark_counter", "A counter to benchmark it."),
112+
&["longer_field_number_one", "longer_field_number_two", "longer_field_number_three"],
113+
)
114+
.unwrap();
115+
116+
c.bench_function("counter_with_mapped_longer_labels_fnv", |b| {
117+
b.iter(|| {
118+
let mut labels = HashMap::with_capacity_and_hasher(3, FnvBuildHasher::default());
119+
labels.insert("longer_field_number_two", "longer_field_number_zwei");
120+
labels.insert("longer_field_number_one", "longer_field_number_eins");
121+
labels.insert("longer_field_number_three", "longer_field_number_drei");
122+
counter.with(&black_box(labels)).inc();
123+
})
124+
});
125+
}
126+
127+
fn bench_counter_with_mapped_longer_labels_rapidhash(c: &mut Criterion) {
128+
let counter = CounterVec::new(
129+
Opts::new("benchmark_counter", "A counter to benchmark it."),
130+
&["longer_field_number_one", "longer_field_number_two", "longer_field_number_three"],
131+
)
132+
.unwrap();
133+
134+
c.bench_function("counter_with_mapped_longer_labels_rapidhash", |b| {
135+
b.iter(|| {
136+
let mut labels = HashMap::with_capacity_and_hasher(3, RapidBuildHasher::default());
137+
labels.insert("longer_field_number_two", "longer_field_number_zwei");
138+
labels.insert("longer_field_number_one", "longer_field_number_eins");
139+
labels.insert("longer_field_number_three", "longer_field_number_drei");
140+
counter.with(&black_box(labels)).inc();
141+
})
142+
});
143+
}
144+
72145
fn bench_counter_with_prepared_mapped_labels(c: &mut Criterion) {
73146
let counter = CounterVec::new(
74147
Opts::new("benchmark_counter", "A counter to benchmark it."),
@@ -216,6 +289,10 @@ criterion_group!(
216289
bench_counter_with_label_values_concurrent_write,
217290
bench_counter_with_mapped_labels,
218291
bench_counter_with_mapped_labels_fnv,
292+
bench_counter_with_mapped_labels_rapidhash,
293+
bench_counter_with_mapped_longer_labels,
294+
bench_counter_with_mapped_longer_labels_fnv,
295+
bench_counter_with_mapped_longer_labels_rapidhash,
219296
bench_counter_with_prepared_mapped_labels,
220297
bench_int_counter_no_labels,
221298
bench_int_counter_no_labels_concurrent_write,

src/vec.rs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,9 @@ use std::collections::HashMap;
55
use std::hash::{BuildHasher, Hasher};
66
use std::sync::Arc;
77

8-
use fnv::FnvHasher;
8+
// TODO: experimenting, alternating while benchmarking
9+
// use fnv::FnvHasher;
10+
use rapidhash::RapidHasher as FnvHasher;
911
use parking_lot::RwLock;
1012

1113
use crate::desc::{Desc, Describer};

0 commit comments

Comments
 (0)