Add new benchmark with no loggers at all
authorAlexandre Montplaisir <alexmonthy@voxpopuli.im>
Fri, 17 Jun 2016 19:15:42 +0000 (15:15 -0400)
committerAlexandre Montplaisir <alexmonthy@voxpopuli.im>
Fri, 17 Jun 2016 19:15:42 +0000 (15:15 -0400)
Not extremely representative because of optimizations/JIT, as
the average time diminishes slightly if the number of iterations
increase. It can still give a rough idea of the impact of using
empty Loggers.

Signed-off-by: Alexandre Montplaisir <alexmonthy@voxpopuli.im>
lttng-ust-java-tests-jul/src/test/java/org/lttng/ust/agent/benchmarks/jul/handler/JulHandlerBenchmarkBase.java
lttng-ust-java-tests-jul/src/test/java/org/lttng/ust/agent/benchmarks/jul/handler/builtin/NoLoggerBenchmark.java [new file with mode: 0644]

index 9ac3df5075ec4937d3b5fc636875ba7f2889cddc..201ff838d6b32974d4b0e94c81a451bf6ff12021 100644 (file)
@@ -93,7 +93,7 @@ public abstract class JulHandlerBenchmarkBase {
      */
     @Test
     public void runBenchmark() {
-        if (handler != null) {
+        if (logger != null && handler != null) {
             logger.addHandler(handler);
         }
 
@@ -105,18 +105,18 @@ public abstract class JulHandlerBenchmarkBase {
     }
 
     private static void runTest(Logger log, int nbThreads) {
-        long start, end, average, total = 0;
+        long total = 0;
         for (int i = 0; i < NB_RUNS; i++) {
             Runner runner = new Runner(nbThreads, NB_ITER, log);
 
-            start = System.nanoTime();
+            long start = System.nanoTime();
             runner.run();
-            end = System.nanoTime();
+            long end = System.nanoTime();
 
             total += (end - start);
         }
-        average = total / NB_RUNS;
-        System.out.println(nbThreads + " threads, average = " + average / NB_ITER + " ns/event");
+        long average = (total / NB_RUNS);
+        System.out.println(nbThreads + " threads, average = " + average / NB_ITER + " ns/loop");
     }
 
     // ------------------------------------------------------------------------
@@ -139,17 +139,15 @@ public abstract class JulHandlerBenchmarkBase {
 
         @Override
         public void run() {
-            for (Thread curThread : workerThreads) {
-                curThread.start();
-            }
+            workerThreads.forEach(Thread::start);
 
-            for (Thread curThread : workerThreads) {
+            workerThreads.forEach(t -> {
                 try {
-                    curThread.join();
+                    t.join();
                 } catch (InterruptedException e) {
                     e.printStackTrace();
                 }
-            }
+            });
         }
 
         private static class Worker implements Runnable {
@@ -158,6 +156,9 @@ public abstract class JulHandlerBenchmarkBase {
             private final int threadId;
             private final int nbIter;
 
+            @SuppressWarnings("unused")
+            private volatile int value = 0;
+
             public Worker(int threadId, int nbIter, Logger log) {
                 this.log = log;
                 this.threadId = threadId;
@@ -167,10 +168,12 @@ public abstract class JulHandlerBenchmarkBase {
             @Override
             public void run() {
                 for (int i = 0; i < nbIter; i++) {
-                    log.info("Thread " + threadId + ", iteration " + i);
+                    value = i;
+                    if (log != null) {
+                        log.info("Thread " + threadId + ", iteration " + i);
+                    }
                 }
             }
-
         }
     }
 }
diff --git a/lttng-ust-java-tests-jul/src/test/java/org/lttng/ust/agent/benchmarks/jul/handler/builtin/NoLoggerBenchmark.java b/lttng-ust-java-tests-jul/src/test/java/org/lttng/ust/agent/benchmarks/jul/handler/builtin/NoLoggerBenchmark.java
new file mode 100644 (file)
index 0000000..ffa5726
--- /dev/null
@@ -0,0 +1,48 @@
+/*
+ * Copyright (C) 2016, EfficiOS Inc., Alexandre Montplaisir <alexmonthy@efficios.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ */
+
+package org.lttng.ust.agent.benchmarks.jul.handler.builtin;
+
+import org.junit.After;
+import org.junit.Before;
+import org.lttng.ust.agent.benchmarks.jul.handler.JulHandlerBenchmarkBase;
+
+/**
+ * Benchmark that will avoid creating a Logger entirely, to benchmark just the
+ * bare worker.
+ */
+public class NoLoggerBenchmark extends JulHandlerBenchmarkBase {
+
+    /**
+     * Override the super class's setup() to avoid creating a Logger.
+     */
+    @Override
+    @Before
+    public void setup() {
+        logger = null;
+        handler = null;
+    }
+
+    /**
+     * Override the super class's teardown()
+     */
+    @Override
+    @After
+    public void teardown() {
+    }
+}
This page took 0.025284 seconds and 4 git commands to generate.