#pragma section-numbers on #acl All:read <> = MPI IPv6 támogatás = == 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. == 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) { }}} === Tesztelés === A OpenMPI telepítője tartalmaz egy examples könyvtárat, az ebben található programot használtuk fel tesztelésre. ==== Fordítás ==== roczei@knowarc1:~/openmpi/ompi-trunk/examples$ mpicc -o hello_c hello_c.c roczei@knowarc1:~/openmpi/ompi-trunk/examples$ ==== 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$ }}} ==== 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. ==== 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. == Konklúzió == Az OpenMPI már támogatja az IPv6-ot, de ez jelenleg még fejlesztési stádiumban van.