1. MPI IPv6 támogatás

1.1. OpenMPI 1.2.5

Innen lehet letölteni: http://www.open-mpi.org/software/ompi/v1.2/downloads/openmpi-1.2.5.tar.gz

Az OpenMPI legújabb verzióját teszteltük le IPv6 támogatás szempontjából. A forráskód átvizsgálása után arra a következtetésre jutottunk, hogy nem tartalmaz semmilyen IPv6-al kapcsolatos forráskódot. A ./configure programhoz viszont tartozik egy IPv6 kikapcsoló opció: --disable-ipv6, ami IPv6 támogatásra utal (ez alapértelmezésben be van kapcsolva). A dokumentációja alapján akkor tudja az IPv6-ot, ha az OpenMPI alatt lévő renszer támogatja azt. Futtattunk egy tesztet, de nem sikerült ezt beigazolni.

1.2. OpenMPI trunk változat

Tovább kutatva felfedeztük azonban, hogy az OpenMPI legfrissebb subversion verziója már tartalmaz IPv6-os függvényhívásokat és IPv6 kompatbilis struct deklarációkat, például ezt: sockaddr_storage.

A trunk verziót ezzel a paranccsal lehet letölteni:

svn co http://svn.open-mpi.org/svn/ompi/trunk ompi-trunk

Fordítás után nem sikerült egyből tesztelni, mert elő jött egy hiba:

mca: base: component_find: unable to open vprotocol pessimist:
/usr/local/lib/openmpi/mca_vprotocol_pessimist.so: undefined symbol:
mca_pml_v (ignored)

A következő módosítás megoldotta a problémát:

--- opal/libltdl/ltdl.c.old     2008-03-07 13:47:39.000000000 +0100
+++ opal/libltdl/ltdl.c 2008-03-07 13:48:05.000000000 +0100
@@ -1096,7 +1096,7 @@
      lt_user_data loader_data;
      const char *filename;
 {
-  lt_module   module   = dlopen (filename, LT_LAZY_OR_NOW);
+  lt_module   module   = dlopen (filename, RTLD_GLOBAL | LT_LAZY_OR_NOW);

   if (!module)
     {

1.2.1. Tesztelés

A OpenMPI telepítője tartalmaz egy examples könyvtárat, az ebben található programot használtuk fel tesztelésre.

1.2.1.1. Fordítás

roczei@knowarc1:~/openmpi/ompi-trunk/examples$ mpicc -o hello_c hello_c.c roczei@knowarc1:~/openmpi/ompi-trunk/examples$

1.2.1.2. Konfiguráció

Machinefile létrehozása (ez a fájl tartalmazza, hogy mely gépeken fusson majd a program):

roczei@knowarc1:~/openmpi/ompi-trunk/examples$  cat ipv6-hosts
knowarc2-ipv6
knowarc1-ipv6
roczei@knowarc1:~/openmpi/ompi-trunk/examples$

1.2.1.3. Program futtatása

roczei@knowarc1:~/openmpi/ompi-trunk/examples$ mpirun -np 10 -machinefile ipv6-hosts hello_c
Hello, world, I am 3 of 10
Hello, world, I am 0 of 10
Hello, world, I am 4 of 10
Hello, world, I am 6 of 10
Hello, world, I am 1 of 10
Hello, world, I am 5 of 10
Hello, world, I am 7 of 10
Hello, world, I am 2 of 10
Hello, world, I am 8 of 10
Hello, world, I am 9 of 10
roczei@knowarc1:~/openmpi/ompi-trunk/examples$

A -np kapcsolóval lehet azt megadni, hogy az adott gépen hány példányban induljon el a program.

1.2.1.4. Teszt eredmény

A knowarc2-ipv6-os gépen a netstat a következő eredményt adta alap állapotban (ekkor nem futott OpenMPI program):

roczei@knowarc2:~/openmpi/ompi-trunk$ netstat -l
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State
tcp        0      0 *:2049                  *:*                     LISTEN
tcp        0      0 *:1859                  *:*                     LISTEN
tcp        0      0 localhost.localdoma:902 *:*                     LISTEN
tcp        0      0 *:sge_execd             *:*                     LISTEN
tcp        0      0 *:sunrpc                *:*                     LISTEN
tcp        0      0 *:auth                  *:*                     LISTEN
tcp        0      0 *:949                   *:*                     LISTEN
tcp        0      0 localhost.localdom:smtp *:*                     LISTEN
tcp6       0      0 *:ssh                   *:*                     LISTEN
udp        0      0 *:1024                  *:*
udp        0      0 *:2049                  *:*
udp        0      0 *:910                   *:*
udp        0      0 *:946                   *:*
udp        0      0 *:sunrpc                *:*
udp        0      0 knowarc2.grid.niif.:ntp *:*
udp        0      0 localhost.localdoma:ntp *:*
udp        0      0 *:ntp                   *:*
udp6       0      0 ip6-localhost:ntp       *:*
udp6       0      0 *:ntp                   *:*
Active UNIX domain sockets (only servers)
Proto RefCnt Flags       Type       State         I-Node Path
unix  2      [ ACC ]     STREAM     LISTENING     3358 /var/run/dbus/system_bus_socket
unix  2      [ ACC ]     STREAM     LISTENING     3478     /dev/printer
roczei@knowarc2:~/openmpi/ompi-trunk$

Az OpenMPI-os program 10 példányban elindul:

roczei@knowarc2:~/openmpi/ompi-trunk$ netstat -l
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State
tcp        0      0 *:2049                  *:*                     LISTEN
tcp        0      0 *:1859                  *:*                     LISTEN
tcp        0      0 *:2981                  *:*                     LISTEN
tcp        0      0 *:1190                  *:*                     LISTEN
tcp        0      0 localhost.localdoma:902 *:*                     LISTEN
tcp        0      0 *:3144                  *:*                     LISTEN
tcp        0      0 *:1450                  *:*                     LISTEN
tcp        0      0 *:2476                  *:*                     LISTEN
tcp        0      0 *:3148                  *:*                     LISTEN
tcp        0      0 *:4077                  *:*                     LISTEN
tcp        0      0 *:sge_execd             *:*                     LISTEN
tcp        0      0 *:sunrpc                *:*                     LISTEN
tcp        0      0 *:auth                  *:*                     LISTEN
tcp        0      0 *:949                   *:*                     LISTEN
tcp        0      0 *:2422                  *:*                     LISTEN
tcp        0      0 *:3801                  *:*                     LISTEN
tcp        0      0 *:3417                  *:*                     LISTEN
tcp        0      0 localhost.localdom:smtp *:*                     LISTEN
tcp        0      0 *:2078                  *:*                     LISTEN
tcp6       0      0 *:3456                  *:*                     LISTEN
tcp6       0      0 *:4131                  *:*                     LISTEN
tcp6       0      0 *:2694                  *:*                     LISTEN
tcp6       0      0 *:3590                  *:*                     LISTEN
tcp6       0      0 *:4619                  *:*                     LISTEN
tcp6       0      0 *:1388                  *:*                     LISTEN
tcp6       0      0 *:3727                  *:*                     LISTEN
tcp6       0      0 *:3508                  *:*                     LISTEN
tcp6       0      0 *:ssh                   *:*                     LISTEN
tcp6       0      0 *:3735                  *:*                     LISTEN
tcp6       0      0 *:2359                  *:*                     LISTEN
tcp6       0      0 *:4478                  *:*                     LISTEN
udp        0      0 *:1024                  *:*
udp        0      0 *:2049                  *:*
udp        0      0 *:910                   *:*
udp        0      0 *:946                   *:*
udp        0      0 *:sunrpc                *:*
udp        0      0 knowarc2.grid.niif.:ntp *:*
udp        0      0 localhost.localdoma:ntp *:*
udp        0      0 *:ntp                   *:*
udp6       0      0 ip6-localhost:ntp       *:*
udp6       0      0 *:ntp                   *:*
Active UNIX domain sockets (only servers)
Proto RefCnt Flags       Type       State         I-Node Path
unix  2      [ ACC ]     STREAM     LISTENING     3358 /var/run/dbus/system_bus_socket
unix  2      [ ACC ]     STREAM     LISTENING     3478     /dev/printer
roczei@knowarc2:~/openmpi/ompi-trunk$

Ebből jól látszik, hogy tcp6-os kapcsolatok épültek fel, amikor a hello_c program 10 példányban elindult a knowarc2-ipv6-on.

1.3. Konklúzió

Az OpenMPI már támogatja az IPv6-ot, de ez jelenleg még fejlesztési stádiumban van.

Campus6: IPv6mpi (last edited 2008-04-10 15:29:40 by localhost)