Hi Greg

I've been running your script over and over again with the current 1.8.2 and 
svn developer's trunk, and I cannot get a failure. It just merrily runs.

Could you tell me how you configured OMPI to get this behavior?

Thanks
Ralph

On Jun 10, 2014, at 11:59 AM, Ralph Castain <r...@open-mpi.org> wrote:

> Ouch - I'll try to chase it down.I'm unaware of anyone passing a significant 
> amount of data via stdin before, so it's quite possible this has been around 
> for awhile. Normally one avoids that practice.
> 
> 
> On Jun 10, 2014, at 11:36 AM, Greg Thomsen <gthom...@arlut.utexas.edu> wrote:
> 
>> All,
>> 
>> I believe I've found a bug in the I/O forwarding portion of OpenMPI which 
>> occasionally causes mpirun to generate additional data on standard output 
>> that was not produced by the application being run.
>> 
>> The application in question reads from standard input and writes to standard 
>> output only on the rank 0 process.  All non-rank 0 processes only 
>> participate in computation and do not produce data on standard output.  The 
>> application is used in standard Unix-like pipelines like so:
>> 
>>  A | mpirun -np 4 application | B
>> 
>> Since B is looking for structured input, it is sensitive to additional data 
>> being generated.
>> 
>> While chasing down the source of this problem, I've observed the following:
>> 
>> * The problem is sensitive to timing.  Using strace to figure out where
>> the problem lies can easily hide it.  Either of the following would
>> change how the issue was expressed:
>> 
>>   A | mpirun -np 4 strace -o output.txt -e read,write application | B
>>   A | strace -ff -o output.txt -e read,write mpirun -np 4 application
>>   | B
>> 
>> While harder to state definitively, redirecting in from file and out
>> to file, rather than through pipes, also appears to hide the problem.
>> Since the workflow in question has large volumes of data, using
>> file-based I/O isn't feasible and wasn't thoroughly explored during
>> testing.
>> 
>> * It appears to be correlated to a short I/O operation.  A short read
>> from application's standard output maps to the first byte of the
>> extraneous output sent to B.  Looking at hex dumps indicates that the
>> contents of a recent buffer are inadvertently written to B.
>> 
>> The attached text case can show this.
>> 
>> * This also is an issue for forwarding standard error from the rank 0
>> process.  Modifying application so that it only writes to standard
>> error, and then redirecting standard error to standard output in the
>> shell, will still cause the problem:
>> 
>>   A | mpirun -np 4 application 2>&1 | B
>> 
>> * This seems to only occur at the end of the data stream.  The pipeline
>> in question works through records and if it occurred earlier than the
>> last, it would be noticed.  The conditions where it was seen
>> regularly always pointed to the end of the data stream.
>> 
>> The attached shell script reproduces the problem in every version of OpenMPI 
>> tested (1.5.0, 1.6.3, 1.7.4, and 1.8.1).  Without any arguments, it reads a 
>> fixed amount of data from /dev/zero and then compares the size of the output 
>> from the above pipeline.  For versions exhibiting the bug, and the above 
>> conditions, the problem should be seen within the first ~20 attempts.  For 
>> other conditions I've seen the script run for a week without problem.
>> 
>> With an input path, it reads the first 1,000,000 bytes from the path 
>> supplied.  With a fixed pattern in the data (see the compressed test input), 
>> it is easy to see that the extra data generated is a copy from earlier in 
>> the data stream.
>> 
>> Hopefully this gets someone in the right section of the code.  Let me know 
>> if additional information is needed.
>> 
>> Thanks!
>> 
>> Greg
>> <mpi_test_input.bz2><mpi-test.sh>_______________________________________________
>> devel mailing list
>> de...@open-mpi.org
>> Subscription: http://www.open-mpi.org/mailman/listinfo.cgi/devel
>> Link to this post: 
>> http://www.open-mpi.org/community/lists/devel/2014/06/14999.php
> 

Reply via email to