or:
caesar.open [caesar_opt] spec[.lotos] [cc_opt] distributor [distributor_opt] configuration[.gcf] result[.pbg] [global_opt] [instance_opt]
or:
exp.open [exp_opt] spec[.exp] [cc_opt] distributor [distributor_opt] configuration[.gcf] result[.pbg] [global_opt] [instance_opt]
or:
fsp.open [fsp_opt] spec[.lts] [cc_opt] distributor [distributor_opt] configuration[.gcf] result[.pbg] [global_opt] [instance_opt]
or:
lnt.open [lnt_opt] spec[.lnt] [cc_opt] distributor [distributor_opt] configuration[.gcf] result[.pbg] [global_opt] [instance_opt]
or:
seq.open [seq_opt] spec[.seq] [cc_opt] distributor [distributor_opt] configuration[.gcf] result[.pbg] [global_opt] [instance_opt]
Additionally, this program can generate a reduced Labelled Transition System by applying tau-compression or tau-confluence reductions on the fly.
Compared to generator and reductor , which are sequential programs executing on a single machine, distributor implements a distributed algorithm (derived from [GMS01]) that runs on several machines listed in the grid configuration file configuration.gcf (see below for a description of the GCF format). Each machine is used to generate and store a part of the Labelled Transition System. This allows distributor to exploit the computing resources (memory and processors) provided by many machines.
The current version of distributor does not handle
LOTOS programs containing dynamic data types (such as lists, trees, etc.)
implemented using pointers, i.e., all LOTOS programs such that the condition
CAESAR_HASH_SIZE_STATE() < CAESAR_SIZE_STATE()is verified, where the two functions
CAESAR_HASH_SIZE_STATE() and CAESAR_SIZE_STATE()
are defined in the caesar_graph
application programming interface.
All the machines used by distributor must have the same processor and operating system; for instance, mixing little-endian and big-endian architectures is not allowed.
As regards the communications between the machines, distributor does not make strong assumptions and only requires standard TCP sockets to be available, together with at least one standard remote connection protocol (such as "rsh/rcp", "ssh/scp", "krsh"/"kcp", etc.). In particular, distributor does not require the existence of a common file system (e.g., NFS, Samba) shared between the machines.
The machine on which distributor is launched (using the command line described in the SYNOPSIS section above) is called the local machine. All other machines are called remote machines. Depending on the contents of configuration.gcf, distributor will launch distributed processes, which are called instances.
Typically, each instance executes on one remote machine, but there can be also several instances per remote machine as well as some instances executing on the local machine.
The generated Labelled Transition System will be stored as a partitioned BCG graph result.pbg (see below for a description of the PBG format). The resulting PBG file can later be turned into a BCG file using the bcg_merge tool.
The options caesar_opt, if any, are passed to caesar and to caesar.adt .
The options exp_opt, if any, are passed to exp.open .
The options fsp_opt, if any, are passed to fsp.open .
The options lnt_opt, if any, are passed to lnt.open .
The options seq_opt, if any, are passed to seq.open .
The options cc_opt, if any, are passed to the C compiler.
The following options distributor_opt are currently available:
i" by the various BCG tools. This elimination is usually fast (linear in
the size of the state space) and preserves branching bisimulation. Not a
default option.
$DISPLAY environment variable, which gives,
by default, the X server for opening the monitor window. An erroneous value
for display may cause distributor to abort. See X(7) for details. Not a
default option.
The options global_opt and instance_opt are described below, together with the GCF format.
Each instance corresponds to a pair (machine, directory), meaning that distributor will launch a distributed process executing on machine and storing its files in directory located on some filesystem of machine. directory is called the "working directory" of the instance.
Instances may or may not be launched on the local machine, depending on the constraints on grid usage. For instance, clusters often distinguish between one frontal node (i.e., the local machine) used to submit jobs to the cluster, and many computing nodes (i.e., the remote machines) that perform distributed computations.
Each instance is given a unique number greater or equal to 1. Numbers are assigned in the same order as instances appear in the grid configuration file. Number 0 is reserved for the process corresponding to the execution of distributor on the local machine.
If the grid configuration file contains duplicated instances (i.e., same machine and same directory), only the last one is considered, the previous ones being entirely discarded.
There should be at least two different instances. Several instances may execute on the same machine, provided that their working directories are different. Also, a working directory may be either local to its machine or shared between several machines (using NFS, Samba, etc.).
The grid configuration file also specifies the value of (predefined) variables used to control the way instances are launched and communicate with each other.
The grid configuration file has the following syntax:
<gcf> ::= <global_opt> <instance_opt>*
<global_opt> ::= <directive>*
<instance_opt> ::= <machine> <machine>* <directive>*
<machine> ::= <address-or-name> "\n"
<directive> ::= <variable> "=" <value> "\n"
<variable> ::= "buffer_size" | "cadp" | "connect_timeout"
| "directory" | "files" | "hash" | "memory"
| "port" | "rcp" | "rsh" | "time" | "user"
<value> ::= <character-string>
where:
<global_opt> is a (possibly empty) list of directives applicable to
every instance. <instance_opt> defines one or several instances together
with a (possibly empty) list of directives applicable to these instances
exclusively. <machine> is the name of a (local or remote) machine, either
given as a numerical IP address (e.g., "138.96.146.2") or as an Internet machine
name (e.g., "www.inria.fr"), followed by a newline character. <directive> is an
assignment of a <value> to a <variable>, followed by a newline character.
Any line starting with the "#" character is considered as a comment and ignored. Spaces and tabulations can be inserted before, between, or after terminal symbols.
Variables can be modified by directives as follows. First, some
variables have a default value, which will be used unless overriden by
some directive. A <directive> occurring in the <global_opt> list assigns its
<variable> for all machines. A directive occurring in a <instance_opt> list
assigns its <variable> only for the machines mentioned in this <instance_opt>,
possibly overriding the value specified for this <variable> in the <global_opt>
list.
The meaning of the different variables is the following:
buffer_size:<global_opt> list, meaning that all communication
buffers must have the same size. Maximal value is 2,147,483,648. Default
value is 65536.
cadp:
The pathname
may be the same for all machines (e.g., if the CADP toolbox is installed
on a common filesystem shared between all machines) or may be different
on each machine. In any case, the CADP toolbox should be properly installed
on the local and remote machines. Default value is given by the $CADP environment
variable.
connect_timeout:<global_opt> list, meaning that each connection must
succeed within the specified timeout. Default value is 20 seconds.
directory:This pathname can be either an absolute one (starting with a "/" character) or a relative one, in which case it is interpreted with respect to the current directory on the local machine and to the user's home directory on remote machines. It may contain spaces provided that the entire pathname is enclosed between double quotes. It should not contain the tilde character "~". Default value is the user's home directory (which is not recommended unless when using a cluster of machines).
files:This variable may specify either a single filename or a set of filenames separated by spaces. Filenames may contain the wildcard characters ("*", "?", "[", "]", ...) according to the Bourne shell conventions. Default value is empty.
hash:CAESAR_STATE_n_HASH() of the caesar_hash
library of OPEN/CAESAR. This variable can only be set in the <global_opt>
list, meaning that all instances use the same hash function. Default value
is 3.
memory:
port:
rcp:$PATH environment variable. Its command line syntax should
be the same as for the rcp(1) command, i.e.,
Default value is rcp. Other
possible values are scp, kcp, or any similar variant of rcp(1). Remote machines
should be configured in such a way that remote copy can be done automatically
without asking for a password or a passphrase; this is usually done by
setting an appropriate ".rhosts" or ".ssh/authorized_keys" file and/or launching
an SSH agent before running distributor.
There is also a special value nfs,
which indicates that all instances have the same working directory on a
filesystem shared between all machines (e.g., using NFS), so that no remote
copy is necessary. Setting variable rcp to the value nfs can only be done
in the <global_opt> list.
rsh:$PATH environment
variable. Its command line syntax should be the same as for the rsh(1) command,
i.e.,
Default value is rsh. Other possible
values are ssh, krsh, or any similar variant of rsh(1). Remote machines
should be configured in such a way that remote authentication can be done
automatically without asking for a password or a passphrase; this is usually
done by setting an appropriate ".rhosts" or ".ssh/authorized_keys" file and/or
launching an SSH agent before running distributor.
It is possible to supply
options to the command assigned to the rsh variable (such as rsh=ssh -6)
but certain options (e.g., ssh -v) should be avoided as they perturbate the
normal functioning of distributor.
time:
Alternatively, one can obtain the same
effect by setting the (undocumented) $CADP_TIME environment variable; this
is equivalent to setting in the ".gcf" file the "time" variable for all
remote instances.
user:
To provide for last-minute changes, the contents of the grid configuration file can be extended on the command line using the options global_opt and instance_opt. The grid configuration file can even be empty, in which case configuration.gcf should be replaced with "-" on the command line (in such case instance_opt should not be empty).
global_opt has the same syntax
as the non-terminal <global_opt> in the above grammar (except that some characters
meaningful to the shell must be escaped or quoted properly). If it is non-empty,
it is interpreted exactly as if its contents were inserted in the grid
configuration file, at the end of the <global_opt> list and before the first
<instance_opt>.
instance_opt has the same syntax as a possibly empty list
of non-terminals <instance_opt> (except that some characters meaningful to
the shell must be escaped or quoted properly). If it is non-empty, it is
interpreted exactly as if its contents were appended at the end of the
grid configuration file, after the last <instance_opt>.
Thus, the value of variables can be set in five different ways, listed below by increasing precedence:
<global_opt> in the grid configuration
file, <instance_opt>
in the grid configuration file,
In its simplest form, a grid configuration
file may simply list the remote machines to be used:
machine1 machine2 machine3 machine4
It is also possible to write a grid configuration file with several instances
on the same machine:
machine1
directory=/tmp/instance1
machine1
directory=/tmp/instance2
machine1
directory=/tmp/instance3
This is a more complex example involving all the features described above:
buffer_size = 32768
cadp = /usr/local/cadp
connect_timeout = 10
directory = /home/vasy/distributor
files = graph-*.bcg
hash = 4
port = 8016
rcp = scp
rsh = ssh
user = inria
machine1.domain.org
machine2.domain.org
user = vasy
machine3.domain.org
directory = /users/inria/distributor
Notice that the directive "user = vasy" applies to both machine1 and machine2.
A PBG file gathers a collection of BCG files, called "fragments" (one fragment per instance), which are either stored on the local machine in case of a shared filesystem (e.g., NFS, etc.) or stored on remote machines in the working directories used by distributor.
Taken altogether, these fragments form a partition of a Labelled Transition System, the states and transitions of which are distributed among the various fragments as specified in [GMS01]. Note that, taken individually, each fragment is usually meaningless; in particular, it may be a disconnected graph, which is never the case of a state space generated from, e.g., a LOTOS program. These fragments can be recombined using the bcg_merge tool, which also performs various actions, such as state renumbering.
Concretely, a PBG file is a text file that contains references to a GCF file and to BCG fragments. The PBG format is yet undocumented but easily readable by humans. It may evolve in the future.





It is worth keeping in mind that using the distributed monitor may slow down the state space generation.
Version 2.0 of distributor was developed by Adrian Curic (INRIA/VASY) and Gilles Stragier (INRIA/VASY).
Version 3.0 of distributor implements a modified algorithm by Christophe Joubert (INRIA/VASY). It was rewritten from scratch by Nicolas Descoubes (INRIA/VASY). Damien Bergamini (INRIA/VASY) made a few adaptations. Hubert Garavel and Radu Mateescu fixed various issues and wrote the distributor manual page.
The binary code of distributor is available in $CADP/bin.`arch`/distributor.a
The code for the distributed monitor window is available in $CADP/src/monitor/distributor.tcl
Additional information is available from the CADP Web page located at http://vasy.inria.fr
Directives for installation are given in file $CADP/INSTALLATION.
Recent changes and improvements to this software are reported and commented in file $CADP/HISTORY.
[GMS01] Hubert Garavel and Radu Mateescu and Irina Smarandache. Parallel State Space Construction for Model-Checking. In Matthew B. Dwyer, ed, Proceedings of the 8th International SPIN Workshop on Model Checking of Software SPIN'2001 (Toronto, Canada), LNCS 2057, pp. 217-234, May 2001. Revised version available as INRIA Research Report RR-4341, December 2001.