Skip to content

Commit 5e2a9e4

Browse files
authored
Replace FixedSizeStripedLongAdder with LongAdder (#9571)
* Replace StripedLongCounter with LongAdder * Add microbench * spotless - convert to normal comment
1 parent cbe8eb4 commit 5e2a9e4

File tree

6 files changed

+240
-242
lines changed

6 files changed

+240
-242
lines changed

dd-java-agent/instrumentation/graal/native-image/src/main/java/datadog/trace/instrumentation/graal/nativeimage/AnnotationSubstitutionProcessorInstrumentation.java

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,6 @@ public void methodAdvice(MethodTransformer transformer) {
3636
@Override
3737
public String[] helperClassNames() {
3838
return new String[] {
39-
packageName + ".Target_datadog_jctools_counters_FixedSizeStripedLongCounterFields",
4039
packageName + ".Target_datadog_jctools_util_UnsafeRefArrayAccess",
4140
packageName + ".Target_org_datadog_jmxfetch_App",
4241
packageName + ".Target_org_datadog_jmxfetch_Status",
@@ -51,7 +50,6 @@ public String[] muzzleIgnoredClassNames() {
5150
"jdk.vm.ci.meta.ResolvedJavaType",
5251
"jdk.vm.ci.meta.ResolvedJavaField",
5352
// ignore helper class names as usual
54-
packageName + ".Target_datadog_jctools_counters_FixedSizeStripedLongCounterFields",
5553
packageName + ".Target_datadog_jctools_util_UnsafeRefArrayAccess",
5654
packageName + ".Target_org_datadog_jmxfetch_App",
5755
packageName + ".Target_org_datadog_jmxfetch_Status",
@@ -62,7 +60,6 @@ public String[] muzzleIgnoredClassNames() {
6260
public static class FindTargetClassesAdvice {
6361
@Advice.OnMethodExit(suppress = Throwable.class)
6462
public static void onExit(@Advice.Return(readOnly = false) List<Class<?>> result) {
65-
result.add(Target_datadog_jctools_counters_FixedSizeStripedLongCounterFields.class);
6663
result.add(Target_datadog_jctools_util_UnsafeRefArrayAccess.class);
6764
result.add(Target_org_datadog_jmxfetch_App.class);
6865
result.add(Target_org_datadog_jmxfetch_Status.class);

dd-java-agent/instrumentation/graal/native-image/src/main/java/datadog/trace/instrumentation/graal/nativeimage/Target_datadog_jctools_counters_FixedSizeStripedLongCounterFields.java

Lines changed: 0 additions & 12 deletions
This file was deleted.
Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
package datadog.trace.common;
2+
3+
import static java.util.concurrent.TimeUnit.MICROSECONDS;
4+
import static java.util.concurrent.TimeUnit.SECONDS;
5+
6+
import de.thetaphi.forbiddenapis.SuppressForbidden;
7+
import java.util.concurrent.atomic.LongAdder;
8+
import org.jctools.counters.CountersFactory;
9+
import org.jctools.counters.FixedSizeStripedLongCounter;
10+
import org.openjdk.jmh.annotations.Benchmark;
11+
import org.openjdk.jmh.annotations.BenchmarkMode;
12+
import org.openjdk.jmh.annotations.Fork;
13+
import org.openjdk.jmh.annotations.Measurement;
14+
import org.openjdk.jmh.annotations.Mode;
15+
import org.openjdk.jmh.annotations.OutputTimeUnit;
16+
import org.openjdk.jmh.annotations.Scope;
17+
import org.openjdk.jmh.annotations.State;
18+
import org.openjdk.jmh.annotations.Threads;
19+
import org.openjdk.jmh.annotations.Warmup;
20+
import org.openjdk.jmh.infra.Blackhole;
21+
22+
/*
23+
* Benchmark Mode Cnt Score Error Units
24+
* LongAdderBenchmark.benchLongAdderIncrement avgt 0.009 us/op
25+
* LongAdderBenchmark.benchLongAdderSum avgt 0.297 us/op
26+
* LongAdderBenchmark.benchStripedCounterIncrement avgt 0.071 us/op
27+
* LongAdderBenchmark.benchStripedCounterSum avgt 0.425 us/op
28+
*/
29+
@State(Scope.Benchmark)
30+
@Warmup(iterations = 1, time = 30, timeUnit = SECONDS)
31+
@Measurement(iterations = 1, time = 30, timeUnit = SECONDS)
32+
@BenchmarkMode(Mode.AverageTime)
33+
@OutputTimeUnit(MICROSECONDS)
34+
@Fork(value = 1)
35+
@SuppressForbidden
36+
public class LongAdderBenchmark {
37+
public final LongAdder adder = new LongAdder();
38+
public final FixedSizeStripedLongCounter counter =
39+
CountersFactory.createFixedSizeStripedCounter(8);
40+
41+
@Benchmark
42+
@Threads(Threads.MAX)
43+
public void benchLongAdderIncrement(Blackhole blackhole) {
44+
adder.increment();
45+
}
46+
47+
@Benchmark
48+
@Threads(Threads.MAX)
49+
public void benchStripedCounterIncrement(Blackhole blackhole) {
50+
counter.inc();
51+
}
52+
53+
@Benchmark
54+
@Threads(Threads.MAX)
55+
public void benchLongAdderSum(Blackhole blackhole) {
56+
adder.increment();
57+
blackhole.consume(adder.sum());
58+
}
59+
60+
@Benchmark
61+
@Threads(Threads.MAX)
62+
public void benchStripedCounterSum(Blackhole blackhole) {
63+
counter.inc();
64+
blackhole.consume(counter.get());
65+
}
66+
}

dd-trace-core/src/main/java/datadog/trace/common/writer/PayloadDispatcherImpl.java

Lines changed: 7 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,7 @@
1212
import java.util.Collection;
1313
import java.util.Collections;
1414
import java.util.List;
15-
import org.jctools.counters.CountersFactory;
16-
import org.jctools.counters.FixedSizeStripedLongCounter;
15+
import java.util.concurrent.atomic.LongAdder;
1716
import org.slf4j.Logger;
1817
import org.slf4j.LoggerFactory;
1918

@@ -30,10 +29,8 @@ public class PayloadDispatcherImpl implements ByteBufferConsumer, PayloadDispatc
3029
private RemoteMapper mapper;
3130
private WritableFormatter packer;
3231

33-
private final FixedSizeStripedLongCounter droppedSpanCount =
34-
CountersFactory.createFixedSizeStripedCounter(8);
35-
private final FixedSizeStripedLongCounter droppedTraceCount =
36-
CountersFactory.createFixedSizeStripedCounter(8);
32+
private final LongAdder droppedSpanCount = new LongAdder();
33+
private final LongAdder droppedTraceCount = new LongAdder();
3734

3835
public PayloadDispatcherImpl(
3936
RemoteMapperDiscovery mapperDiscovery,
@@ -60,8 +57,8 @@ public Collection<RemoteApi> getApis() {
6057

6158
@Override
6259
public void onDroppedTrace(int spanCount) {
63-
droppedSpanCount.inc(spanCount);
64-
droppedTraceCount.inc();
60+
droppedSpanCount.add(spanCount);
61+
droppedTraceCount.increment();
6562
}
6663

6764
@Override
@@ -97,8 +94,8 @@ Payload newPayload(int messageCount, ByteBuffer buffer) {
9794
return mapper
9895
.newPayload()
9996
.withBody(messageCount, buffer)
100-
.withDroppedSpans(droppedSpanCount.getAndReset())
101-
.withDroppedTraces(droppedTraceCount.getAndReset());
97+
.withDroppedSpans(droppedSpanCount.sumThenReset())
98+
.withDroppedTraces(droppedTraceCount.sumThenReset());
10299
}
103100

104101
@Override

0 commit comments

Comments
 (0)