Skip to content

Commit da365a2

Browse files
committed
Use faster Rng in RandomIdGenerator
Represents a minimum a 11%-22% improvement in relevant benchmarks. Fixes #808
1 parent 06d17f7 commit da365a2

File tree

2 files changed

+5
-3
lines changed

2 files changed

+5
-3
lines changed

opentelemetry-sdk/Cargo.toml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ once_cell = "1.10"
2222
ordered-float = "3.4.0"
2323
percent-encoding = { version = "2.0", optional = true }
2424
rand = { version = "0.8", default-features = false, features = ["std", "std_rng"], optional = true }
25+
rand_pcg = { version = "0.3", default-features = false, optional = true }
2526
regex = { version = "1.0", optional = true }
2627
serde = { version = "1.0", features = ["derive", "rc"], optional = true }
2728
serde_json = { version = "1", optional = true }
@@ -41,7 +42,7 @@ pprof = { version = "0.11.1", features = ["flamegraph", "criterion"] }
4142

4243
[features]
4344
default = ["trace"]
44-
trace = ["opentelemetry_api/trace", "crossbeam-channel", "rand", "async-trait", "percent-encoding"]
45+
trace = ["opentelemetry_api/trace", "crossbeam-channel", "rand", "rand_pcg", "async-trait", "percent-encoding"]
4546
jaeger_remote_sampler = ["trace", "opentelemetry-http", "http", "serde", "serde_json", "url"]
4647
logs = ["opentelemetry_api/logs", "crossbeam-channel", "async-trait", "serde_json"]
4748
metrics = ["opentelemetry_api/metrics", "regex", "async-trait"]

opentelemetry-sdk/src/trace/id_generator/mod.rs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,8 @@
22
pub(super) mod aws;
33

44
use opentelemetry_api::trace::{SpanId, TraceId};
5-
use rand::{rngs, Rng};
5+
use rand::{thread_rng, Rng, SeedableRng};
6+
use rand_pcg::Pcg64Mcg;
67
use std::cell::RefCell;
78
use std::fmt;
89

@@ -35,5 +36,5 @@ impl IdGenerator for RandomIdGenerator {
3536

3637
thread_local! {
3738
/// Store random number generator for each thread
38-
static CURRENT_RNG: RefCell<rngs::ThreadRng> = RefCell::new(rngs::ThreadRng::default());
39+
static CURRENT_RNG: RefCell<Pcg64Mcg> = RefCell::new(Pcg64Mcg::from_rng(thread_rng()).unwrap());
3940
}

0 commit comments

Comments
 (0)