/*
* Copyright 2014 Higher Frequency Trading
*
* http://www.higherfrequencytrading.com
*
* Licensed 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 net.openhft.chronicle.logger.slf4j;
import net.openhft.chronicle.logger.ChronicleLogConfig;
import net.openhft.chronicle.tools.ChronicleTools;
import net.openhft.lang.io.IOTools;
import org.apache.commons.lang3.StringUtils;
import org.junit.After;
import org.junit.Before;
import org.junit.Ignore;
import org.junit.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.IOException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;
@Ignore
public class Slf4jVanillaChronicleLoggerPerfTest extends Slf4jTestBase {
// *************************************************************************
//
// *************************************************************************
@Before
public void setUp() {
System.setProperty(
"chronicle.logger.properties",
"chronicle.logger.vanilla.properties");
getChronicleLoggerFactory().reload();
}
@After
public void tearDown() {getChronicleLoggerFactory().shutdown();
IOTools.deleteDir(basePath(ChronicleLogConfig.TYPE_VANILLA));
}
// *************************************************************************
// Single Thread
// *************************************************************************
@Test
public void testSingleThreadLogging1() throws IOException {
Thread.currentThread().setName("perf-plain-vanilla");
final String testId = "perf-binary-vanilla-chronicle";
final Logger clogger = LoggerFactory.getLogger(testId);
final long items = 1000000;
warmup(clogger);
for(int s=64; s <= 1024 ;s += 64) {
final String staticStr = StringUtils.leftPad("", s, 'X');
long cStart1 = System.nanoTime();
for (int i = 1; i <= items; i++) {
clogger.info(staticStr);
}
long cEnd1 = System.nanoTime();
System.out.printf("items=%03d size=%04d => chronology=%.3f ms, chronology-average=%.3f us\n",
items,
staticStr.length(),
(cEnd1 - cStart1) / 1e6,
(cEnd1 - cStart1) / items / 1e3);
}
ChronicleTools.deleteOnExit(basePath(testId));
}
@Test
public void testSingleThreadLogging2() throws IOException {
Thread.currentThread().setName("perf-plain-vanilla");
final String testId = "perf-binary-vanilla-chronicle";
final Logger clogger = LoggerFactory.getLogger(testId);
final long items = 1000000;
final String strFmt = StringUtils.leftPad("> v1={}, v2={}, v3={}", 32, 'X');
warmup(clogger);
for(int n=0;n<10;n++) {
long cStart1 = System.nanoTime();
for (int i = 1; i <= items; i++) {
clogger.info(strFmt, i, i * 10, i / 16);
}
long cEnd1 = System.nanoTime();
System.out.printf("items=%03d => chronology=%.3f ms, chronology-average=%.3f us\n",
items,
(cEnd1 - cStart1) / 1e6,
(cEnd1 - cStart1) / items / 1e3);
}
ChronicleTools.deleteOnExit(basePath(testId));
}
// *************************************************************************
// Multi Thread
// *************************************************************************
@Test
public void testMultiThreadLogging() throws IOException, InterruptedException {
warmup(LoggerFactory.getLogger("perf-vanilla-chronicle"));
final int RUNS = 300000;
final int THREADS = Runtime.getRuntime().availableProcessors();
for (int size : new int[]{64, 128, 256}) {
{
final long start = System.nanoTime();
ExecutorService es = Executors.newFixedThreadPool(THREADS);
for (int t = 0; t < THREADS; t++) {
es.submit(new RunnableLogger(RUNS, size, "perf-vanilla-chronicle"));
}
es.shutdown();
es.awaitTermination(2, TimeUnit.MINUTES);
final long time = System.nanoTime() - start;
System.out.printf("Plain.MT (runs=%d, min size=%03d, elapsed=%.3f ms) took an average of %.3f us per entry\n",
RUNS,
size,
time / 1e6,
time / 1e3 / (RUNS * THREADS)
);
}
}
ChronicleTools.deleteOnExit(basePath("perf-vanilla-chronicle"));
}
}