You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@etch.apache.org by sc...@apache.org on 2008/12/08 14:32:05 UTC
svn commit: r724340 -
/incubator/etch/trunk/examples/perf/src/main/java/etch/examples/perf/MainPerfClient.java
Author: sccomer
Date: Mon Dec 8 05:32:04 2008
New Revision: 724340
URL: http://svn.apache.org/viewvc?rev=724340&view=rev
Log:
factor perf tests into individual static functions called from main.
pull configuration options to the top.
Modified:
incubator/etch/trunk/examples/perf/src/main/java/etch/examples/perf/MainPerfClient.java
Modified: incubator/etch/trunk/examples/perf/src/main/java/etch/examples/perf/MainPerfClient.java
URL: http://svn.apache.org/viewvc/incubator/etch/trunk/examples/perf/src/main/java/etch/examples/perf/MainPerfClient.java?rev=724340&r1=724339&r2=724340&view=diff
==============================================================================
--- incubator/etch/trunk/examples/perf/src/main/java/etch/examples/perf/MainPerfClient.java (original)
+++ incubator/etch/trunk/examples/perf/src/main/java/etch/examples/perf/MainPerfClient.java Mon Dec 8 05:32:04 2008
@@ -1,18 +1,19 @@
-/* $Id$
- *
+/*
+ * $Id$
+ *
* Copyright 2007-2008 Cisco Systems Inc.
- *
+ *
* Licensed 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
- *
+ * 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.
+ * License for the specific language governing permissions and limitations under
+ * the License.
*/
package etch.examples.perf;
@@ -30,11 +31,27 @@
import etch.util.core.io.Transport;
/**
- * Main program for PerfClient. This program makes a connection to the
- * listener created by MainPerfListener.
+ * Main program for PerfClient. This program makes a connection to the listener
+ * created by MainPerfListener.
*/
public class MainPerfClient implements PerfClientFactory, PerfServerFactory
{
+ private static String uri;
+
+ private static int maxWaitTime;
+
+ private static int runtime;
+
+ private static int trials;
+
+ private static boolean full;
+
+ private static int[] threadCounts;
+
+ private static boolean startListener;
+
+ private static MainPerfClient implFactory;
+
/**
* Main program for PerfClient.
*
@@ -45,222 +62,276 @@
{
Log.addSink( null );
Log.report( "MainPerfClient" );
-
- final String uri = "tcp://localhost:4004";
-
- final boolean startListener = args.length == 1
- && args[0].equals( "startListener" );
-
- Transport<ServerFactory> listener;
-
+
+ uri = "tcp://localhost:4004";
+ maxWaitTime = 4000;
+ runtime = 4;
+ trials = 3;
+ full = false;
+ threadCounts = new int[]
+ {
+ 1
+ };
+ startListener = args.length == 1 && args[0].equals( "startListener" );
+
+ implFactory = new MainPerfClient();
+
+ final Transport<ServerFactory> listener;
+
if (startListener)
{
- listener = PerfHelper.newListener( uri, null, new MainPerfClient() );
- listener.transportControl( Transport.START_AND_WAIT_UP, 4000 );
+ listener = PerfHelper.newListener( uri, null, implFactory );
+ listener.transportControl( Transport.START_AND_WAIT_UP, maxWaitTime );
}
else
{
listener = null;
}
+
+ // make sure test interfaces work.
- final MainPerfClient implFactory = new MainPerfClient();
- final int maxWaitTime = 4000;
-
+ qualify();
+
+ // run tests
+
+ for (int nThreads : threadCounts)
{
+ perfAdd( nThreads );
+ perfAsyncAdd( nThreads );
+ perfReport( nThreads );
+ if (full)
+ {
+ perfSum( nThreads );
+ perfDist( nThreads );
+ perfAdd2( nThreads );
+ perfReport2( nThreads );
+ }
+ }
+
+ if (listener != null)
+ listener.transportControl( Transport.STOP_AND_WAIT_DOWN, maxWaitTime );
+ }
+
+ private static void perfReport2( int threads ) throws Exception
+ {
+ new PerfTest( "report2", runtime, trials, threads )
+ {
+ @Override
+ public void run( long n ) throws Exception
+ {
+ RemotePerfServer server = startServer();
+
+ final Date d = new Date();
+
+ while (n-- > 0)
+ server
+ .report2( d, 23,
+ // 50 characters:
+ "this message describes the specifics of a code 23." );
+
+ // sync up with message stream.
+ Assertion.check( server.add( 8, 9 ) == 17,
+ "server.add( 8, 9 ) == 17" );
+
+ stopServer( server );
+ }
+ }.run();
+ }
+
+ private static void perfAdd2( int threads ) throws Exception
+ {
+ new PerfTest( "add2", runtime, trials, threads )
+ {
+ @Override
+ public void run( long n ) throws Exception
+ {
+ RemotePerfServer server = startServer();
+
+ final Date d = new Date();
+ final long adj = 3600000L; // 1 hour
+
+ while (n-- > 0)
+ server.add2( d, adj );
+
+ stopServer( server );
+ }
+ }.run();
+ }
+
+ private static void perfDist( int threads ) throws Exception
+ {
+ new PerfTest( "dist", runtime, trials, threads )
+ {
+ @Override
+ public void run( long n ) throws Exception
+ {
+ RemotePerfServer server = startServer();
+
+ final int X = 1000000000;
+ final int Y = 2000000000;
+
+ while (n-- > 0)
+ server.dist( new Point( 1, 2 ), new Point( X, Y ) );
+
+ stopServer( server );
+ }
+ }.run();
+ }
+
+ private static void perfSum( int threads ) throws Exception
+ {
+ final int[] values = new int[1000];
+ for (int i = 0; i < values.length; i++)
+ values[i] = i;
+
+ new PerfTest( "sum-" + values.length, runtime, trials, threads )
+ {
+ @Override
+ public void run( long n ) throws Exception
+ {
+ RemotePerfServer server = startServer();
+
+ while (n-- > 0)
+ server.sum( values );
+
+ stopServer( server );
+ }
+ }.run();
+ }
+
+ private static void perfReport( int threads ) throws Exception
+ {
+ new PerfTest( "report", runtime, trials, threads )
+ {
+ @Override
+ public void run( long n ) throws Exception
+ {
+ RemotePerfServer server = startServer();
+
+ while (n-- > 0)
+ server.report( 23,
+ // 50 characters:
+ "this message describes the specifics of a code 23." );
+
+ // sync up with message stream.
+ Assertion.check( server.add( 8, 9 ) == 17,
+ "server.add( 8, 9 ) == 17" );
+
+ stopServer( server );
+ }
+ }.run();
+ }
+
+ private static void perfAsyncAdd( int threads ) throws Exception
+ {
+ new PerfTest( "async add", runtime, trials, threads )
+ {
+ @Override
+ public void run( long n ) throws Exception
+ {
+ RemotePerfServer server = startServer();
+
+ final int X = 1000000000;
+ final int Y = 2000000000;
+
+ if (n-- > 0)
+ {
+ Mailbox mb1 = server._async._begin_add( X, Y );
+ while (n-- > 0)
+ {
+ Mailbox mb2 = server._async._begin_add( X, Y );
+ server._async._end_add( mb1 );
+ mb1 = mb2;
+ }
+ server._async._end_add( mb1 );
+ }
+
+ stopServer( server );
+ }
+ }.run();
+ }
+
+ private static void perfAdd( int threads ) throws Exception
+ {
+ new PerfTest( "add", runtime, trials, threads )
+ {
+ @Override
+ public void run( long n ) throws Exception
+ {
+ RemotePerfServer server = startServer();
+
+ final int X = 1000000000;
+ final int Y = 2000000000;
+
+ while (n-- > 0)
+ server.add( X, Y );
+
+ stopServer( server );
+ }
+ }.run();
+ }
+
+ private static RemotePerfServer startServer() throws Exception
+ {
RemotePerfServer server = PerfHelper.newServer( uri, null, implFactory );
-
- // make sure server is working
-
server._startAndWaitUp( maxWaitTime );
-
+ return server;
+ }
+
+ private static void stopServer( RemotePerfServer server ) throws Exception
+ {
+ server._stopAndWaitDown( maxWaitTime );
+ }
+
+ private static void qualify() throws Exception
+ {
+ RemotePerfServer server = startServer();
+
Assertion.check( server.add( 2, 3 ) == 5, "server.add( 2, 3 ) == 5" );
Assertion.check( server.add( 3, 4 ) == 7, "server.add( 3, 4 ) == 7" );
-
- Assertion.check( server.sum( new int[] { 1, 2, 3 } ) == 6,
- "server.sum( new int[] { 1, 2, 3 } ) == 6" );
-
- Assertion.check( server.sum( new int[] { 2, 3, 4 } ) == 9,
- "server.sum( new int[] { 2, 3, 4 } ) == 9" );
-
+
+ Assertion.check( server.sum( new int[]
+ {
+ 1, 2, 3
+ } ) == 6, "server.sum( new int[] { 1, 2, 3 } ) == 6" );
+
+ Assertion.check( server.sum( new int[]
+ {
+ 2, 3, 4
+ } ) == 9, "server.sum( new int[] { 2, 3, 4 } ) == 9" );
+
server.report( 18, "starting" );
-
+
server.report( 19, "stopping" );
-
+
Point r = server.dist( new Point( 1, 2 ), new Point( 3, 5 ) );
Assertion.check( r.x == 2, "r.x == 2" );
Assertion.check( r.y == 3, "r.y == 3" );
-
+
r = server.dist( new Point( 10, 9 ), new Point( 4, 5 ) );
Assertion.check( r.x == -6, "r.x == -6" );
Assertion.check( r.y == -4, "r.y == -4" );
-
+
Date t0 = new Date();
long adj = 3600000L;
-
+
Date t1 = server.add2( t0, adj );
- Assertion.check( (t1.getTime()-t0.getTime()) == adj,
- String.format( "server.add2( %s, %s ) => %s [bogus!]", t0, adj, t1 ) );
-
+ Assertion.check( (t1.getTime() - t0.getTime()) == adj, String.format(
+ "server.add2( %s, %s ) => %s [bogus!]", t0, adj, t1 ) );
+
t1 = server.add2( t0, -adj );
- Assertion.check( (t1.getTime()-t0.getTime()) == -adj,
- String.format( "server.add2( %s, %s ) => %s [bogus!]", t0, -adj, t1 ) );
-
+ Assertion.check( (t1.getTime() - t0.getTime()) == -adj, String.format(
+ "server.add2( %s, %s ) => %s [bogus!]", t0, -adj, t1 ) );
+
server.report2( new Date(), 20, "begin" );
-
- server.report2( new Date(), 21, "end" );
- server._stopAndWaitDown( maxWaitTime );
- }
-
- // run tests
-
- final int runtime = 60;
- final int trials = 3;
- final boolean full = false;
-
- for (int nThreads: new int[] { 1, 1 })
- {
- new PerfTest( "add", runtime, trials, nThreads )
- {
- @Override
- public void run( long n ) throws Exception
- {
- RemotePerfServer server = PerfHelper.newServer( uri, null, implFactory );
- server._startAndWaitUp( maxWaitTime );
-
- while (n-- > 0)
- server.add( 1000000000, 2000000000 );
-
- server._stopAndWaitDown( maxWaitTime );
- }
- }.run();
+ server.report2( new Date(), 21, "end" );
- new PerfTest( "async add", runtime, trials, nThreads )
- {
- @Override
- public void run( long n ) throws Exception
- {
- RemotePerfServer server = PerfHelper.newServer( uri, null, implFactory );
- server._startAndWaitUp( maxWaitTime );
-
- if (n-- > 0)
- {
- Mailbox mb1 = server._async._begin_add( 1000000000, 2000000000 );
- while (n-- > 0)
- {
- Mailbox mb2 = server._async._begin_add( 1000000000, 2000000000 );
- server._async._end_add( mb1 );
- mb1 = mb2;
- }
- server._async._end_add( mb1 );
- }
-
- server._stopAndWaitDown( maxWaitTime );
- }
- }.run();
-
- new PerfTest( "report", runtime, trials, nThreads )
- {
- @Override
- public void run( long n ) throws Exception
- {
- RemotePerfServer server = PerfHelper.newServer( uri, null, implFactory );
- server._startAndWaitUp( maxWaitTime );
-
- while (n-- > 0)
- server.report( 23,
- // 50 characters:
- "this message describes the specifics of a code 23." );
-
- // sync up with message stream.
- Assertion.check( server.add( 8, 9 ) == 17, "server.add( 8, 9 ) == 17" );
-
- server._stopAndWaitDown( maxWaitTime );
- }
- }.run();
-
- if (full)
- {
- final int[] values = new int[1000];
- for (int i = 0; i < values.length; i++)
- values[i] = i;
-
- new PerfTest( "sum-"+values.length, runtime, trials, nThreads )
- {
- @Override
- public void run( long n ) throws Exception
- {
- RemotePerfServer server = PerfHelper.newServer( uri, null, implFactory );
- server._startAndWaitUp( maxWaitTime );
-
- while (n-- > 0)
- server.sum( values );
-
- server._stopAndWaitDown( maxWaitTime );
- }
- }.run();
-
- new PerfTest( "dist", runtime, trials, nThreads )
- {
- @Override
- public void run( long n ) throws Exception
- {
- RemotePerfServer server = PerfHelper.newServer( uri, null, implFactory );
- server._startAndWaitUp( maxWaitTime );
-
- while (n-- > 0)
- server.dist( new Point( 1, 2 ), new Point( 1000000000, 2000000000 ) );
-
- server._stopAndWaitDown( maxWaitTime );
- }
- }.run();
-
- new PerfTest( "add2", runtime, trials, nThreads )
- {
- @Override
- public void run( long n ) throws Exception
- {
- RemotePerfServer server = PerfHelper.newServer( uri, null, implFactory );
- server._startAndWaitUp( maxWaitTime );
-
- long adj = 365*24*60*60*1000L; // 1 year
-
- while (n-- > 0)
- server.add2( new Date(), adj );
-
- server._stopAndWaitDown( maxWaitTime );
- }
- }.run();
-
- new PerfTest( "report2", runtime, trials, nThreads )
- {
- @Override
- public void run( long n ) throws Exception
- {
- RemotePerfServer server = PerfHelper.newServer( uri, null, implFactory );
- server._startAndWaitUp( maxWaitTime );
-
- while (n-- > 0)
- server.report2( new Date(), 23,
- // 50 characters:
- "this message describes the specifics of a code 23." );
-
- // sync up with message stream.
- Assertion.check( server.add( 8, 9 ) == 17, "server.add( 8, 9 ) == 17" );
-
- server._stopAndWaitDown( maxWaitTime );
- }
- }.run();
- }
- }
-
- if (listener != null)
- listener.transportControl( Transport.STOP_AND_WAIT_DOWN, 4000 );
+ stopServer( server );
}
- public PerfClient newPerfClient( RemotePerfServer server )
- throws Exception
+ public PerfClient newPerfClient( RemotePerfServer server ) throws Exception
{
return new ImplPerfClient( server );
}