You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@logging.apache.org by vy...@apache.org on 2022/03/14 12:27:19 UTC
[logging-log4j2] 06/16: LOG4J2-3393 Use a single LogEvent in JMH benchmarks.
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 7136e8c6d674e9cd41d342ea32fb27807070cdd5
Author: Volkan Yazici <vo...@yazi.ci>
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;
+ }
+
}