This is an automated email from the ASF dual-hosted git repository. vy pushed a commit to branch LOG4J2-3393 in repository https://gitbox.apache.org/repos/asf/logging-log4j2.git
commit 8a85c0316c69da580effe33305bbdc7c452f32a6 Author: Volkan Yazici <[email protected]> AuthorDate: Fri Feb 18 16:50:32 2022 +0100 LOG4J2-3393 Use a single LogEvent in JMH benchmarks. --- .../json/BlackHoleByteBufferDestination.java | 6 +- .../template/json/JsonTemplateLayoutBenchmark.java | 80 +++++++++++----------- .../json/JsonTemplateLayoutBenchmarkState.java | 18 +++-- 3 files changed, 58 insertions(+), 46 deletions(-) diff --git a/log4j-layout-template-json/src/test/java/org/apache/logging/log4j/layout/template/json/BlackHoleByteBufferDestination.java b/log4j-layout-template-json/src/test/java/org/apache/logging/log4j/layout/template/json/BlackHoleByteBufferDestination.java index ca6041b..0fab5ab 100644 --- a/log4j-layout-template-json/src/test/java/org/apache/logging/log4j/layout/template/json/BlackHoleByteBufferDestination.java +++ b/log4j-layout-template-json/src/test/java/org/apache/logging/log4j/layout/template/json/BlackHoleByteBufferDestination.java @@ -37,8 +37,10 @@ class BlackHoleByteBufferDestination implements ByteBufferDestination { @Override public ByteBuffer drain(final ByteBuffer byteBuffer) { byteBuffer.flip(); - this.byteBuffer.clear(); - this.byteBuffer.put(byteBuffer); + if (this.byteBuffer != byteBuffer) { + this.byteBuffer.clear(); + this.byteBuffer.put(byteBuffer); + } byteBuffer.clear(); return byteBuffer; } diff --git a/log4j-perf/src/main/java/org/apache/logging/log4j/layout/template/json/JsonTemplateLayoutBenchmark.java b/log4j-perf/src/main/java/org/apache/logging/log4j/layout/template/json/JsonTemplateLayoutBenchmark.java index 0b3ca8b..58c5852 100644 --- a/log4j-perf/src/main/java/org/apache/logging/log4j/layout/template/json/JsonTemplateLayoutBenchmark.java +++ b/log4j-perf/src/main/java/org/apache/logging/log4j/layout/template/json/JsonTemplateLayoutBenchmark.java @@ -46,149 +46,151 @@ public class JsonTemplateLayoutBenchmark { public static int fullJsonTemplateLayout4JsonLayout( final JsonTemplateLayoutBenchmarkState state) { return benchmark( + state, state.getJsonTemplateLayout4JsonLayout(), - state.getFullLogEvents(), - state.getByteBufferDestination()); + state.getFullLogEvents()); } @Benchmark public static int liteJsonTemplateLayout4JsonLayout( final JsonTemplateLayoutBenchmarkState state) { return benchmark( + state, state.getJsonTemplateLayout4JsonLayout(), - state.getLiteLogEvents(), - state.getByteBufferDestination()); + state.getLiteLogEvents()); } @Benchmark public static int fullJsonTemplateLayout4EcsLayout( final JsonTemplateLayoutBenchmarkState state) { return benchmark( + state, state.getJsonTemplateLayout4EcsLayout(), - state.getFullLogEvents(), - state.getByteBufferDestination()); + state.getFullLogEvents()); } @Benchmark public static int liteJsonTemplateLayout4EcsLayout( final JsonTemplateLayoutBenchmarkState state) { return benchmark( + state, state.getJsonTemplateLayout4EcsLayout(), - state.getLiteLogEvents(), - state.getByteBufferDestination()); + state.getLiteLogEvents()); } @Benchmark public static int fullJsonTemplateLayout4GelfLayout( final JsonTemplateLayoutBenchmarkState state) { return benchmark( + state, state.getJsonTemplateLayout4GelfLayout(), - state.getFullLogEvents(), - state.getByteBufferDestination()); + state.getFullLogEvents()); } @Benchmark public static int liteJsonTemplateLayout4GelfLayout( final JsonTemplateLayoutBenchmarkState state) { return benchmark( + state, state.getJsonTemplateLayout4GelfLayout(), - state.getLiteLogEvents(), - state.getByteBufferDestination()); + state.getLiteLogEvents()); } @Benchmark public static int fullDefaultJsonLayout( final JsonTemplateLayoutBenchmarkState state) { return benchmark( + state, state.getDefaultJsonLayout(), - state.getFullLogEvents(), - state.getByteBufferDestination()); + state.getFullLogEvents()); } @Benchmark public static int liteDefaultJsonLayout( final JsonTemplateLayoutBenchmarkState state) { return benchmark( + state, state.getDefaultJsonLayout(), - state.getLiteLogEvents(), - state.getByteBufferDestination()); + state.getLiteLogEvents()); } @Benchmark public static int fullCustomJsonLayout( final JsonTemplateLayoutBenchmarkState state) { return benchmark( + state, state.getCustomJsonLayout(), - state.getFullLogEvents(), - state.getByteBufferDestination()); + state.getFullLogEvents()); } @Benchmark public static int liteCustomJsonLayout( final JsonTemplateLayoutBenchmarkState state) { return benchmark( + state, state.getCustomJsonLayout(), - state.getLiteLogEvents(), - state.getByteBufferDestination()); + state.getLiteLogEvents()); } @Benchmark public static int fullEcsLayout( final JsonTemplateLayoutBenchmarkState state) { return benchmark( + state, state.getEcsLayout(), - state.getFullLogEvents(), - state.getByteBufferDestination()); + state.getFullLogEvents()); } @Benchmark public static int liteEcsLayout( final JsonTemplateLayoutBenchmarkState state) { return benchmark( + state, state.getEcsLayout(), - state.getLiteLogEvents(), - state.getByteBufferDestination()); + state.getLiteLogEvents()); } @Benchmark public static int fullGelfLayout( final JsonTemplateLayoutBenchmarkState state) { return benchmark( + state, state.getGelfLayout(), - state.getFullLogEvents(), - state.getByteBufferDestination()); + state.getFullLogEvents()); } @Benchmark public static int liteGelfLayout( final JsonTemplateLayoutBenchmarkState state) { return benchmark( + state, state.getGelfLayout(), - state.getLiteLogEvents(), - state.getByteBufferDestination()); + state.getLiteLogEvents()); } private static int benchmark( + final JsonTemplateLayoutBenchmarkState state, final Layout<String> layout, - final List<LogEvent> logEvents, + final List<LogEvent> logEvents) { + final int logEventIndex = state.nextLogEventIndex(); + final LogEvent logEvent = logEvents.get(logEventIndex); + return benchmark(layout, logEvent, state.getByteBufferDestination()); + } + + private static int benchmark( + final Layout<String> layout, + final LogEvent logEvent, final ByteBufferDestination destination) { final ByteBuffer byteBuffer = destination.getByteBuffer(); - int checksum = 0; - // noinspection ForLoopReplaceableByForEach (avoid iterator instantiation) - for (int logEventIndex = 0; logEventIndex < logEvents.size(); logEventIndex++) { - LogEvent logEvent = logEvents.get(logEventIndex); - layout.encode(logEvent, destination); - checksum += byteBuffer.position(); - byteBuffer.clear(); - } - return checksum; + layout.encode(logEvent, destination); + return byteBuffer.position(); } public static void main(String[] args) throws IOException { // System.out.format("Ready?"); // System.in.read(); JsonTemplateLayoutBenchmarkState state = new JsonTemplateLayoutBenchmarkState(); - int retryCount = 200_000; + int retryCount = 200_000_000; measureEcs(state, retryCount); measureJtl(state, retryCount); } diff --git a/log4j-perf/src/main/java/org/apache/logging/log4j/layout/template/json/JsonTemplateLayoutBenchmarkState.java b/log4j-perf/src/main/java/org/apache/logging/log4j/layout/template/json/JsonTemplateLayoutBenchmarkState.java index 54c8c0b..3fc5c5b 100644 --- a/log4j-perf/src/main/java/org/apache/logging/log4j/layout/template/json/JsonTemplateLayoutBenchmarkState.java +++ b/log4j-perf/src/main/java/org/apache/logging/log4j/layout/template/json/JsonTemplateLayoutBenchmarkState.java @@ -16,7 +16,6 @@ */ package org.apache.logging.log4j.layout.template.json; -import co.elastic.logging.log4j2.EcsLayout; import co.elastic.logging.log4j2.LcsLayout; import org.apache.logging.log4j.core.Layout; import org.apache.logging.log4j.core.LogEvent; @@ -36,13 +35,15 @@ import java.nio.charset.Charset; import java.nio.charset.StandardCharsets; import java.util.List; -@State(Scope.Benchmark) +@State(Scope.Thread) public class JsonTemplateLayoutBenchmarkState { private static final Configuration CONFIGURATION = new DefaultConfiguration(); private static final Charset CHARSET = StandardCharsets.UTF_8; + private static final int LOG_EVENT_COUNT = 1_000; + private final ByteBufferDestination byteBufferDestination; private final JsonTemplateLayout jsonTemplateLayout4JsonLayout; @@ -63,6 +64,8 @@ public class JsonTemplateLayoutBenchmarkState { private final List<LogEvent> liteLogEvents; + private int logEventIndex = 0; + public JsonTemplateLayoutBenchmarkState() { this.byteBufferDestination = new BlackHoleByteBufferDestination(1024 * 512); this.jsonTemplateLayout4JsonLayout = createJsonTemplateLayout4JsonLayout(); @@ -72,9 +75,8 @@ public class JsonTemplateLayoutBenchmarkState { this.customJsonLayout = createCustomJsonLayout(); this.ecsLayout = createEcsLayout(); this.gelfLayout = createGelfLayout(); - int logEventCount = 1_000; - this.fullLogEvents = LogEventFixture.createFullLogEvents(logEventCount); - this.liteLogEvents = LogEventFixture.createLiteLogEvents(logEventCount); + this.fullLogEvents = LogEventFixture.createFullLogEvents(LOG_EVENT_COUNT); + this.liteLogEvents = LogEventFixture.createLiteLogEvents(LOG_EVENT_COUNT); } private static JsonTemplateLayout createJsonTemplateLayout4JsonLayout() { @@ -212,4 +214,10 @@ public class JsonTemplateLayoutBenchmarkState { return liteLogEvents; } + int nextLogEventIndex() { + final int currentLogEventIndex = logEventIndex; + logEventIndex = (logEventIndex + 1) % LOG_EVENT_COUNT; + return currentLogEventIndex; + } + }
