From da365a2d23139bd255046ef08fe13a441059835a Mon Sep 17 00:00:00 2001 From: Harold Dost Date: Fri, 9 Jun 2023 10:36:50 +0200 Subject: [PATCH] Use faster Rng in RandomIdGenerator Represents a minimum a 11%-22% improvement in relevant benchmarks. Fixes #808 --- opentelemetry-sdk/Cargo.toml | 3 ++- opentelemetry-sdk/src/trace/id_generator/mod.rs | 5 +++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/opentelemetry-sdk/Cargo.toml b/opentelemetry-sdk/Cargo.toml index 70e9961b5cb..63aaf573acf 100644 --- a/opentelemetry-sdk/Cargo.toml +++ b/opentelemetry-sdk/Cargo.toml @@ -22,6 +22,7 @@ once_cell = "1.10" ordered-float = "3.4.0" percent-encoding = { version = "2.0", optional = true } rand = { version = "0.8", default-features = false, features = ["std", "std_rng"], optional = true } +rand_pcg = { version = "0.3", default-features = false, optional = true } regex = { version = "1.0", optional = true } serde = { version = "1.0", features = ["derive", "rc"], optional = true } serde_json = { version = "1", optional = true } @@ -41,7 +42,7 @@ pprof = { version = "0.11.1", features = ["flamegraph", "criterion"] } [features] default = ["trace"] -trace = ["opentelemetry_api/trace", "crossbeam-channel", "rand", "async-trait", "percent-encoding"] +trace = ["opentelemetry_api/trace", "crossbeam-channel", "rand", "rand_pcg", "async-trait", "percent-encoding"] jaeger_remote_sampler = ["trace", "opentelemetry-http", "http", "serde", "serde_json", "url"] logs = ["opentelemetry_api/logs", "crossbeam-channel", "async-trait", "serde_json"] metrics = ["opentelemetry_api/metrics", "regex", "async-trait"] diff --git a/opentelemetry-sdk/src/trace/id_generator/mod.rs b/opentelemetry-sdk/src/trace/id_generator/mod.rs index cf99b197cf8..5a788837eb7 100644 --- a/opentelemetry-sdk/src/trace/id_generator/mod.rs +++ b/opentelemetry-sdk/src/trace/id_generator/mod.rs @@ -2,7 +2,8 @@ pub(super) mod aws; use opentelemetry_api::trace::{SpanId, TraceId}; -use rand::{rngs, Rng}; +use rand::{thread_rng, Rng, SeedableRng}; +use rand_pcg::Pcg64Mcg; use std::cell::RefCell; use std::fmt; @@ -35,5 +36,5 @@ impl IdGenerator for RandomIdGenerator { thread_local! { /// Store random number generator for each thread - static CURRENT_RNG: RefCell = RefCell::new(rngs::ThreadRng::default()); + static CURRENT_RNG: RefCell = RefCell::new(Pcg64Mcg::from_rng(thread_rng()).unwrap()); }