From 89d4532a427d92d2fb7a576a03de93ded6fb04fd Mon Sep 17 00:00:00 2001 From: Lalit Date: Tue, 2 Jul 2024 17:28:26 -0700 Subject: [PATCH 1/6] add preallocated vector --- opentelemetry-sdk/src/logs/record.rs | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/opentelemetry-sdk/src/logs/record.rs b/opentelemetry-sdk/src/logs/record.rs index 3b79f10f7a..d75471b209 100644 --- a/opentelemetry-sdk/src/logs/record.rs +++ b/opentelemetry-sdk/src/logs/record.rs @@ -5,7 +5,9 @@ use opentelemetry::{ }; use std::{borrow::Cow, time::SystemTime}; -#[derive(Debug, Default, Clone)] +const PREALLOCATED_ATTRIBUTE_CAPACITY: usize = 8; + +#[derive(Debug, Clone)] #[non_exhaustive] /// LogRecord represents all data carried by a log record, and /// is provided to `LogExporter`s as input. @@ -37,6 +39,22 @@ pub struct LogRecord { pub attributes: Option>, } +impl Default for LogRecord { + fn default() -> Self { + LogRecord { + event_name: None, + target: None, + timestamp: None, + observed_timestamp: None, + trace_context: None, + severity_text: None, + severity_number: None, + body: None, + attributes: Vec::with_capacity(PREALLOCATED_ATTRIBUTE_CAPACITY), // Pre-allocate for perf optimization. This may change in future. + } + } +} + impl opentelemetry::logs::LogRecord for LogRecord { fn set_event_name(&mut self, name: T) where From 8708de1552b765d0617ecf8fdac759ee2471c2e7 Mon Sep 17 00:00:00 2001 From: Lalit Date: Tue, 2 Jul 2024 17:31:37 -0700 Subject: [PATCH 2/6] fix syntax --- opentelemetry-sdk/src/logs/record.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/opentelemetry-sdk/src/logs/record.rs b/opentelemetry-sdk/src/logs/record.rs index d75471b209..248296f8b9 100644 --- a/opentelemetry-sdk/src/logs/record.rs +++ b/opentelemetry-sdk/src/logs/record.rs @@ -50,7 +50,7 @@ impl Default for LogRecord { severity_text: None, severity_number: None, body: None, - attributes: Vec::with_capacity(PREALLOCATED_ATTRIBUTE_CAPACITY), // Pre-allocate for perf optimization. This may change in future. + attributes: Some(Vec::with_capacity(PREALLOCATED_ATTRIBUTE_CAPACITY)), // Pre-allocate for perf optimization. This may change in future. } } } From b74a1fd8095e2fbb8f16fa43aaab80067885bd15 Mon Sep 17 00:00:00 2001 From: Lalit Date: Tue, 2 Jul 2024 17:49:27 -0700 Subject: [PATCH 3/6] update benchmark result --- opentelemetry-appender-tracing/benches/logs.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/opentelemetry-appender-tracing/benches/logs.rs b/opentelemetry-appender-tracing/benches/logs.rs index f7ef4d94ad..865408a2ed 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 | 270 ns | */ use async_trait::async_trait; From ec5fadd5d338c363fcb18339c27f4b99dc782437 Mon Sep 17 00:00:00 2001 From: Lalit Date: Tue, 2 Jul 2024 23:19:32 -0700 Subject: [PATCH 4/6] override default while creating LogRecord --- opentelemetry-sdk/src/logs/log_emitter.rs | 7 ++++++- opentelemetry-sdk/src/logs/record.rs | 20 +------------------- 2 files changed, 7 insertions(+), 20 deletions(-) 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/opentelemetry-sdk/src/logs/record.rs b/opentelemetry-sdk/src/logs/record.rs index 248296f8b9..f4dff98043 100644 --- a/opentelemetry-sdk/src/logs/record.rs +++ b/opentelemetry-sdk/src/logs/record.rs @@ -5,9 +5,7 @@ use opentelemetry::{ }; use std::{borrow::Cow, time::SystemTime}; -const PREALLOCATED_ATTRIBUTE_CAPACITY: usize = 8; - -#[derive(Debug, Clone)] +#[derive(Debug, Clone, Default)] #[non_exhaustive] /// LogRecord represents all data carried by a log record, and /// is provided to `LogExporter`s as input. @@ -39,22 +37,6 @@ pub struct LogRecord { pub attributes: Option>, } -impl Default for LogRecord { - fn default() -> Self { - LogRecord { - event_name: None, - target: None, - timestamp: None, - observed_timestamp: None, - trace_context: None, - severity_text: None, - severity_number: None, - body: None, - attributes: Some(Vec::with_capacity(PREALLOCATED_ATTRIBUTE_CAPACITY)), // Pre-allocate for perf optimization. This may change in future. - } - } -} - impl opentelemetry::logs::LogRecord for LogRecord { fn set_event_name(&mut self, name: T) where From adb0b90b49f75520669f294aa021c3f3131e3277 Mon Sep 17 00:00:00 2001 From: Lalit Date: Tue, 2 Jul 2024 23:21:33 -0700 Subject: [PATCH 5/6] revert record --- opentelemetry-sdk/src/logs/record.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/opentelemetry-sdk/src/logs/record.rs b/opentelemetry-sdk/src/logs/record.rs index f4dff98043..3b79f10f7a 100644 --- a/opentelemetry-sdk/src/logs/record.rs +++ b/opentelemetry-sdk/src/logs/record.rs @@ -5,7 +5,7 @@ use opentelemetry::{ }; use std::{borrow::Cow, time::SystemTime}; -#[derive(Debug, Clone, Default)] +#[derive(Debug, Default, Clone)] #[non_exhaustive] /// LogRecord represents all data carried by a log record, and /// is provided to `LogExporter`s as input. From 27ea8c5ad0082543af551162593308c9e7d5d25f Mon Sep 17 00:00:00 2001 From: Lalit Kumar Bhasin Date: Wed, 3 Jul 2024 18:22:38 +0000 Subject: [PATCH 6/6] update stress results --- opentelemetry-appender-tracing/benches/logs.rs | 2 +- stress/src/logs.rs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/opentelemetry-appender-tracing/benches/logs.rs b/opentelemetry-appender-tracing/benches/logs.rs index 2eda5e613c..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 | 270 ns | + | ot_layer_enabled | 305 ns | */ use async_trait::async_trait; 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;