One approach to message passing is to use pipes to connect processes running on distinct machines. These pipes, along with the proc files for each process and other control files, are mounted in a common "mp" file system.
The program looks for a file called hosts in the current directory which contains a lists of hosts to run the job on, one host per line. At the top level of the "mp" file system are the directories rank, pipe, srv, as well as a directory for each process (0...N) with 0 being the master.
The rank directory contains one file for each host, each named by the sysname of the machine, and containing the rank of the process running on the host.
The pipe directory contains mount points for pipes named by the rank of each end of the pipe seperated by an underscore. (e.g 0_1 is the pipe connecting the machines running processes 0 and 1 )
The srv directory is a union of the /srv directories from other hosts that the current host is importing pipes from.
The directories 0...N are the mount points for /proc entries of each process. They also contain the files pid, sysname and data. data being the pipe to that process. e.g to to send data to process 2 just write to mnt_pt/2/data, similarly to receive data from process 3 just read mnt_pt/3/data. Process control uses the note files.
We have the first rough prototype of the software done, it is slow and buggy but demonstrates the basic concepts. Better thought out versions will appear soon...
You will also need to patch the kernel to increase the size of the notes queue and to increase the size of the pipe buffer.
A draft of a paper on 9mp submitted to the cluster2002 conference.
Los Alamos National Laboratory directed research and development (LDRD) proposal on fault tolerant message passing using Plan 9.