$ mpirun -n 1 ls -------------------------------------------------------------------------- mpirun was unable to launch the specified application as it encountered an error:
Error: pipe function call failed when setting up I/O forwarding subsystem Node: xxxxx.xxxxxxxxxx.xxxxxxxx.xx while attempting to start process rank 0. -------------------------------------------------------------------------- I receive this error constantly. I tracked it down so far that it appears now certain that the 'tcgetattr' and 'tcsetattr' calls in 'orte/mca/iof/base/iof_base_setup.c' are responsible. 'errno' is set to 22 each, which means 'invalid argument'. We can simply ignore the return values of these calls and continue, as done in the attached patch. Some simple tests suggest that everything else is fine, but I haven't tested thoroughly yet. On another system, this problem is absent. The main difference are GCC and Glibc versions. The problematic system uses GCC 4.3.4 and Glibc 2.11.1 -- which is the newest Glibc release and maybe untested yet with OpenMPI. Let me know which additional information I can provide to further analyze this issue.
diff -u -r openmpi-1.4.1/orte/mca/iof/base/iof_base_setup.c openmpi-1.4.1-patched/orte/mca/iof/base/iof_base_setup.c --- openmpi-1.4.1/orte/mca/iof/base/iof_base_setup.c 2009-12-08 21:36:41.000000000 +0100 +++ openmpi-1.4.1-patched/orte/mca/iof/base/iof_base_setup.c 2010-03-09 17:45:32.383100000 +0100 @@ -137,7 +137,9 @@ /* disable echo */ struct termios term_attrs; if (tcgetattr(opts->p_stdout[1], &term_attrs) < 0) { - return ORTE_ERR_PIPE_SETUP_FAILURE; + printf("tcgetattr failed: %i\n", errno); + printf("carrying on with fingers crossed\n"); + /* return ORTE_ERR_PIPE_SETUP_FAILURE; */ } term_attrs.c_lflag &= ~ (ECHO | ECHOE | ECHOK | ECHOCTL | ECHOKE | ECHONL); @@ -150,7 +152,9 @@ #endif ONLCR); if (tcsetattr(opts->p_stdout[1], TCSANOW, &term_attrs) == -1) { - return ORTE_ERR_PIPE_SETUP_FAILURE; + printf("tcsetattr failed: %i\n", errno); + printf("carrying on with fingers crossed\n"); + /* return ORTE_ERR_PIPE_SETUP_FAILURE; */ } #endif ret = dup2(opts->p_stdout[1], fileno(stdout));
pgppC0BYqonaA.pgp
Description: PGP signature