You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@logging.apache.org by rp...@apache.org on 2015/09/18 13:40:05 UTC
[1/2] logging-log4j2 git commit: Separate Collections-related
LoggerConfig benchmarks into a separate class.
Repository: logging-log4j2
Updated Branches:
refs/heads/master 13b8b0fff -> 82adb21a5
Separate Collections-related LoggerConfig benchmarks into a separate
class.
Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo
Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit/b1509216
Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/b1509216
Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/b1509216
Branch: refs/heads/master
Commit: b1509216e2f2d7b23e53b16a4343cde7acca4d86
Parents: 8cff894
Author: rpopma <rp...@apache.org>
Authored: Fri Sep 18 20:39:24 2015 +0900
Committer: rpopma <rp...@apache.org>
Committed: Fri Sep 18 20:39:24 2015 +0900
----------------------------------------------------------------------
.../log4j/perf/jmh/CollectionsBenchmark.java | 118 +++++++++++++++++++
.../log4j/perf/jmh/LoggerConfigBenchmark.java | 84 +++++--------
2 files changed, 145 insertions(+), 57 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/b1509216/log4j-perf/src/main/java/org/apache/logging/log4j/perf/jmh/CollectionsBenchmark.java
----------------------------------------------------------------------
diff --git a/log4j-perf/src/main/java/org/apache/logging/log4j/perf/jmh/CollectionsBenchmark.java b/log4j-perf/src/main/java/org/apache/logging/log4j/perf/jmh/CollectionsBenchmark.java
new file mode 100644
index 0000000..e6ef08c
--- /dev/null
+++ b/log4j-perf/src/main/java/org/apache/logging/log4j/perf/jmh/CollectionsBenchmark.java
@@ -0,0 +1,118 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache license, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the license for the specific language governing permissions and
+ * limitations under the license.
+ */
+package org.apache.logging.log4j.perf.jmh;
+
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.CopyOnWriteArrayList;
+import java.util.concurrent.CopyOnWriteArraySet;
+
+import org.openjdk.jmh.annotations.Benchmark;
+import org.openjdk.jmh.annotations.Scope;
+import org.openjdk.jmh.annotations.Setup;
+import org.openjdk.jmh.annotations.State;
+import org.openjdk.jmh.infra.Blackhole;
+
+// ============================== HOW TO RUN THIS TEST: ====================================
+//
+// In sampling mode (latency test):
+// java -jar log4j-perf/target/benchmarks.jar ".*CollectionsBenchmark.*" -i 10 -f 1 -wi 5 -bm sample -tu ns
+//
+// Multi-threading test:
+// java -jar benchmarks.jar ".*CollectionsBenchmark.*" -i 10 -f 1 -wi 5 -bm sample -tu ns -t 4
+//
+// Usage help:
+// java -jar log4j-perf/target/benchmarks.jar -help
+//
+@State(Scope.Benchmark)
+public class CollectionsBenchmark {
+ private ConcurrentHashMap<String, Long> map1 = new ConcurrentHashMap<String, Long>();
+ private CopyOnWriteArraySet<Long> arraySet1 = new CopyOnWriteArraySet<Long>();
+ private CopyOnWriteArrayList<Long> arrayList1 = new CopyOnWriteArrayList<Long>();
+ private ConcurrentHashMap<String, Long> map3 = new ConcurrentHashMap<String, Long>();
+ private CopyOnWriteArraySet<Long> arraySet3 = new CopyOnWriteArraySet<Long>();
+ private CopyOnWriteArrayList<Long> arrayList3 = new CopyOnWriteArrayList<Long>();
+
+ @Setup
+ public void setup() {
+ for (int i = 0; i < 3; i++) {
+ map3.put(String.valueOf(i), Long.valueOf(i));
+ arraySet3.add(Long.valueOf(i));
+ arrayList3.add(Long.valueOf(i));
+ }
+ map1.put(String.valueOf(1), Long.valueOf(1));
+ arraySet1.add(Long.valueOf(1));
+ arrayList1.add(Long.valueOf(1));
+ }
+
+ @Benchmark
+ public void testBaseline(final Blackhole bh) {
+ }
+
+ @Benchmark
+ public long iterMap1Element() {
+ long total = 0;
+ for (Long value : map1.values()) {
+ total += value;
+ }
+ return total;
+ }
+
+ @Benchmark
+ public long iterArraySet1Element() {
+ long total = 0;
+ for (Long value : arraySet1) {
+ total += value;
+ }
+ return total;
+ }
+
+ @Benchmark
+ public long iterArrayList1Element() {
+ long total = 0;
+ for (Long value : arrayList1) {
+ total += value;
+ }
+ return total;
+ }
+
+ @Benchmark
+ public long iterMap3Elements() {
+ long total = 0;
+ for (Long value : map3.values()) {
+ total += value;
+ }
+ return total;
+ }
+
+ @Benchmark
+ public long iterArraySet3Element() {
+ long total = 0;
+ for (Long value : arraySet3) {
+ total += value;
+ }
+ return total;
+ }
+
+ @Benchmark
+ public long iterArrayList3Element() {
+ long total = 0;
+ for (Long value : arrayList3) {
+ total += value;
+ }
+ return total;
+ }
+}
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/b1509216/log4j-perf/src/main/java/org/apache/logging/log4j/perf/jmh/LoggerConfigBenchmark.java
----------------------------------------------------------------------
diff --git a/log4j-perf/src/main/java/org/apache/logging/log4j/perf/jmh/LoggerConfigBenchmark.java b/log4j-perf/src/main/java/org/apache/logging/log4j/perf/jmh/LoggerConfigBenchmark.java
index 47c540e..2f6cd95 100644
--- a/log4j-perf/src/main/java/org/apache/logging/log4j/perf/jmh/LoggerConfigBenchmark.java
+++ b/log4j-perf/src/main/java/org/apache/logging/log4j/perf/jmh/LoggerConfigBenchmark.java
@@ -16,8 +16,6 @@
*/
package org.apache.logging.log4j.perf.jmh;
-import java.util.concurrent.ArrayBlockingQueue;
-import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.CopyOnWriteArraySet;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.concurrent.atomic.AtomicInteger;
@@ -37,7 +35,6 @@ import org.openjdk.jmh.annotations.Benchmark;
import org.openjdk.jmh.annotations.Scope;
import org.openjdk.jmh.annotations.Setup;
import org.openjdk.jmh.annotations.State;
-import org.openjdk.jmh.annotations.TearDown;
import org.openjdk.jmh.infra.Blackhole;
// ============================== HOW TO RUN THIS TEST: ====================================
@@ -53,12 +50,7 @@ import org.openjdk.jmh.infra.Blackhole;
//
@State(Scope.Benchmark)
public class LoggerConfigBenchmark {
- private ConcurrentHashMap<String, Long> map1 = new ConcurrentHashMap<String, Long>();
- private CopyOnWriteArraySet<Long> arraySet1 = new CopyOnWriteArraySet<Long>();
- private ConcurrentHashMap<String, Long> map3 = new ConcurrentHashMap<String, Long>();
- private CopyOnWriteArraySet<Long> arraySet3 = new CopyOnWriteArraySet<Long>();
- private ConcurrentHashMap<String, AppenderControl> appenderMap = new ConcurrentHashMap<String, AppenderControl>();
private CopyOnWriteArraySet<AppenderControl> appenderSet = new CopyOnWriteArraySet<AppenderControl>();
private volatile Filter filter = null;
private boolean additive = true;
@@ -69,22 +61,21 @@ public class LoggerConfigBenchmark {
private final Lock shutdownLock = new ReentrantLock();
private final Condition noLogEvents = shutdownLock.newCondition(); // should only be used when shutdown == true
private final LogEvent LOGEVENT = createLogEventWithoutException();
- private final static String APPENDERNAME = "LIST";
- private SimpleListAppender listAppender = new SimpleListAppender(APPENDERNAME);
+ private SimpleListAppender listAppender = new SimpleListAppender();
private static class SimpleListAppender extends AbstractAppender {
private static final long serialVersionUID = 1L;
private final AtomicInteger count = new AtomicInteger();
- protected SimpleListAppender(String name) {
- super(name, null, null);
+ protected SimpleListAppender() {
+ super("list", null, null);
}
@Override
public void append(LogEvent event) {
count.incrementAndGet();
}
-
+
public int size() {
return count.get();
}
@@ -92,16 +83,9 @@ public class LoggerConfigBenchmark {
@Setup
public void setup() {
- for (int i = 0; i < 3; i++) {
- map3.put(String.valueOf(i), Long.valueOf(i));
- arraySet3.add(Long.valueOf(i));
- }
- map1.put(String.valueOf(1), Long.valueOf(1));
- arraySet1.add(Long.valueOf(1));
listAppender.start();
final AppenderControl control = new AppenderControl(listAppender, Level.ALL, null);
- appenderMap.put(APPENDERNAME, control);
appenderSet.add(control);
}
@@ -114,42 +98,6 @@ public class LoggerConfigBenchmark {
}
@Benchmark
- public long iterMap1Element() {
- long total = 0;
- for (Long value : map1.values()) {
- total += value;
- }
- return total;
- }
-
- @Benchmark
- public long iterArraySet1Element() {
- long total = 0;
- for (Long value : arraySet1) {
- total += value;
- }
- return total;
- }
-
- @Benchmark
- public long iterMap3Elements() {
- long total = 0;
- for (Long value : map3.values()) {
- total += value;
- }
- return total;
- }
-
- @Benchmark
- public long iterArraySet3Element() {
- long total = 0;
- for (Long value : arraySet3) {
- total += value;
- }
- return total;
- }
-
- @Benchmark
public int logWithCountersAndLock() {
log(LOGEVENT);
return listAppender.size();
@@ -204,6 +152,24 @@ public class LoggerConfigBenchmark {
*
* @param event The log event.
*/
+ public void logWithCounterAndFlag(final LogEvent event) {
+ while (!beforeLogEventCheckCounterPositive()) {
+
+ }
+ try {
+ if (!isFiltered(event)) {
+ processLogEvent(event);
+ }
+ } finally {
+ afterLogEvent2();
+ }
+ }
+
+ /**
+ * Logs an event.
+ *
+ * @param event The log event.
+ */
public void log3(final LogEvent event) {
if (!isFiltered(event)) {
processLogEvent(event);
@@ -224,6 +190,10 @@ public class LoggerConfigBenchmark {
counter.incrementAndGet();
}
+ private boolean beforeLogEventCheckCounterPositive() {
+ return counter.incrementAndGet() > 0;
+ }
+
private void afterLogEvent() {
if (counter.decrementAndGet() == 0) {
signalCompletionIfShutdown();
@@ -265,7 +235,7 @@ public class LoggerConfigBenchmark {
}
protected void callAppenders(final LogEvent event) {
- for (final AppenderControl control : appenderMap.values()) {
+ for (final AppenderControl control : appenderSet) {
control.callAppender(event);
}
}
[2/2] logging-log4j2 git commit: Merge branch 'master' of
https://git-wip-us.apache.org/repos/asf/logging-log4j2.git
Posted by rp...@apache.org.
Merge branch 'master' of https://git-wip-us.apache.org/repos/asf/logging-log4j2.git
Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo
Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit/82adb21a
Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/82adb21a
Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/82adb21a
Branch: refs/heads/master
Commit: 82adb21a596b2df787637a955849fdedb6927d0f
Parents: b150921 13b8b0f
Author: rpopma <rp...@apache.org>
Authored: Fri Sep 18 20:39:50 2015 +0900
Committer: rpopma <rp...@apache.org>
Committed: Fri Sep 18 20:39:50 2015 +0900
----------------------------------------------------------------------
.../org/apache/logging/log4j/util/Strings.java | 80 ++++++++++----------
.../logging/log4j/core/config/Configurator.java | 3 +-
.../core/config/status/StatusConfiguration.java | 4 +-
.../logging/log4j/core/util/FileUtilsTest.java | 2 +-
4 files changed, 45 insertions(+), 44 deletions(-)
----------------------------------------------------------------------