two mpiexec questions on compatability

Pete Wyckoff pw at osc.edu
Fri May 24 17:40:06 EDT 2002


cpenney at ford.com said:
> Pete Wyckoff wrote:
> >So we use a static
> >mapping of processor# to GM port# and trust that PBS only assigns one
> >task per virtual processor.
> 
> My only comment on this is that I've seen several instances where an 
> application doesn't exit properly and since there is not implicit OS 
> teardown of connections (like with TCP) the other nodes in the process 
> just hang because they assume that the missing client is just being 
> slow.  Mpiexec handles this with -kill, but if someone else is using 
> mpirun, which has --gm-kill, but won't work if the script is killed 
> (like via a 'qdel').
> 
> It would be cool, if mpiexec could just probe for an available port 
> (checking to see if it is busy, etc.).  That would make GM ports more 
> like TCP/IP ports.

Agreed.  But it doesn't scale nicely.  Each compute node process must
know the hostname and myrinet port number of every other process, which
information is usually transmitted in the .gmpi/conf or equivalent file.
But only the localhost knows which ports on its GM device(s) are
available.  The algorithm to do this has to be global, and would go
something like:

    mpiexec: tm_spawn special executable on each node to find a free port
    mpiexec: write ~/.gmpiconf.whatever
    mpiexec: tm_spawn actual application

I just wasn't willing to do that.  If there were a mechanism by which
one Myrinet card could be used to probe port availability on other
nodes, we could use that locally on node#0.

We chastise users who still use mpirun.

The trace shows 7 messages went to the pbs_mom log file.  I'm especially
curious about the one by this subprocess:

> [pid   628] fork()                      = 2741
...
> [pid  2741] connect(4, {sin_family=AF_INET, sin_port=htons(35965), sin_addr=inet_addr("127.0.0.1")}}, 16) = -1 ECONNREFUSED (Connection refused)
> [pid  2741] osf_sigprocmask(0x1, 0x80000, 0x11fffe620) = 0
> [pid  2741] rt_sigaction(SIGCHLD, NULL, {SIG_DFL}, 8, 0) = 0
> [pid  2741] osf_sigprocmask(0x3, 0, 0)  = 524288
> [pid  2741] nanosleep({2, 0}, {2, 0})   = 0
> [pid  2741] connect(4, {sin_family=AF_INET, sin_port=htons(35965), sin_addr=inet_addr("127.0.0.1")}}, 16) = -1 ECONNREFUSED (Connection refused)
> [pid  2741] osf_sigprocmask(0x1, 0x80000, 0x11fffe620) = 0
> [pid  2741] rt_sigaction(SIGCHLD, NULL, {SIG_DFL}, 8, 0) = 0
> [pid  2741] osf_sigprocmask(0x3, 0, 0)  = 524288
> [pid  2741] nanosleep({2, 0}, {2, 0})   = 0
> [pid  2741] ioctl(2, TCGETS, 0x11fffd580) = -1 ENOTTY (Inappropriate ioctl for device)
> [pid  2741] gettimeofday({1022243485, 401566}, NULL) = 0
> [pid  2741] write(3, "05/24/2002 08:31:25;0001;   pbs_"..., 123) = 123

Any idea what was that about?

It might be easier to trace one of the pbs_mom which is not the mother
superior, but will be used to spawn a process for the job.  Unless you
can tell via the logs that the tm_spawn command never reaches the sister
nodes.

		-- Pete



More information about the mpiexec mailing list