You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jena.apache.org by an...@apache.org on 2011/10/05 15:35:31 UTC

svn commit: r1179218 - in /incubator/jena/Experimental/JenaPerf/trunk: Benchmarks/LUBM/ src/main/scala/org/apache/jena/perf/

Author: andy
Date: Wed Oct  5 13:35:30 2011
New Revision: 1179218

URL: http://svn.apache.org/viewvc?rev=1179218&view=rev
Log: (empty)

Modified:
    incubator/jena/Experimental/JenaPerf/trunk/Benchmarks/LUBM/   (props changed)
    incubator/jena/Experimental/JenaPerf/trunk/src/main/scala/org/apache/jena/perf/ActionBuilderManifest.scala
    incubator/jena/Experimental/JenaPerf/trunk/src/main/scala/org/apache/jena/perf/Actions.scala
    incubator/jena/Experimental/JenaPerf/trunk/src/main/scala/org/apache/jena/perf/PerfMain.scala
    incubator/jena/Experimental/JenaPerf/trunk/src/main/scala/org/apache/jena/perf/PerfUnit.scala
    incubator/jena/Experimental/JenaPerf/trunk/src/main/scala/org/apache/jena/perf/PerfUnitLib.scala

Propchange: incubator/jena/Experimental/JenaPerf/trunk/Benchmarks/LUBM/
------------------------------------------------------------------------------
--- svn:ignore (added)
+++ svn:ignore Wed Oct  5 13:35:30 2011
@@ -0,0 +1 @@
+DB

Modified: incubator/jena/Experimental/JenaPerf/trunk/src/main/scala/org/apache/jena/perf/ActionBuilderManifest.scala
URL: http://svn.apache.org/viewvc/incubator/jena/Experimental/JenaPerf/trunk/src/main/scala/org/apache/jena/perf/ActionBuilderManifest.scala?rev=1179218&r1=1179217&r2=1179218&view=diff
==============================================================================
--- incubator/jena/Experimental/JenaPerf/trunk/src/main/scala/org/apache/jena/perf/ActionBuilderManifest.scala (original)
+++ incubator/jena/Experimental/JenaPerf/trunk/src/main/scala/org/apache/jena/perf/ActionBuilderManifest.scala Wed Oct  5 13:35:30 2011
@@ -1,7 +1,6 @@
 package org.apache.jena.perf
 import com.hp.hpl.jena.util.FileManager
-import com.hp.hpl.jena.query.QueryExecutionFactory
-import com.hp.hpl.jena.query.ResultSetFormatter
+import com.hp.hpl.jena.query._
 import com.hp.hpl.jena.sparql.engine.binding.BindingUtils
 import com.hp.hpl.jena.sparql.engine.binding.Binding
 import com.hp.hpl.jena.query.QuerySolution
@@ -19,68 +18,97 @@ class ActionBuilderManifest(filename: St
   private val prefixes = List(
     ("rdf",     "http://www.w3.org/1999/02/22-rdf-syntax-ns#"),
     ("rdfs",    "http://www.w3.org/2000/01/rdf-schema#"),
-    ("mf",      "http://www.w3.org/2001/sw/DataAccess/tests/test-manifest#"),
-    ("perf",    "http://jena.apache.org/performance#"),
+    ("pm",      "http://jena.apache.org/performance#"),
     ("qf",      "Queries/"),
     ("list",    "http://jena.hpl.hp.com/ARQ/list#"))
     .foldLeft("")((x, y) => x+"PREFIX "+y._1+": <"+y._2+">\n")
-    
+  case class Entry(name:String, query:String)
+  
   val manifest = FileManager.get().loadModel(filename)
-  val (label, endpoint) = qLabelEndpoint()
-  val queries: List[Entry] = qQueries()
+  val (label, endpoint) = manifestLabelEndpoint()
+  println("Manifest: "+label+" => "+endpoint)
+  
+  val warmUpQueries: List[Entry] = getMix("pm:warmup")
+  val timedRunQueries: List[Entry]  = getMix("pm:suite")
   
   def build: Action = new ActionN(actions)
 
   def actions: Seq[Action] = {
-    queries.map(qf => new ActionByScheme(qf.name, endpoint, QueryFactory.read(qf.query)).asInstanceOf[Action] )
+    val s1 = warmUpQueries.map(qf => new ActionByScheme(qf.name, endpoint, QueryFactory.read(qf.query)).asInstanceOf[Action] )
+    val s2 = timedRunQueries.map(qf => new ActionByScheme(qf.name, endpoint, QueryFactory.read(qf.query)).asInstanceOf[Action] )
+    s2 
   }
-  
-  implicit def stringToQuery(qs:String):Query = QueryFactory.create(prefixes + "\n" + qs)
 
-  case class Entry(name:String, query:String)
   
-  private def qQueries(): List[Entry] = {
-    val qs = "SELECT ?name ?action { ?s mf:entries ?x . ?x list:member [ mf:name ?name ; mf:action ?action ] }"
-    val x = selectQuery(qs)
-    x.map(m => Entry(m.get("name").get, m.get("action").get))
-  }
+  // ---- Manifest details.
 
-  private def qLabelEndpoint(): (String, String) = {
-    val qs = "SELECT ?label ?endpoint  { ?s rdf:type mf:Manifest ; rdfs:label ?label ; perf:endpoint ?endpoint }"
+  implicit private def stringToQuery(qs:String):Query = QueryFactory.create(prefixes + "\n" + qs)
+    
+  private def manifestLabelEndpoint(): (String, String) = {
+    val qs = "SELECT ?label ?endpoint  { ?s rdf:type pm:Manifest ; rdfs:label ?label ; pm:endpoint ?endpoint }"
     val b = getRow1(qs)
     return (b.get("label").get, b.get("endpoint").get)
   }
 
+  // Find warm up and actual run.
+  // Currently, single threaded.
+
+  private def getMix(prop:String): List[Entry] = {
+     var qs = "SELECT ?name ?action  " +
+     		 "{  ?s rdf:type pm:Manifest ;" +
+     		 "      {prop} [ list:member ?mix ] . " +
+     		  "  ?mix pm:actions [ list:member ?a ] . " +
+     		  "  ?a pm:name ?name ; pm:action ?action " +
+     		  "}"
+     qs = qs.replace("{prop}", prop) ;     		  
+     val x = selectQuery(qs)
+     x.map(m => Entry(str(m.get("name").get), str(m.get("action").get)))
+  }
+   
+  private def queries(): List[Entry] = {
+    val qs = "SELECT ?name ?action { ?s pm:warmup ?x . ?x list:member [ pm:name ?name ; pm:action ?action ] }"
+    val x = selectQueryStr(qs)
+    x.map(m => Entry(m.get("name").get, m.get("action").get))
+  }
+
   private def getRow1(q:Query): Map[String, String] = {
     import collection.JavaConversions._
     val vars = q.getProjectVars().map(_.getVarName())
-    val x = selectQuery(q)
+    val x = selectQueryStr(q)
     if ( x.isEmpty ) throw new RuntimeException()
     val map = x.head
     if ( ! x.tail.isEmpty ) throw new RuntimeException()
     map
   }
     
-  private def selectQuery(q:Query): List[Map[String, String]] = {
+  private def selectQueryStr(q:Query): List[Map[String, String]] = {
+    import collection.JavaConversions._
+    val x = selectQuery(q)
+    x.map(row => row.map( e => (e._1,str(e._2) ) ))
+  }
+  
+  // Yield?
+  private def selectQuery(q:Query): List[Map[String, Node]] = {
     import collection.JavaConversions._
     val vars = q.getProjectVars().map(_.getVarName())
-    var x:List[Map[String, String]] = Nil
+    var x:List[Map[String, Node]] = Nil
     // Better scala?
     for(row <- rows(q))
       x = varsFromRow(row, vars) :: x
     x
   }
 
-  private def varsFromRow(row:QuerySolution, vars:Seq[String]): Map[String, String]= {
-    val mb:MapBuilder[String, String, Map[String,String]] = new MapBuilder(Map())
+  private def varsFromRow(row:QuerySolution, vars:Seq[String]): Map[String, Node]= {
+    val mb:MapBuilder[String, Node, Map[String,Node]] = new MapBuilder(Map())
       for(v <- vars ) {
-        val z = (v , str(row.get(v)) )
+        val z = (v , row.get(v).asNode() )
         mb += z
       }
       mb.result
   }
   
   private def str(n:RDFNode):String = NodeFunctions.str(n.asNode())
+  private def str(n:Node):String = NodeFunctions.str(n)
   
   private def rows(q: Query): List[QuerySolution] = {
     val qexec = QueryExecutionFactory.create(q, manifest)

Modified: incubator/jena/Experimental/JenaPerf/trunk/src/main/scala/org/apache/jena/perf/Actions.scala
URL: http://svn.apache.org/viewvc/incubator/jena/Experimental/JenaPerf/trunk/src/main/scala/org/apache/jena/perf/Actions.scala?rev=1179218&r1=1179217&r2=1179218&view=diff
==============================================================================
--- incubator/jena/Experimental/JenaPerf/trunk/src/main/scala/org/apache/jena/perf/Actions.scala (original)
+++ incubator/jena/Experimental/JenaPerf/trunk/src/main/scala/org/apache/jena/perf/Actions.scala Wed Oct  5 13:35:30 2011
@@ -34,6 +34,7 @@ class ActionBuilderFile(filename: String
       val query = QueryFactory.read(str, Syntax.syntaxARQ)
       new ActionByScheme(str, target, query) 
     }
+    
     val a = lines.filter(x => !x.isEmpty && ! x.matches("^\\s*#") ).map(proc).toSeq
     return a;
   }

Modified: incubator/jena/Experimental/JenaPerf/trunk/src/main/scala/org/apache/jena/perf/PerfMain.scala
URL: http://svn.apache.org/viewvc/incubator/jena/Experimental/JenaPerf/trunk/src/main/scala/org/apache/jena/perf/PerfMain.scala?rev=1179218&r1=1179217&r2=1179218&view=diff
==============================================================================
--- incubator/jena/Experimental/JenaPerf/trunk/src/main/scala/org/apache/jena/perf/PerfMain.scala (original)
+++ incubator/jena/Experimental/JenaPerf/trunk/src/main/scala/org/apache/jena/perf/PerfMain.scala Wed Oct  5 13:35:30 2011
@@ -29,17 +29,21 @@ object PerfMain {
     val action = actionBuilder.build 
     
     val collector = new Collector()
-    val proc = new ActionProcessorCollector(collector)
+    val monitor = actionMonitorPrint
+    val proc = new ActionProcessorCollector(collector, monitor)
     val proc2 = new ActionProcessorPrint()
     val reporter = new ReporterPrint()
     
-    //enact(proc2, action)
+    if ( false )
+        enact(proc2, action)
     
-    val procMon = new ActionProcessorMonitor(proc)
-    
-    enact(procMon, action)
+    //val procMon = new ActionProcessorMonitor(proc)
 
-    report(reporter, collector)
+    if ( true )
+    {
+        enact(proc, action)
+        report(reporter, collector)
+    }
     
     println("Finish @ "+now())
   }

Modified: incubator/jena/Experimental/JenaPerf/trunk/src/main/scala/org/apache/jena/perf/PerfUnit.scala
URL: http://svn.apache.org/viewvc/incubator/jena/Experimental/JenaPerf/trunk/src/main/scala/org/apache/jena/perf/PerfUnit.scala?rev=1179218&r1=1179217&r2=1179218&view=diff
==============================================================================
--- incubator/jena/Experimental/JenaPerf/trunk/src/main/scala/org/apache/jena/perf/PerfUnit.scala (original)
+++ incubator/jena/Experimental/JenaPerf/trunk/src/main/scala/org/apache/jena/perf/PerfUnit.scala Wed Oct  5 13:35:30 2011
@@ -29,6 +29,15 @@ trait ActionProcessor {
   def finishAction(action:Action) : Unit = {}
 }
 
+trait ActionMonitor {
+  def report(action: Action, result: Result)
+}
+
+object actionMonitorPrint extends ActionMonitor {
+  def report(action: Action, result: Result) = {
+    printf("%4dms %s\n", result.elapsed, action.name)
+  }
+}
 
 class ActionExecutor(runner:ActionProcessor) {
   def walk(action:Action):Unit = {
@@ -49,27 +58,7 @@ trait Reporter  {
   def report(collector: Collector): Unit
 }
 
-//{
-//  
-//  def comp(out1:Outcome, out2:Outcome): Outcome = {
-//    // Success < NoOutcome < Failure
-//    /*
-//     * (F,?) => F           3
-//     * (S or O,F) => F      2
-//     * (O, O or S) => O     2
-//     * (S, O) => O          1
-//     * (S, S) => S          1
-//     *                      Total: 9 
-//     */
-//    
-//    if ( out1 == Failure ) Failure
-//    if ( out2 == Failure ) Failure
-//    if ( out1 == NoOutcome ) NoOutcome
-//    if ( out2 == NoOutcome ) NoOutcome
-//    Success
-//  }
-
-//Simple - but no iteration.
+////Simple - but no iteration.
 sealed abstract class Outcome(val name:String)
 case object Success extends Outcome("success")
 case object Failure extends Outcome("failure")
@@ -89,3 +78,21 @@ object Result {
     new Result(outcome, -1, None, None)
 }
 
+//  def comp(out1:Outcome, out2:Outcome): Outcome = {
+//    // Success < NoOutcome < Failure
+//    /*
+//     * (F,?) => F           3
+//     * (S or O,F) => F      2
+//     * (O, O or S) => O     2
+//     * (S, O) => O          1
+//     * (S, S) => S          1
+//     *                      Total: 9 
+//     */
+//    
+//    if ( out1 == Failure ) Failure
+//    if ( out2 == Failure ) Failure
+//    if ( out1 == NoOutcome ) NoOutcome
+//    if ( out2 == NoOutcome ) NoOutcome
+//    Success
+//  }
+

Modified: incubator/jena/Experimental/JenaPerf/trunk/src/main/scala/org/apache/jena/perf/PerfUnitLib.scala
URL: http://svn.apache.org/viewvc/incubator/jena/Experimental/JenaPerf/trunk/src/main/scala/org/apache/jena/perf/PerfUnitLib.scala?rev=1179218&r1=1179217&r2=1179218&view=diff
==============================================================================
--- incubator/jena/Experimental/JenaPerf/trunk/src/main/scala/org/apache/jena/perf/PerfUnitLib.scala (original)
+++ incubator/jena/Experimental/JenaPerf/trunk/src/main/scala/org/apache/jena/perf/PerfUnitLib.scala Wed Oct  5 13:35:30 2011
@@ -42,7 +42,7 @@ class Collector {
 
 // ---- Action Processors
 
-class ActionProcessorCollector(collector:Collector) extends ActionProcessor {
+class ActionProcessorCollector(collector:Collector, monitor:ActionMonitor) extends ActionProcessor {
   val counter = new AtomicInteger(0)
 
   def exec(action:ActionStep) : Unit = {
@@ -53,6 +53,7 @@ class ActionProcessorCollector(collector
     
     val finish = System.currentTimeMillis()
     val r = Result(outcome, finish-start)
+    monitor.report(action, r)
     collector.acc(action, id, r)
   }
 }