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)
}
}