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