From 0e0cc0d20a618bc2840d125b13013a061cb67280 Mon Sep 17 00:00:00 2001 From: Christian Wulf <chw@informatik.uni-kiel.de> Date: Wed, 20 Aug 2014 23:52:10 +0200 Subject: [PATCH] added BucketTimingsReader --- conf/logback.groovy | 3 +- src/main/java/util/BucketTimingsReader.java | 56 +++++++++++++++++++++ src/test/data/load-logs/timings-results.txt | 7 +++ submodules/JCTools | 2 +- 4 files changed, 66 insertions(+), 2 deletions(-) create mode 100644 src/main/java/util/BucketTimingsReader.java create mode 100644 src/test/data/load-logs/timings-results.txt diff --git a/conf/logback.groovy b/conf/logback.groovy index 58e714a..235da2c 100644 --- a/conf/logback.groovy +++ b/conf/logback.groovy @@ -26,4 +26,5 @@ logger "teetime.variant.methodcallWithPorts.stage", INFO logger "teetime.variant.methodcallWithPorts.framework.core.pipe", INFO -logger "util.TimingsReader", TRACE, ["FILE"] \ No newline at end of file +logger "util.TimingsReader", TRACE, ["FILE"] +logger "util.BucketTimingsReader", TRACE, ["FILE"] \ No newline at end of file diff --git a/src/main/java/util/BucketTimingsReader.java b/src/main/java/util/BucketTimingsReader.java new file mode 100644 index 0000000..7021595 --- /dev/null +++ b/src/main/java/util/BucketTimingsReader.java @@ -0,0 +1,56 @@ +package util; + +import java.io.BufferedReader; +import java.io.File; +import java.io.IOException; +import java.util.Arrays; +import java.util.LinkedList; +import java.util.List; +import java.util.Map; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import com.google.common.base.Charsets; +import com.google.common.io.CharSource; +import com.google.common.io.Files; + +public class BucketTimingsReader { + + private final static Logger LOGGER = LoggerFactory.getLogger(BucketTimingsReader.class); + + public static void main(final String[] args) throws IOException { + String fileName = args[0]; + + Long[] currentTimings = new Long[10000]; + int processedLines = 0; + List<Long> buckets = new LinkedList<Long>(); + + LOGGER.trace("Reading " + fileName); + CharSource charSource = Files.asCharSource(new File(fileName), Charsets.UTF_8); + BufferedReader bufferedStream = charSource.openBufferedStream(); + String line; + while (null != (line = bufferedStream.readLine())) { + String[] strings = line.split(";"); + Long timing = new Long(strings[1]); + currentTimings[processedLines] = timing; + processedLines++; + if (currentTimings.length == processedLines) { + Long aggregatedTimings = StatisticsUtil.calculateAverage(Arrays.asList(currentTimings)); + buckets.add(aggregatedTimings); + processedLines = 0; + } + } + + LOGGER.trace("#buckets: " + buckets.size()); + + List<Long> durationsInNs = buckets.subList(buckets.size() / 2, buckets.size()); + + LOGGER.trace("Calculating quantiles..."); + Map<Double, Long> quintiles = StatisticsUtil.calculateQuintiles(durationsInNs); + LOGGER.info(StatisticsUtil.getQuantilesString(quintiles)); + + long confidenceWidth = StatisticsUtil.calculateConfidenceWidth(durationsInNs); + LOGGER.info("Confidence width: " + confidenceWidth); + } +} diff --git a/src/test/data/load-logs/timings-results.txt b/src/test/data/load-logs/timings-results.txt new file mode 100644 index 0000000..e676d10 --- /dev/null +++ b/src/test/data/load-logs/timings-results.txt @@ -0,0 +1,7 @@ +0.0 % : 3370 ns +25.0 % : 3979 ns +50.0 % : 4425 ns +75.0 % : 4900 ns +100.0 % : 15588 ns + +Confidence width: 14 diff --git a/submodules/JCTools b/submodules/JCTools index 75998aa..88e1e25 160000 --- a/submodules/JCTools +++ b/submodules/JCTools @@ -1 +1 @@ -Subproject commit 75998aa20b7ec897ec321c1f94192de888f2dc6e +Subproject commit 88e1e25f9519b250258c7e5ada30935975ab2d10 -- GitLab