From: <pet...@us...> - 2007-07-12 05:08:26
|
Revision: 13058 http://svn.sourceforge.net/jikesrvm/?rev=13058&view=rev Author: peter_donald Date: 2007-07-11 22:08:23 -0700 (Wed, 11 Jul 2007) Log Message: ----------- Add in the start of a suite of micro benchmarks for thread/concurrency performance Modified Paths: -------------- rvmroot/trunk/build/test-runs/core.properties rvmroot/trunk/build/test-runs/sanity.properties Added Paths: ----------- rvmroot/trunk/testing/tests/tbench/ rvmroot/trunk/testing/tests/tbench/build.xml rvmroot/trunk/testing/tests/tbench/src/ rvmroot/trunk/testing/tests/tbench/src/test/ rvmroot/trunk/testing/tests/tbench/src/test/org/ rvmroot/trunk/testing/tests/tbench/src/test/org/jikesrvm/ rvmroot/trunk/testing/tests/tbench/src/test/org/jikesrvm/tbench/ rvmroot/trunk/testing/tests/tbench/src/test/org/jikesrvm/tbench/Zog.java Modified: rvmroot/trunk/build/test-runs/core.properties =================================================================== --- rvmroot/trunk/build/test-runs/core.properties 2007-07-12 02:18:22 UTC (rev 13057) +++ rvmroot/trunk/build/test-runs/core.properties 2007-07-12 05:08:23 UTC (rev 13058) @@ -16,7 +16,7 @@ # test.set.performance=SPECjvm98 SPECjbb2005 -test.set.short=basic gctest opttests jBYTEmark CaffeineMark javalex +test.set.short=basic gctest opttests tBench jBYTEmark CaffeineMark javalex test.set.medium=${test.set.short} jni xerces soot dacapo ipsixql SPECjbb2000 ${test.set.performance} test.tests=${test.set.medium} # Unused Modified: rvmroot/trunk/build/test-runs/sanity.properties =================================================================== --- rvmroot/trunk/build/test-runs/sanity.properties 2007-07-12 02:18:22 UTC (rev 13057) +++ rvmroot/trunk/build/test-runs/sanity.properties 2007-07-12 05:08:23 UTC (rev 13058) @@ -16,7 +16,7 @@ # test.set.performance=SPECjvm98 SPECjbb2005 -test.set.nogc=basic opttests jBYTEmark CaffeineMark javalex +test.set.nogc=basic opttests tBench jBYTEmark CaffeineMark javalex test.set.short=${test.set.nogc} gctest test.set.medium=${test.set.short} jni xerces soot dacapo ipsixql SPECjbb2000 ${test.set.performance} test.tests=${test.set.medium} Added: rvmroot/trunk/testing/tests/tbench/build.xml =================================================================== --- rvmroot/trunk/testing/tests/tbench/build.xml (rev 0) +++ rvmroot/trunk/testing/tests/tbench/build.xml 2007-07-12 05:08:23 UTC (rev 13058) @@ -0,0 +1,84 @@ +<!-- + ~ This file is part of the Jikes RVM project (http://jikesrvm.org). + ~ + ~ This file is licensed to You under the Common Public License (CPL); + ~ You may not use this file except in compliance with the License. You + ~ may obtain a copy of the License at + ~ + ~ http://www.opensource.org/licenses/cpl1.0.php + ~ + ~ See the COPYRIGHT.txt file distributed with this work for information + ~ regarding copyright ownership. + --> +<project name="tbench" default="test" basedir="."> + + <condition property="arg" value="perf" else="base"> + <equals arg1="${test.mode}" arg2="performance"/> + </condition> + <condition property="test.max.heapsize" value="300" else="150"> + <equals arg1="${test.mode}" arg2="performance"/> + </condition> + <condition property="test.time.limit" value="1200" else="300"> + <equals arg1="${test.mode}" arg2="performance"/> + </condition> + + <import file="../../../build/tests.xml"/> + + <property name="main.java" location="${basedir}/src"/> + <property name="build.classes" location="${build.tests.dir}/classes"/> + <property name="test.class.path" value="${build.classes}"/> + + <!-- **************************************************************************** --> + <!-- * * --> + <!-- * Compile the tests * --> + <!-- * * --> + <!-- **************************************************************************** --> + + <target name="compile" depends="init"> + <mkdir dir="${build.classes}"/> + <javac srcdir="${main.java}" destdir="${build.classes}" debug="true"/> + </target> + + + <!-- **************************************************************************** --> + <!-- * * --> + <!-- * Run the tests * --> + <!-- * * --> + <!-- **************************************************************************** --> + + <macrodef name="ring"> + <attribute name="tag"/> + <attribute name="threadCount" default="60"/> + <attribute name="messageCount" default="50"/> + <sequential> + <rvm tag="@{tag}" class="test.org.jikesrvm.tbench.Zog" args="@{threadCount} @{messageCount}"/> + + <outputTestStart tag="@{tag}"/> + <outputStatisticStart/> + + <property name="test.class.path" value="${build.classes}"/> + + <extractStatistic tag="@{tag}" key="total.init.time" pattern="initTime = (.+) ns \((.+) us/thread\) \(@{threadCount} threads\)" select="\1"/> + <extractStatistic tag="@{tag}" key="thread-spawn.time" pattern="initTime = (.+) ns \((.+) us/thread\) \(@{threadCount} threads\)" select="\2"/> + <extractStatistic tag="@{tag}" key="total.run.time" pattern="runTime = (.+) ns \((.+) us/message\) \(@{messageCount} messages\)" select="\1"/> + <extractStatistic tag="@{tag}" key="message.time" pattern="runTime = (.+) ns \((.+) us/message\) \(@{messageCount} messages\)" select="\2"/> + + <outputStatisticEnd/> + <outputTestResults tag="@{tag}"/> + <outputTestEnd/> + + <displayTestResults tag="@{tag}"/> + + </sequential> + </macrodef> + + <target name="test" depends="compile"> + <startResults/> + + <ring tag="RingComm20x20" threadCount="20" messageCount="20"/> + <ring tag="RingComm20x1000" threadCount="20" messageCount="1000"/> + <ring tag="RingComm135x10000" threadCount="135" messageCount="10000"/> + + <finishResults/> + </target> +</project> Property changes on: rvmroot/trunk/testing/tests/tbench/build.xml ___________________________________________________________________ Name: svn:mime-type + text/xml Name: svn:eol-style + native Added: rvmroot/trunk/testing/tests/tbench/src/test/org/jikesrvm/tbench/Zog.java =================================================================== --- rvmroot/trunk/testing/tests/tbench/src/test/org/jikesrvm/tbench/Zog.java (rev 0) +++ rvmroot/trunk/testing/tests/tbench/src/test/org/jikesrvm/tbench/Zog.java 2007-07-12 05:08:23 UTC (rev 13058) @@ -0,0 +1,138 @@ +/* + * This file is part of the Jikes RVM project (http://jikesrvm.org). + * + * This file is licensed to You under the Common Public License (CPL); + * You may not use this file except in compliance with the License. You + * may obtain a copy of the License at + * + * http://www.opensource.org/licenses/cpl1.0.php + * + * See the COPYRIGHT.txt file distributed with this work for information + * regarding copyright ownership. + */ +package test.org.jikesrvm.tbench; + +/** + * This is based on the "benchmark" used to demonstrate differenced between + * the cost of erlang processes and java threads (Originally at Joe Armstrongs + * web page linked below). It gives us a simple basis with which to compare + * costs of thread creation and synchronization. + * + * <p>Why is it called zog? Who knows but it keeps the flavour of the orginal + * "benchmark" so lets keep it. ZugZug is "yes-yes" in the warcraft games!</p> + * + * @link http://www.sics.se/~joe/ericsson/du98024.html + */ +public class Zog extends Thread { + private Zog next; + private boolean flag; + private int message; + + public void link(final Zog zog) { + next = zog; + } + + public void run() { + try { + do this.relay(); while (message > 0); + } catch (InterruptedException e) { + e.printStackTrace(); + System.exit(66); + } + } + + private synchronized void relay() throws InterruptedException { + while (!flag) wait(); + flag = false; + next.send(message - 1); + } + + public synchronized void send(int n) throws InterruptedException { + message = n; + flag = true; + notify(); + } + + static class ZugZug extends Zog { + private long linkTime; + private long initTime; + private long runTime; + + public void run() { + final long startTime = System.nanoTime(); + super.run(); + final long endTime = System.nanoTime(); + + initTime = linkTime - startTime; + runTime = endTime - linkTime; + } + + public void link(final Zog zog) { + super.link(zog); + linkTime = System.nanoTime(); + } + } + + public static void main(String args[]) { + final int threadCount = Integer.parseInt(args[0]); + final int messageCount = Integer.parseInt(args[1]); + + final Results results = performTestRun(threadCount, messageCount); + results.displayResults(); + } + + static class Results { + final int threadCount; + final int messageCount; + final long initTime; + final long runTime; + + public Results(final int threadCount, final int messageCount, final long initTime, final long runTime) { + this.threadCount = threadCount; + this.messageCount = messageCount; + this.initTime = initTime; + this.runTime = runTime; + } + + void displayResults() { + final double timePerThreadSpawn = ((double) initTime) / threadCount; + final double timePerMessage = ((double) runTime) / messageCount; + + final String message = + "initTime = " + initTime + " ns (" + timePerThreadSpawn + " us/thread) (" + threadCount + " threads)"; + System.out.println(message); + final String message2 = + "runTime = " + runTime + " ns (" + timePerMessage + " us/message) (" + messageCount + " messages)"; + System.out.println(message2); + } + } + + private static Results performTestRun(final int threadCount, final int messageCount) { + final ZugZug first = new ZugZug(); + first.start(); + + Zog old = first; + for (int i = 0; i < threadCount; i++) { + final Zog current = new Zog(); + current.link(old); + current.start(); + old = current; + } + + first.link(old); + + try { + first.send(messageCount); + } catch (InterruptedException e) { + e.printStackTrace(); + System.exit(13); + } + try { + first.join(); + } catch (InterruptedException e) { + e.printStackTrace(); + System.exit(16); + } + return new Results(threadCount, messageCount, first.initTime, first.runTime); + } +} \ No newline at end of file Property changes on: rvmroot/trunk/testing/tests/tbench/src/test/org/jikesrvm/tbench/Zog.java ___________________________________________________________________ Name: svn:mime-type + text/plain Name: svn:eol-style + native This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |