Contents
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.