From MosixWiki
MOSPIPE(M1) MOSIX Commands MOSPIPE(M1)
NAME
MOSPIPE - Run pipelined jobs efficiently using Direct Communication
SYNOPSIS
mospipe [mosrun-options1] {program1+args1} [-e] [mosrun-options2]
{program2+args2} [[-e] [mosrun-options3] {program3+args3}]...
Mosrun options:
[-h|-a.b.c.d|-r{hostname}|-{nodenumber}] [-L|-l] [-F]
[-G[{n}]] [-m{mb}]
DESCRIPTION
Mospipe runs two or more pipelined programs just as a shell would run:
program1 [args1] | program2 [args2] [| program3 [args3]] ...
except that instead of pipes, the connection between the programs uses
the MOSIX feature of direct_communication(7) that makes the transfer of
data between migrated programs much more efficient.
Each program argument includes the program's space-separated arguments:
if you want to have a space (or tab, carriage-return or end-of-line) as
part of a program-name or argument, use the backslash(\) character to
quote it ('\' can quote any character, including itself).
Each program may optionally be preceded by certain mosrun(1) arguments
that control (see mosrun(1) for further details):
-h|-a.b.c.d|-r{hostname}|-{nodenumber}
On which node should the program start.
-F Whether to run even when the designated node is down.
-L|-l Whether the program should be allowed to automatically
migrate or not.
-G{n} The class of the program.
-m{mb} The amount of memory that the program requires.
The -e (or -E) argument between programs indicates that as well as the
standard-output, the standard-error of the preceding program should also
be sent to the standard-input of the following program.
If mospipe is not already running under mosrun(1), then in order to
enable direct communication it places itself under mosrun(1). In that
case it also turns on the -e flag of mosrun(1) for the programs it runs.
APPLICABILITY
Mospipe is intended to connect simple utilities and applications that
read from their standard-input and write to their standard-output (and
standard-error).
mospipe sets the MOSIX direct_communication(7) to resemble pipes, so
applications that expect to have pipes or sockets as their standard-
input/output/error and specifically applications that only use the
stdio(3) library to access those, should rarely have a problem running
under mospipe.
However, direct_communication(7) and pipes are not exactly the same, so
sophisticated applications that attempt to perform complex operations on
file-descriptors 0, 1 and 2 (such as lseek(2), readv(2), writev(2),
fcntl(2), ioctl(2), select(2), poll(2), dup(2), dup2(2), fstat(2) etc.)
are likely to fail. This regrettably includes the tcsh(1) shell.
The following anomalies should also be noted:
* mosrun(1) and native (See mosrun(1)) cannot run under mospipe:
attempts to run them will produce a "Too many open files" error.
* An attempt to write 0 bytes to the standard-output/error will create
an End-Of-File condition for the next program.
* Input cannot be read by child-processes of the receiver (open direct-
communication connections are not inheritable).
* Direct_Communication(7) should not be used by the applications (or at
least extreme caution must be used) since direct communication is
already being used by mospipe to emulate the pipe(s).
EXAMPLES
mospipe "echo hello world" wc
is like the shell-command:
echo hello world | wc
and will produce:
1 2 12
mospipe "ls /no-such-file" -e "tr [a-z\ ] [A-Z+]"
is like the shell-command:
ls /no-such-file |& tr '[a-z ]' '[A-Z+]'
and will produce:
LS:+/NO-SUCH-FILE:+NO+SUCH+FILE+OR+DIRECTORY
b=`bestnode`
mospipe "echo hello world" -$b -L bzip2 -$b -L bzcat "tr [a-z] [A-Z]"
is like the shell-command:
echo hello world | bzip | bzcat | tr '[a-z]' '[A-Z]'
It will cause both compression (bzip) and decompression (lzop -d)
to run and stay on the same and best node for maximum efficiency,
and will produce:
HELLO WORLD
SEE ALSO
direct_communication(7), mosrun(1), mosix(7).
MOSIX July 2007 MOSIX
Copyright © 1999-2008 Amnon Barak. All rights reserved.