Table of Contents

Goal

Provide a very easy way to run one program with different settings on a bunch of computers in parallel and collect the results. Simple configuration and wide applicability is the aim. Fault tolerance in respect to network and adminstration errors.

Project Page

The project is registered on Sourceforge.net and is called simparex. It is really used productively by several people.

Why not use something like MPI?

Terminology:

Specification

Cluster

Features

Error detection/ dealing

Server

Client

Protocol

Configuration

Worker=name of the executeable
MD5=md5 checksum of the executeable
DeleteWorker=Yes/No
DeleteClient=Yes/No
DeleteResults=Yes/No
Ping=#

Ping (HTTP)

Worker

Task

[[Task]]
Ticket=#  (unique number within session)
CommandLine=commandline
[[Input filename]]*
Content=single-line file content 
or
Content= <<EOT
multi-line file content here (ASCII)
EOT
[[Result name]]+ 
File=filename

Task completed (successful or with failture)

[[Result name]]+
Content= single-line file content
or
Content= <<EOT
multi-line file content here (ASCII)
EOT

Client Starting Status

Client Died Notification

Implementation Details

Configuation and Files

Before the headline can occure comments, that start with # until the end of the line.

#comment
string|counter
"eins"|1
"zwei"|2

Server

NFS awareness

The problem is, that if some slaves share files via NFS or another network filesystem it could happen that different clients overwrite their files. Basically there are three points where it occurs:

  1. the client is copied
  2. the client fetches the worker
  3. the worker writes its data to a file.

Solutions:

  1. a) start and copy clients in serial (very slow) b) start the first client an copy the client if necessary. After that start the remaining clients in parallel (quite fast, current implementation :-))
  2. before fetching the worker the client creates a .lock file. The other clients check the existance and wait for the worker.
  3. every worker is started in a separate directory, given by the session id and the ticket number

Error detection

To check a connection and the authentication:

ssh host echo