Search in sources :

Example 6 with IMonitorablePipe

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;
        }
    }
}
Also used : IMonitorablePipe(teetime.framework.pipe.IMonitorablePipe)

Example 7 with IMonitorablePipe

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());
    }
}
Also used : IMonitorablePipe(teetime.framework.pipe.IMonitorablePipe) StopWatch(teetime.util.StopWatch) NonBlockingRoundRobinStrategy(teetime.stage.basic.distributor.strategy.NonBlockingRoundRobinStrategy) Execution(teetime.framework.Execution) GlobalTaskPoolScheduling(teetime.framework.scheduling.globaltaskpool.GlobalTaskPoolScheduling) TeeTimeScheduler(teetime.framework.TeeTimeScheduler)

Example 8 with IMonitorablePipe

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();
}
Also used : IMonitorablePipe(teetime.framework.pipe.IMonitorablePipe) StopWatch(teetime.util.StopWatch) NonBlockingRoundRobinStrategy(teetime.stage.basic.distributor.strategy.NonBlockingRoundRobinStrategy) Execution(teetime.framework.Execution) File(java.io.File)

Example 9 with IMonitorablePipe

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;
}
Also used : IMonitorablePipe(teetime.framework.pipe.IMonitorablePipe) TaskFarmInvalidPipeException(teetime.stage.taskfarm.exception.TaskFarmInvalidPipeException)

Aggregations

IMonitorablePipe (teetime.framework.pipe.IMonitorablePipe)9 Execution (teetime.framework.Execution)3 NonBlockingRoundRobinStrategy (teetime.stage.basic.distributor.strategy.NonBlockingRoundRobinStrategy)3 TaskFarmInvalidPipeException (teetime.stage.taskfarm.exception.TaskFarmInvalidPipeException)3 StopWatch (teetime.util.StopWatch)3 File (java.io.File)1 TeeTimeScheduler (teetime.framework.TeeTimeScheduler)1 GlobalTaskPoolScheduling (teetime.framework.scheduling.globaltaskpool.GlobalTaskPoolScheduling)1