diff --git a/opentelemetry-appender-tracing/benches/logs.rs b/opentelemetry-appender-tracing/benches/logs.rs index 8fabcc7876..7f832c08c6 100644 --- a/opentelemetry-appender-tracing/benches/logs.rs +++ b/opentelemetry-appender-tracing/benches/logs.rs @@ -10,7 +10,7 @@ | noop_layer_disabled | 12 ns | | noop_layer_enabled | 25 ns | | ot_layer_disabled | 19 ns | - | ot_layer_enabled | 371 ns | + | ot_layer_enabled | 305 ns | */ use async_trait::async_trait; diff --git a/opentelemetry-sdk/src/logs/log_emitter.rs b/opentelemetry-sdk/src/logs/log_emitter.rs index 22f5824b3a..c26b4f3af7 100644 --- a/opentelemetry-sdk/src/logs/log_emitter.rs +++ b/opentelemetry-sdk/src/logs/log_emitter.rs @@ -40,6 +40,7 @@ pub struct LoggerProvider { /// Default logger name if empty string is provided. const DEFAULT_COMPONENT_NAME: &str = "rust.opentelemetry.io/sdk/logger"; +const PREALLOCATED_ATTRIBUTE_CAPACITY: usize = 8; impl opentelemetry::logs::LoggerProvider for LoggerProvider { type Logger = Logger; @@ -246,7 +247,11 @@ impl opentelemetry::logs::Logger for Logger { type LogRecord = LogRecord; fn create_log_record(&self) -> Self::LogRecord { - LogRecord::default() + // Reserve attributes memory for perf optimization. This may change in future. + LogRecord { + attributes: Some(Vec::with_capacity(PREALLOCATED_ATTRIBUTE_CAPACITY)), + ..Default::default() + } } /// Emit a `LogRecord`. diff --git a/stress/src/logs.rs b/stress/src/logs.rs index e973cc71a4..caba1eb1cd 100644 --- a/stress/src/logs.rs +++ b/stress/src/logs.rs @@ -3,7 +3,7 @@ OS: Ubuntu 22.04.3 LTS (5.15.146.1-microsoft-standard-WSL2) Hardware: AMD EPYC 7763 64-Core Processor - 2.44 GHz, 16vCPUs, RAM: 64.0 GB - 53 M/sec + 69 M/sec */ use opentelemetry_appender_tracing::layer;