From 4da3e71626367e760a01c63ba48a012c186aaf3d Mon Sep 17 00:00:00 2001 From: Jack Berg <34418638+jack-berg@users.noreply.github.com> Date: Mon, 20 Apr 2026 09:26:15 -0500 Subject: [PATCH 1/2] Tune benchmark params to reduce variance --- .../io/opentelemetry/sdk/LogRecordBenchmark.java | 12 ++++++------ .../io/opentelemetry/sdk/MetricRecordBenchmark.java | 12 ++++++------ .../io/opentelemetry/sdk/SpanRecordBenchmark.java | 12 ++++++------ 3 files changed, 18 insertions(+), 18 deletions(-) diff --git a/sdk/all/src/jmh/java/io/opentelemetry/sdk/LogRecordBenchmark.java b/sdk/all/src/jmh/java/io/opentelemetry/sdk/LogRecordBenchmark.java index ae54e627221..5355874209a 100644 --- a/sdk/all/src/jmh/java/io/opentelemetry/sdk/LogRecordBenchmark.java +++ b/sdk/all/src/jmh/java/io/opentelemetry/sdk/LogRecordBenchmark.java @@ -112,9 +112,9 @@ public void tearDown() { @Benchmark @Group("threads1") @GroupThreads(1) - @Fork(1) - @Warmup(iterations = 5, time = 1) - @Measurement(iterations = 5, time = 1) + @Fork(3) + @Warmup(iterations = 3, time = 1) + @Measurement(iterations = 10, time = 1) @OperationsPerInvocation(RECORDS_PER_INVOCATION) public void record_SingleThread(BenchmarkState benchmarkState) { record(benchmarkState); @@ -123,9 +123,9 @@ public void record_SingleThread(BenchmarkState benchmarkState) { @Benchmark @Group("threads" + MAX_THREADS) @GroupThreads(MAX_THREADS) - @Fork(1) - @Warmup(iterations = 5, time = 1) - @Measurement(iterations = 5, time = 1) + @Fork(3) + @Warmup(iterations = 3, time = 1) + @Measurement(iterations = 10, time = 1) @OperationsPerInvocation(RECORDS_PER_INVOCATION) public void record_MultipleThreads(BenchmarkState benchmarkState) { record(benchmarkState); diff --git a/sdk/all/src/jmh/java/io/opentelemetry/sdk/MetricRecordBenchmark.java b/sdk/all/src/jmh/java/io/opentelemetry/sdk/MetricRecordBenchmark.java index 669127b9eb7..2d821cfb90a 100644 --- a/sdk/all/src/jmh/java/io/opentelemetry/sdk/MetricRecordBenchmark.java +++ b/sdk/all/src/jmh/java/io/opentelemetry/sdk/MetricRecordBenchmark.java @@ -187,9 +187,9 @@ public void tearDown() { @Benchmark @Group("threads1") @GroupThreads(1) - @Fork(1) - @Warmup(iterations = 5, time = 1) - @Measurement(iterations = 5, time = 1) + @Fork(3) + @Warmup(iterations = 3, time = 1) + @Measurement(iterations = 10, time = 1) @OperationsPerInvocation(RECORDS_PER_INVOCATION) public void record_SingleThread(BenchmarkState benchmarkState) { record(benchmarkState); @@ -198,9 +198,9 @@ public void record_SingleThread(BenchmarkState benchmarkState) { @Benchmark @Group("threads" + MAX_THREADS) @GroupThreads(MAX_THREADS) - @Fork(1) - @Warmup(iterations = 5, time = 1) - @Measurement(iterations = 5, time = 1) + @Fork(3) + @Warmup(iterations = 3, time = 1) + @Measurement(iterations = 10, time = 1) @OperationsPerInvocation(RECORDS_PER_INVOCATION) public void record_MultipleThreads(BenchmarkState benchmarkState) { record(benchmarkState); diff --git a/sdk/all/src/jmh/java/io/opentelemetry/sdk/SpanRecordBenchmark.java b/sdk/all/src/jmh/java/io/opentelemetry/sdk/SpanRecordBenchmark.java index 69bc3198001..24aae90060e 100644 --- a/sdk/all/src/jmh/java/io/opentelemetry/sdk/SpanRecordBenchmark.java +++ b/sdk/all/src/jmh/java/io/opentelemetry/sdk/SpanRecordBenchmark.java @@ -123,9 +123,9 @@ public void tearDown() { @Benchmark @Group("threads1") @GroupThreads(1) - @Fork(1) - @Warmup(iterations = 5, time = 1) - @Measurement(iterations = 5, time = 1) + @Fork(3) + @Warmup(iterations = 3, time = 1) + @Measurement(iterations = 10, time = 1) @OperationsPerInvocation(RECORDS_PER_INVOCATION) public void record_SingleThread(BenchmarkState benchmarkState) { record(benchmarkState); @@ -134,9 +134,9 @@ public void record_SingleThread(BenchmarkState benchmarkState) { @Benchmark @Group("threads" + MAX_THREADS) @GroupThreads(MAX_THREADS) - @Fork(1) - @Warmup(iterations = 5, time = 1) - @Measurement(iterations = 5, time = 1) + @Fork(3) + @Warmup(iterations = 3, time = 1) + @Measurement(iterations = 10, time = 1) @OperationsPerInvocation(RECORDS_PER_INVOCATION) public void record_MultipleThreads(BenchmarkState benchmarkState) { record(benchmarkState); From 2d48b130870a60733796de0f52d164d2dd4f515f Mon Sep 17 00:00:00 2001 From: Jack Berg <34418638+jack-berg@users.noreply.github.com> Date: Tue, 21 Apr 2026 15:19:20 -0500 Subject: [PATCH 2/2] cardinality 100 -> 128 for improved JIT modulo --- .../jmh/java/io/opentelemetry/sdk/MetricRecordBenchmark.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sdk/all/src/jmh/java/io/opentelemetry/sdk/MetricRecordBenchmark.java b/sdk/all/src/jmh/java/io/opentelemetry/sdk/MetricRecordBenchmark.java index 2d821cfb90a..a417fd72b3b 100644 --- a/sdk/all/src/jmh/java/io/opentelemetry/sdk/MetricRecordBenchmark.java +++ b/sdk/all/src/jmh/java/io/opentelemetry/sdk/MetricRecordBenchmark.java @@ -96,7 +96,7 @@ public static class BenchmarkState { @Param AggregationTemporality aggregationTemporality; - @Param({"1", "100"}) + @Param({"1", "128"}) int cardinality; // The following parameters are excluded from the benchmark to reduce combinatorial explosion