use of teetime.framework.pipe.IMonitorablePipe in project TeeTime by teetime-framework.
the class MonitoringThread method run.
@Override
public void run() {
while (!terminated) {
for (final AbstractPort<?> port : monitoredPorts) {
if (LOGGER.isInfoEnabled()) {
IMonitorablePipe pipe = (IMonitorablePipe) port.getPipe();
final long pushThroughput = pipe.getPushThroughput();
final long pullThroughput = pipe.getPullThroughput();
final double ratio = (double) pushThroughput / pullThroughput;
LOGGER.info("pipe: " + "size=" + pipe.size() + ", " + "ratio: " + String.format("%.1f", ratio));
LOGGER.info("pushes: " + pushThroughput);
LOGGER.info("pulls: " + pullThroughput);
}
}
LOGGER.info("------------------------------------");
try {
Thread.sleep(1000);
} catch (final InterruptedException e) {
terminated = true;
}
}
}
use of teetime.framework.pipe.IMonitorablePipe in project TeeTime by teetime-framework.
the class WordCounterTestWithGlobalTaskPool method main.
public static void main(final String[] args) throws UnsupportedEncodingException, FileNotFoundException {
String numWorkerThreadsParam = (args.length > 0) ? args[0] : "3";
String numWarmUpsParam = (args.length > 1) ? args[1] : "1";
String fileNameParam = (args.length > 2) ? args[2] : "data\\wordcounter\\medium_textfile.txt";
String monitoringEnabledParam = (args.length > 3) ? args[3] : "true";
int numWorkerThreads = parseAsInteger(numWorkerThreadsParam, 3);
LOGGER.info("# worker threads: " + numWorkerThreads);
int numWarmUps = parseAsInteger(numWarmUpsParam, 1);
LOGGER.info("# warm ups: " + numWarmUps);
final String fileName = fileNameParam;
final File testFile = new File(fileName);
LOGGER.info("Reading {}", testFile.getAbsolutePath());
boolean monitoringEnabled = Boolean.valueOf(monitoringEnabledParam);
final long[] timings = new long[1];
final StopWatch stopWatch = new StopWatch();
/**
* maximal number of executions for a scheduled stage per thread
*/
final int numOfExecutions = 1;
for (int i = 0; i < numWarmUps; i++) {
LOGGER.info("Warm up #{}", i);
final WordCounterConfiguration wcc = new WordCounterConfiguration(numWorkerThreads, testFile);
final TeeTimeScheduler scheduling = new GlobalTaskPoolScheduling(numWorkerThreads, wcc, numOfExecutions);
final Execution<?> analysis = new Execution<WordCounterConfiguration>(wcc, true, scheduling);
stopWatch.start();
analysis.executeBlocking();
stopWatch.end();
LOGGER.info("duration: {} secs", TimeUnit.NANOSECONDS.toSeconds(stopWatch.getDurationInNs()));
}
LOGGER.info("Starting analysis...");
final WordCounterConfiguration wcc = new WordCounterConfiguration(numWorkerThreads, testFile);
final TeeTimeScheduler scheduling = new GlobalTaskPoolScheduling(numWorkerThreads, wcc, numOfExecutions);
final Execution<?> analysis = new Execution<WordCounterConfiguration>(wcc, true, scheduling);
if (monitoringEnabled) {
wcc.getMonitoringThread().start();
}
stopWatch.start();
analysis.executeBlocking();
stopWatch.end();
wcc.getMonitoringThread().terminate();
LOGGER.info("duration: " + TimeUnit.NANOSECONDS.toSeconds(stopWatch.getDurationInNs()) + " secs");
timings[0] = stopWatch.getDurationInNs();
// results for some words to verify the correctness of the word counter
final CountingMap<String> map = wcc.getResult();
System.out.println("vero: " + (map.get("vero") == 3813850) + "->" + map.get("vero") + " should be " + 3813850);
System.out.println("sit: " + (map.get("sit") == 7627700) + "->" + map.get("sit") + " should be " + 7627700);
final File outputFile = new File("timings.txt");
writeTimingsToFile(outputFile, timings);
// some statistics about the output pipes of the distributor
System.out.println("distributor pipes:");
for (final AbstractPort<?> port : wcc.getDistributorPorts()) {
final IMonitorablePipe spscPipe = (IMonitorablePipe) port.getPipe();
System.out.println("numWaits: " + spscPipe.getNumWaits());
}
System.out.println("distributor waits: " + ((NonBlockingRoundRobinStrategy) wcc.getDistributor().getStrategy()).getNumWaits());
// some statistics about the output pipes of the distributor
System.out.println("merger pipes:");
for (final AbstractPort<?> port : wcc.getMergerPorts()) {
final IMonitorablePipe spscPipe = (IMonitorablePipe) port.getPipe();
System.out.println("numWaits: " + spscPipe.getNumWaits());
}
}
use of teetime.framework.pipe.IMonitorablePipe in project TeeTime by teetime-framework.
the class LoggedWordCounterTest method main.
public static void main(final String[] args) throws UnsupportedEncodingException, FileNotFoundException {
int numWorkerThreads;
try {
numWorkerThreads = Integer.valueOf(args[0]);
} catch (final NumberFormatException e) {
numWorkerThreads = 3;
}
LOGGER.info("# worker threads: " + numWorkerThreads);
int numWarmUps;
try {
numWarmUps = Integer.valueOf(args[1]);
} catch (final NumberFormatException e) {
numWarmUps = 1;
}
LOGGER.info("# warm ups: " + numWarmUps);
final long[] timings = new long[1];
final String fileName = args[2];
final File testFile = new File(fileName);
final StopWatch stopWatch = new StopWatch();
for (int i = 0; i < numWarmUps; i++) {
LOGGER.info("Warm up #" + i);
final LoggedWordCounterConfiguration wcc = new LoggedWordCounterConfiguration(numWorkerThreads, testFile);
final Execution<?> analysis = new Execution<LoggedWordCounterConfiguration>(wcc);
stopWatch.start();
analysis.executeBlocking();
stopWatch.end();
LOGGER.info("duration: " + TimeUnit.NANOSECONDS.toSeconds(stopWatch.getDurationInNs()) + " secs");
}
LOGGER.info("Starting analysis...");
final WordCounterConfiguration wcc = new WordCounterConfiguration(numWorkerThreads, testFile);
final Execution<?> analysis = new Execution<WordCounterConfiguration>(wcc);
wcc.getMonitoringThread().start();
stopWatch.start();
analysis.executeBlocking();
stopWatch.end();
wcc.getMonitoringThread().terminate();
LOGGER.info("duration: " + TimeUnit.NANOSECONDS.toMillis(stopWatch.getDurationInNs()) + " milli secs");
timings[0] = stopWatch.getDurationInNs();
// System.out.println("exceptions: " + exceptions);
final CountingMap<String> map = wcc.getResult();
System.out.println("vero: " + (map.get("vero") == 3813850) + "->" + map.get("vero") + " should be " + 3813850);
System.out.println("sit: " + (map.get("sit") == 7627700) + "->" + map.get("sit") + " should be " + 7627700);
final File outputFile = new File("timings.txt");
writeTimingsToFile(outputFile, timings);
System.out.println("distributor pipes:");
for (final AbstractPort<?> port : wcc.getDistributorPorts()) {
final IMonitorablePipe spscPipe = (IMonitorablePipe) port.getPipe();
System.out.println("numWaits: " + spscPipe.getNumWaits());
}
System.out.println("merger pipes:");
for (final AbstractPort<?> port : wcc.getMergerPorts()) {
final IMonitorablePipe spscPipe = (IMonitorablePipe) port.getPipe();
System.out.println("numWaits: " + spscPipe.getNumWaits());
}
System.out.println("distributor waits: " + ((NonBlockingRoundRobinStrategy) wcc.getDistributor().getStrategy()).getNumWaits());
System.out.println(ActivationStateLogger.getInstance());
ActivationStateLogger.getInstance().logToFile();
}
use of teetime.framework.pipe.IMonitorablePipe in project TeeTime by teetime-framework.
the class SingleTaskFarmMonitoringService method getMeanAndSumThroughput.
@SuppressWarnings("PMD.DataflowAnomalyAnalysis")
private double getMeanAndSumThroughput(final DynamicTaskFarmStage<?, ?, ?> taskFarmStage, final MeanThroughputType type, final boolean mean) {
double sum = 0;
double count = 0;
try {
for (ITaskFarmDuplicable<?, ?> enclosedStage : taskFarmStage.getWorkerStages()) {
IMonitorablePipe inputPipe = (IMonitorablePipe) enclosedStage.getInputPort().getPipe();
if (inputPipe != null) {
long pullThroughput = 0;
long pushThroughput = 0;
if (this.history == null) {
pullThroughput = inputPipe.getPullThroughput();
pushThroughput = inputPipe.getPushThroughput();
} else {
pullThroughput = this.history.getLastPullThroughputOfPipe(inputPipe);
pushThroughput = this.history.getLastPushThroughputOfPipe(inputPipe);
}
switch(type) {
case PULL:
sum += pullThroughput;
break;
case PUSH:
sum += pushThroughput;
break;
default:
break;
}
count++;
}
}
} catch (ClassCastException e) {
throw new TaskFarmInvalidPipeException("The input pipe of an enclosed stage instance inside a Task Farm" + " does not implement IMonitorablePipe, which is required.", e);
}
// calculate the mean value if necessary
if (mean && count > 0) {
sum /= count;
}
return sum;
}
Aggregations