Skip to content

Commit 30a3f4e

Browse files
authored
Add stress test for user-events logs exporter (#142)
1 parent c27ebcc commit 30a3f4e

File tree

2 files changed

+80
-1
lines changed

2 files changed

+80
-1
lines changed

stress/Cargo.toml

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,16 @@ version = "0.1.0"
44
edition = "2021"
55
publish = false
66

7-
[[bin]] # Bin to run the metrics stress tests for Logs UserEvent Exporter
7+
[[bin]]
88
name = "eventheader"
99
path = "src/eventheader.rs"
1010
doc = false
1111

12+
[[bin]]
13+
name = "user_events"
14+
path = "src/user_events.rs"
15+
doc = false
16+
1217
[dependencies]
1318
ctrlc = "3.2.5"
1419
lazy_static = "1.4.0"
@@ -17,6 +22,12 @@ num-format = "0.4.4"
1722
sysinfo = { version = "0.32", optional = true }
1823
eventheader_dynamic = "0.4.0"
1924

25+
opentelemetry-appender-tracing = { workspace = true, features= ["spec_unstable_logs_enabled"] }
26+
opentelemetry_sdk = { workspace = true, features = ["logs", "spec_unstable_logs_enabled"] }
27+
opentelemetry-user-events-logs = { path = "../opentelemetry-user-events-logs", features = ["spec_unstable_logs_enabled"]}
28+
tracing = { version = "0.1", default-features = false, features = ["std"] }
29+
tracing-subscriber = { version = "0.3.0", default-features = false, features = ["registry", "std"] }
30+
2031
[features]
2132
stats = ["sysinfo"]
2233

stress/src/user_events.rs

Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
//! Run this stress test using `$ sudo -E ~/.cargo/bin/cargo run --bin user_events --release -- <num-of-threads>`.
2+
//!
3+
//! IMPORTANT:
4+
//! To test with `user_events` enabled, perform the following step before running the test:
5+
//! - Add `1` to `/sys/kernel/debug/tracing/events/user_events/testprovider_L4K1Gtestprovider/enable`:
6+
//! `echo 1 > /sys/kernel/debug/tracing/events/user_events/testprovider_L4K1Gtestprovider/enable`
7+
//! To test with `user_events` disabled, perform the following step:
8+
//! - Add `0` to `/sys/kernel/debug/tracing/events/user_events/testprovider_L4K1Gtestprovider/enable`:
9+
//! `echo 0 > /sys/kernel/debug/tracing/events/user_events/testprovider_L4K1Gtestprovider/enable`
10+
//!
11+
//!
12+
// Conf - AMD EPYC 7763 64-Core Processor 2.44 GHz, 64GB RAM, Cores:8 , Logical processors: 16
13+
// Stress Test Results (user_events disabled)
14+
// Threads: 1 - Average Throughput: 30,866,752 iterations/sec
15+
// Threads: 5 - Average Throughput: 32,662,641 iterations/sec
16+
// Threads: 10 - Average Throughput: 25,776,394 iterations/sec
17+
// Threads: 16 - Average Throughput: 16,915,860 iterations/sec
18+
19+
// Stress Test Results (user_events enabled)
20+
// Threads: 1 - Average Throughput: 212,594 iterations/sec
21+
// Threads: 5 - Average Throughput: 372,695 iterations/sec
22+
// Threads: 10 - Average Throughput: 277,675 iterations/sec
23+
// Threads: 16 - Average Throughput: 268,940 iterations/sec
24+
25+
use opentelemetry_appender_tracing::layer;
26+
use opentelemetry_sdk::logs::LoggerProvider;
27+
use opentelemetry_user_events_logs::{ExporterConfig, ReentrantLogProcessor, UserEventsExporter};
28+
use std::collections::HashMap;
29+
use tracing::info;
30+
use tracing_subscriber::prelude::*;
31+
mod throughput;
32+
33+
// Function to initialize the logger
34+
fn init_logger() -> LoggerProvider {
35+
let exporter_config = ExporterConfig {
36+
default_keyword: 1,
37+
keywords_map: HashMap::new(),
38+
};
39+
let exporter = UserEventsExporter::new("testprovider", None, exporter_config);
40+
let reentrant_processor = ReentrantLogProcessor::new(exporter);
41+
LoggerProvider::builder()
42+
.with_log_processor(reentrant_processor)
43+
.build()
44+
}
45+
46+
// Function that performs the logging task
47+
fn log_event_task() {
48+
info!(
49+
name = "my-event-name",
50+
event_id = 20,
51+
user_name = "otel user",
52+
user_email = "[email protected]"
53+
);
54+
}
55+
56+
fn main() {
57+
// Initialize the logger
58+
let logger_provider = init_logger();
59+
let layer = layer::OpenTelemetryTracingBridge::new(&logger_provider);
60+
tracing_subscriber::registry().with(layer).init();
61+
62+
// Use the provided stress test framework
63+
println!("Starting stress test for UserEventsExporter...");
64+
throughput::test_throughput(|| {
65+
log_event_task();
66+
});
67+
println!("Stress test completed.");
68+
}

0 commit comments

Comments
 (0)