|
| 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 | + |
| 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