Skip to content

Commit 14e1a57

Browse files
authored
Cache EventSet in User-Event exporter to avoid contention and other changes (#192)
1 parent 5ea582a commit 14e1a57

File tree

6 files changed

+218
-207
lines changed

6 files changed

+218
-207
lines changed

opentelemetry-user-events-logs/Cargo.toml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,11 +25,17 @@ tracing = { version = "0.1", default-features = false, features = ["std"] }
2525
tracing-core = "0.1.31"
2626
tracing-subscriber = { version = "0.3.0", default-features = false, features = ["env-filter", "fmt", "registry", "std"] }
2727
ctrlc = "3.4"
28+
criterion = "0.5"
2829

2930
[features]
3031
spec_unstable_logs_enabled = ["opentelemetry/spec_unstable_logs_enabled", "opentelemetry_sdk/spec_unstable_logs_enabled", "opentelemetry-appender-tracing/spec_unstable_logs_enabled"]
3132
internal-logs = ["tracing", "opentelemetry/internal-logs", "opentelemetry_sdk/internal-logs"]
3233
default = ["internal-logs"]
3334

35+
[[bench]]
36+
name = "logs"
37+
harness = false
38+
required-features = ["spec_unstable_logs_enabled"]
39+
3440
[lints]
3541
workspace = true
Lines changed: 88 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,88 @@
1+
/*
2+
The benchmark results:
3+
criterion = "0.5.1"
4+
5+
Hardware: Apple M4 Pro
6+
Total Number of Cores: 10
7+
(Inside multipass vm running Ubuntu 22.04)
8+
// When no listener
9+
| Test | Average time|
10+
|-----------------------------|-------------|
11+
| User_Event_4_Attributes | 10 ns |
12+
| User_Event_6_Attributes | 10 ns |
13+
14+
// When listener is enabled
15+
// Run below to enable
16+
// echo 1 | sudo tee /sys/kernel/debug/tracing/events/user_events/myprovider_L2K1/enable
17+
// Run below to disable
18+
// echo 0 | sudo tee /sys/kernel/debug/tracing/events/user_events/myprovider_L2K1/enable
19+
| Test | Average time|
20+
|-----------------------------|-------------|
21+
| User_Event_4_Attributes | 617 ns |
22+
| User_Event_6_Attributes | 715 ns |
23+
*/
24+
25+
// running the following from the current directory
26+
// sudo -E ~/.cargo/bin/cargo bench --bench logs --all-features
27+
28+
use criterion::{criterion_group, criterion_main, Criterion};
29+
use opentelemetry_appender_tracing::layer as tracing_layer;
30+
use opentelemetry_sdk::logs::SdkLoggerProvider;
31+
use opentelemetry_sdk::Resource;
32+
use opentelemetry_user_events_logs::UserEventsLoggerProviderBuilderExt;
33+
use tracing::error;
34+
use tracing_subscriber::prelude::*;
35+
use tracing_subscriber::Registry;
36+
37+
fn benchmark_with_ot_layer(c: &mut Criterion, name: &str, num_attributes: usize) {
38+
let provider = SdkLoggerProvider::builder()
39+
.with_resource(
40+
Resource::builder_empty()
41+
.with_service_name("benchmark")
42+
.build(),
43+
)
44+
.with_user_event_exporter("myprovider")
45+
.build();
46+
let ot_layer = tracing_layer::OpenTelemetryTracingBridge::new(&provider);
47+
let subscriber = Registry::default().with(ot_layer);
48+
49+
tracing::subscriber::with_default(subscriber, || {
50+
c.bench_function(name, |b| {
51+
b.iter(|| {
52+
if num_attributes == 4 {
53+
error!(
54+
name : "CheckoutFailed",
55+
field1 = "field1",
56+
field2 = "field2",
57+
field3 = "field3",
58+
field4 = "field4",
59+
message = "Unable to process checkout."
60+
);
61+
} else if num_attributes == 6 {
62+
error!(
63+
name : "CheckoutFailed",
64+
field1 = "field1",
65+
field2 = "field2",
66+
field3 = "field3",
67+
field4 = "field4",
68+
field5 = "field5",
69+
field6 = "field6",
70+
message = "Unable to process checkout."
71+
);
72+
}
73+
});
74+
});
75+
});
76+
}
77+
78+
fn criterion_benchmark(c: &mut Criterion) {
79+
benchmark_with_ot_layer(c, "User_Event_4_Attributes", 4);
80+
benchmark_with_ot_layer(c, "User_Event_6_Attributes", 6)
81+
}
82+
83+
criterion_group! {
84+
name = benches;
85+
config = Criterion::default();
86+
targets = criterion_benchmark
87+
}
88+
criterion_main!(benches);

0 commit comments

Comments
 (0)