DistSim: Difference between revisions

From
Jump to navigation Jump to search
Line 63: Line 63:


===defining a package===
===defining a package===
In order to actually simulate anything a package with the code to be executed needs to be available. I'm using [http://jist.ece.cornell.edu/ JiST] with a simple simulation as example. The Code for the example simulation can be found [[DistSimHelloWorld|here]]. The example has to be copied to the directory src/jist/minisim in the JiST distribution. Then the whole jist distribution needs to be packed as a .zip file. The resulting ''package'' should then be uploaded to a place where it is accessible for the hosts executing the simulations. In the long run an FTP server might be a good solution. For now we can just leave it somewhere on the local disc and start the wrapper on the same computer. Let's define the package to be at /home/user/distsim-test.zip.
In order to actually simulate anything a package with the code to be executed needs to be available. I'm using [http://jist.ece.cornell.edu/ JiST] with a simple simulation as example. The Code for the example simulation can be found [[DistSimHelloWorld|here]]. The example has to be copied to the directory src/jist/minisim in the JiST distribution. As the example simulation uses the OR-Mapping Library, it needs to be added to JiST's libraries. To do this, build the library with
ant jar
in the or-mapper directory and then move or-mapper.jar to JiST's ''libs'' directory. Then the whole JiST distribution directory with our modifications needs to be packed as a .zip file, for example with:
zip -r distsim-test.zip jist-swans-1.0.6
The resulting ''package'' should then be uploaded to a place where it is accessible for the hosts executing the simulations. In the long run an FTP server might be a good solution. For now we can just leave it somewhere on the local disc and start the wrapper on the same computer. Let's define the package to be at /home/user/distsim-test.zip.

Now the package can be announced in the database. To do this, start the client, connect to the database and choose ''define packages''. ''name'' and ''version'' are free form strings. For example you can call the package ''DistSim-Test'' and assign it the version ''1.0''. Using the ''architecture'' field you can define different functionally equivalent packages for different kinds of hosts. The actual content is also a free form string, but it is matched against the architecture string in the host configuration. The special architecture ''all'' matches any host architecture. As JiST and the test simulation are written in Java we can safely specify ''all'' here. The ''URL'', finally should point to the place where the package can be found. In our special case this would be ''file:///home/user/distsim-test.zip''. There is also an option to upload a local file to the specified URL, but this doesn't work very well because of limitations in Java's implementation of various URL handlers. ''define'' commits your input into the database. After that you can define more packages, but that isn't necessary for now.

===defining a study===

Revision as of 07:30, 19 February 2007

DistSim is provides tools to define parameters of simulations, exectute them on various hosts in a LAN and collect the results in a database. The parameters, results and references to the code used to perform the simulations are kept in a central MySQL data base, so that little manual organization of data is required and all results of past simulations are easily accessible for comparison. DistSim consists of the following components:

architecture
  • The simulation wrapper is a small program running on the hosts intended to execute the simulations. It regularly checks for changes in the database, fetches new simulation jobs and executes them.
  • The object-relational mapping library is a helper library to simplify storing the results of simulations. It can save (almost) arbitrary java objects into the database using a simple persistence mapping.
  • The configuration library provides routines to define simulations, groups of simulations and studies. It can be used to programmatically create simulations.
  • The configuration library is also the back end for the configuration client, a swing GUI for defining parameters of simulations.

HOWTO

The following guide shows how to set up a simple simulation and touches various aspects of DistSim. It is intended to be used as a starting point for more sophisticated setups.

Installation

In order to use DistSim you should set up a MySQL database. I won't go into great detail here, as there are other guides for that. You can execute the SQL script "tabellen" in the wrapper directory to create the necessary tables:

mysql> source wrapper/tabellen

Now you need to provide user accounts for various roles. One role is used for the configuration client, which needs write access to the configuration tables. Another one is used by the wrapper which needs write access to the results tables. You can reconfigure the database connection later, though. So if you just want to test the framework without caring much for security a simple

mysql> grant all on simulation to test_user identified by test_pwd 

and

mysql> grant all on simulation_results to test_user identified by test_pwd

should be enough.

Also you need a Java JDK which supports at least the Java language version 5.0. The wrapper and OR-mapping should also work with version 1.4, but the client won't. Additionally for this tutorial you need Apache Ant, preferably version 1.6.5 or newer. To access the source code for DistSim you need a subversion client.

The installation procedure for DistSim itself is fairly short and easy. First you have to obtain the latest version of DistSim from the sarforge subversion repository. To do that you should check out https://sarforge.informatik.hu-berlin.de/svn/berlinroofnet/BerlinRoofNet/trunk/simulation/distsim:

$ svn co https://sarforge.informatik.hu-berlin.de/svn/berlinroofnet/BerlinRoofNet/trunk/simulation/distsim

In the distsim directory you'll find four subdirectories. client for the configuration client and library, or-mapper for the object-relational mapping library, and wrapper for the simulation wrapper. The fourth one, text, contains the actual thesis I wrote about DistSim. In order to make use of DistSim you should at least start one wrapper. First you will want to compile the wrapper with

$ ant compile

in the wrapper directory. Then you should edit the wrapper.properties and host1.properties files in the wrapper directory. You need to provide database parameters for the results and configuration databases as well as various properties of the host itself. The example configuration looks like this:

host1.properties:

host.id 1 
host.description gurkenhannes
host.architecture x86_linux 
host.name brn-suse093-1

wrapper.properties:

definitions.host localhost
defintions.database simulation
definitions.username alve
definitions.password hannes
results.host localhost
results.database simulation_results
results.username alve
results.password hannes

When these properties all contain correct values you can start the wrapper by piping the properties into its standard input. For example like this:

$ cat host1.properties wrapper.properties | ant run

For this trick you need at least ant 1.6.5, otherwise the input won't be passed on. Now the wrapper is running and waiting for simulation jobs. To define these jobs you'll need the configuration client. The client needs to know the interface RemoteSimulation so that it can connect to the wrapper's RMI interface. This interface is part of the wrapper. in order to let the client know about RemoteSimulation, you need to build a .jar library of the wrapper and copy it to client/lib. In the wrapper directory this involves the following commands:

$ ant jar
$ cp wrapper.jar ../client/lib

Now you can start the client with

$ ant run

in the client directory.

defining a package

In order to actually simulate anything a package with the code to be executed needs to be available. I'm using JiST with a simple simulation as example. The Code for the example simulation can be found here. The example has to be copied to the directory src/jist/minisim in the JiST distribution. As the example simulation uses the OR-Mapping Library, it needs to be added to JiST's libraries. To do this, build the library with

ant jar

in the or-mapper directory and then move or-mapper.jar to JiST's libs directory. Then the whole JiST distribution directory with our modifications needs to be packed as a .zip file, for example with:

zip -r distsim-test.zip jist-swans-1.0.6

The resulting package should then be uploaded to a place where it is accessible for the hosts executing the simulations. In the long run an FTP server might be a good solution. For now we can just leave it somewhere on the local disc and start the wrapper on the same computer. Let's define the package to be at /home/user/distsim-test.zip.

Now the package can be announced in the database. To do this, start the client, connect to the database and choose define packages. name and version are free form strings. For example you can call the package DistSim-Test and assign it the version 1.0. Using the architecture field you can define different functionally equivalent packages for different kinds of hosts. The actual content is also a free form string, but it is matched against the architecture string in the host configuration. The special architecture all matches any host architecture. As JiST and the test simulation are written in Java we can safely specify all here. The URL, finally should point to the place where the package can be found. In our special case this would be file:///home/user/distsim-test.zip. There is also an option to upload a local file to the specified URL, but this doesn't work very well because of limitations in Java's implementation of various URL handlers. define commits your input into the database. After that you can define more packages, but that isn't necessary for now.

defining a study