All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.apache.lucene.benchmark.byTask.Benchmark Maven / Gradle / Ivy

/*
 * Licensed to the Apache Software Foundation (ASF) under one or more
 * contributor license agreements.  See the NOTICE file distributed with
 * this work for additional information regarding copyright ownership.
 * The ASF licenses this file to You 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 org.apache.lucene.benchmark.byTask;


import java.io.Reader;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;

import org.apache.lucene.benchmark.byTask.utils.Algorithm;
import org.apache.lucene.benchmark.byTask.utils.Config;

/**
 * Run the benchmark algorithm.
 * 

Usage: java Benchmark algorithm-file *

    *
  1. Read algorithm.
  2. *
  3. Run the algorithm.
  4. *
* Things to be added/fixed in "Benchmarking by tasks": *
    *
  1. TODO - report into Excel and/or graphed view.
  2. *
  3. TODO - perf comparison between Lucene releases over the years.
  4. *
  5. TODO - perf report adequate to include in Lucene nightly build site? (so we can easily track performance changes.)
  6. *
  7. TODO - add overall time control for repeated execution (vs. current by-count only).
  8. *
  9. TODO - query maker that is based on index statistics.
  10. *
*/ public class Benchmark { private PerfRunData runData; private Algorithm algorithm; private boolean executed; public Benchmark (Reader algReader) throws Exception { // prepare run data try { runData = new PerfRunData(new Config(algReader)); } catch (Exception e) { e.printStackTrace(); throw new Exception("Error: cannot init PerfRunData!",e); } // parse algorithm try { algorithm = new Algorithm(runData); } catch (Exception e) { throw new Exception("Error: cannot understand algorithm!",e); } } /** * Execute this benchmark */ public synchronized void execute() throws Exception { if (executed) { throw new IllegalStateException("Benchmark was already executed"); } executed = true; runData.setStartTimeMillis(); algorithm.execute(); } /** * Run the benchmark algorithm. * @param args benchmark config and algorithm files */ public static void main(String[] args) { exec(args); } /** * Utility: execute benchmark from command line * @param args single argument is expected: algorithm-file */ public static void exec(String[] args) { // verify command line args if (args.length < 1) { System.err.println("Usage: java Benchmark "); System.exit(1); } // verify input files Path algFile = Paths.get(args[0]); if (!Files.isReadable(algFile)) { System.err.println("cannot find/read algorithm file: "+algFile.toAbsolutePath()); System.exit(1); } System.out.println("Running algorithm from: "+algFile.toAbsolutePath()); Benchmark benchmark = null; try { benchmark = new Benchmark(Files.newBufferedReader(algFile, StandardCharsets.UTF_8)); } catch (Exception e) { e.printStackTrace(); System.exit(1); } System.out.println("------------> algorithm:"); System.out.println(benchmark.getAlgorithm().toString()); // execute try { benchmark.execute(); } catch (Exception e) { System.err.println("Error: cannot execute the algorithm! "+e.getMessage()); e.printStackTrace(); } System.out.println("####################"); System.out.println("### D O N E !!! ###"); System.out.println("####################"); } /** * @return Returns the algorithm. */ public Algorithm getAlgorithm() { return algorithm; } /** * @return Returns the runData. */ public PerfRunData getRunData() { return runData; } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy