Obliczenia wielkoskalowe na Gentoo
1.
Wstęp
Gentoo to wyjątkowo konfigurowalna i nadająca się do optymalizowania dystrybucja
Linuksa, której dodatkowymi zaletami są świetna społeczność użytkowników i
deweloperów.
Gentoo dzięki technologii może stać się bezpiecznym serwerem, stacją
roboczą developera, profesjonalnym systemem biurkowym, maszyną do gier lub ...
systemem obliczeń wielkoskalowych. Dzięki swojej niemal nieograniczonej
przystosowalności można nazwać Gentoo metadystrybucją.
Ten dokument wyjaśnia jak zmienić Gentoo w system obliczeń wielkoskalowych.
Krok po kroku omówimy w nim, które pakiety należy zainstalować, a następnie jak
je skonfigurować.
Pierwszy krok to oczywiście instalacja Gentoo zgodnie ze wskazówkami spisanymi
w odpowiedniej dokumentacji.
2.
Konfigurowanie Gentoo dla klasteryzacji (ang. clustering).
Zalecane optymalizacje.
Uwaga:
W tym akapicie nawiązujemy do Podręcznika
Gentoo.
|
Podczas instalacji należy ustawić flagi USE w /etc/make.conf.
Zalecane jest wyłączenie wszystkich domyślnych zmiennych (patrz
/etc/make.profile/make.defaults) poprzez zanegowanie ich w
make.conf. Można pozostawić jedynie takie zmienne USE jak: x86, 3dnow,
gpm, mmx, nptl, nptlonly, sse, ncurses, pam and tcpd. Więcej informacji można
znaleźć w dokumentacji flag USE.
Listing 2.1: Flagi USE |
USE="-oss 3dnow -apm -arts -avi -berkdb -crypt -cups -encode -gdbm -gif gpm
-gtk -imlib -java -jpeg -kde -gnome -libg++ -libwww -mikmod mmx -motif -mpeg
ncurses -nls nptl nptlonly -oggvorbis -opengl pam -pdflib -png -python -qt3
-qt4 -qtmt -quicktime -readline -sdl -slang -spell -ssl -svga tcpd -truetype -X
-xml2 -xv -zlib"
|
Lub po prostu:
Listing 2.2: Flagi USE - wersja uproszczona |
USE="-* 3dnow gpm mmx ncurses pam sse tcpd"
|
Uwaga:
Należy zauważyć, że flaga tcpd podnosi bezpieczeństwo, podobnie jak flaga
xinetd.
|
Dla wielkoskalowego systemu polecamy wybranie jądra vanilla-sources ze względu
na jego dużą stabilność, o ile nie są potrzebne dodatkowe łatki, zawierające np.
obsługę XFS. Źródła tego jądra można pobrać ze strony
http://www.kernel.org/.
Listing 2.3: Instalowanie jądra vanilla-sources |
# emerge -p syslog-ng vanilla-sources
|
Polecamy zainstalowanie następujących pakietów:
Listing 2.4: Instalowanie potrzebnych pakietów |
# emerge -p nfs-utils portmap tcpdump ssmtp iptables xinetd
|
Warstwa komunikacyjna (sieć TCP/IP).
Klaster wymaga warstwy komunikacyjnej do łączenia węzłów podrzędnych z węzłem
głównym. Zwykle Fast Ethernet lub Giga Ethernet LAN mogą być użyte ponieważ mają
dobry stosunek cena/jakość. Inne możliwości uwzględniają użycie produktów
takich jak: Myrinet, QsNet lub innych.
Zwykle klaster składa się z węzła głównego oraz kilku węzłów podrzędnych.
Węzeł główny jest serwerem klastra. Jest on odpowiedzialny za wyznaczanie zadań
dla węzłów podrzędnych. Serwer zwykle ma uruchomione takie demony jak:
dhcpd, nfs, pbs-server i pbs-sched. Węzeł główny będzie pozwalał na
interakcyjne sesje dla użytkowników oraz będzie zatwierdzał wykonywanie zadań.
Węzły podrzędne nasłuchują instrukcji (poprzez ssh/rsh) z węzła głównego.
Powinny one być poświęcone na opracowywanie wyników, a zatem nie powinny
mieć uruchomionych żadnych niepotrzebnych usług.
Skonfigurujemy teraz plik hosts dla naszego klastra. Każdy węzeł powinien
posiadać plik hosts (/etc/hosts) z wpisami dla każdego węzła
będącego w klastrze.
Listing 2.5: /etc/hosts |
# Adelie Linux Research & Development Center
# /etc/hosts
127.0.0.1 localhost
192.168.1.100 master.adelie master
192.168.1.1 node01.adelie node01
192.168.1.2 node02.adelie node02
|
Aby ustawić sieć LAN oddaną naszemu klastrowi należy zedytować plik
/etc/conf.d/net na węźle głównym.
Listing 2.6: /etc/conf.d/net |
# Global config file for net.* rc-scripts
# This is basically the ifconfig argument without the ifconfig $iface
#
iface_eth0="192.168.1.100 broadcast 192.168.1.255 netmask 255.255.255.0"
# Network Connection to the outside world using dhcp -- configure as required for you network
iface_eth1="dhcp"
|
W końcu ustawiamy demon DHCP na węźle głównym, dzięki czemu unikniemy
konfigurowania sieci na każdym z węzłów podrzędnych.
Listing 2.7: /etc/dhcp/dhcpd.conf |
# Adelie Linux Research & Development Center
# /etc/dhcp/dhcpd.conf
log-facility local7;
ddns-update-style none;
use-host-decl-names on;
subnet 192.168.1.0 netmask 255.255.255.0 {
option domain-name "adelie";
range 192.168.1.10 192.168.1.99;
option routers 192.168.1.100;
host node01.adelie {
# MAC address of network card on node 01
hardware ethernet 00:07:e9:0f:e2:d4;
fixed-address 192.168.1.1;
}
host node02.adelie {
# MAC address of network card on node 02
hardware ethernet 00:07:e9:0f:e2:6b;
fixed-address 192.168.1.2;
}
}
|
NFS/NIS.
Network File System (NFS) został stworzony, aby umożliwić komputerom
zamontowanie partycji z maszyny zdalnej, tak jakby była ona na lokalnym
dysku, co pozwala na szybkie i jednolite współdzielenie plików w całej sieci.
Są inne systemy, które dają podobne możliwości jak NFS i które również mogłyby
zostać użyte w środowisku klastra. Andrew
File System od IBM, którego kod został ostatnio otwarty to dobry
mechanizm do współdzielenia plików z pewnymi dodatkowymi funkcjami
bezpieczeństwa oraz wydajności. Coda
File System jest ciągle rozwijany. Jest to system zaprojektowany do
dobrego współdziałania z odłączonymi klientami. Wiele cech systemów plików
Andrew i Coda na pewno zostanie włączonych do następnej wersji NFS (wersja 4). Zaletą NFS jest fakt, że jest
to system bardzo dopracowany i przez wielu uznawany już za standard, a ponadto
powszechnie znany oraz obsługiwany na bardzo wielu różnych architekturach.
Listing 2.8: Ebuildy dające obsługę NFS |
# emerge -p nfs-utils portmap
# emerge nfs-utils portmap
|
Należy skonfigurować i zainstalować jądro aby wspierało NFS v3 na wszystkich
węzłach:
Listing 2.9: Wymagane dla NFS opcje konfiguracji jądra |
CONFIG_NFS_FS=y
CONFIG_NFSD=y
CONFIG_SUNRPC=y
CONFIG_LOCKD=y
CONFIG_NFSD_V3=y
CONFIG_LOCKD_V4=y
|
Na węźle głównym należy edytować plik /etc/hosts.allow i
zezwolić na połączenia z węzłów podrzędnych. Jeśli sieć klastra jest na
192.168.1.0/24, to hosts.allow będzie tak wyglądał:
Listing 2.10: hosts.allow |
portmap:192.168.1.0/255.255.255.0
|
Następnie należy edytować plik /etc/exports węzła głównego, aby
wyeksportować strukturę katalogu roboczego (odpowiedni do tego jest np. /home).
Listing 2.11: /etc/exports |
/home/ *(rw)
|
Skrypt nfs powinien znaleźć się na domyślnym poziomie uruchomieniowym:
Listing 2.12: Dodawanie NFS do domyślnego poziomu uruchamiania |
# rc-update add nfs default
|
Aby móc montować wyeksportowany system plików nfs z głównego węzła należy
odpowiednio skonfigurować także węzły podrzędne. W tym celu do
/etc/fstab dodajemy taką linię:
Listing 2.13: /etc/fstab |
master:/home/ /home nfs rw,exec,noauto,nouser,async 0 0
|
Potrzebujemy jeszcze ustawić wszystkie węzły, aby mogły montować system plików
nfs. Dokonuje się tego następującym poleceniem:
Listing 2.14: Dodanie nfsmount do domyślnego poziomu uruchamiania |
# rc-update add nfsmount default
|
RSH/SSH.
SSH to protokół umożliwiające bezpieczne zdalne logowanie oraz dostarczający
wielu innych usług sieciowych. OpenSSH zapewnia bezpieczną autoryzację poprzez
klucz publiczny i prywatny. Klucz publiczny jest współdzielony na wszystkich
systemach, prywatny znajduje się tylko w lokalnym komputerze. Aby z nich
korzystać należy najpierw skonfigurować klaster OpenSSH.
Proces wdrażania systemu kluczy w klastrze składa się z dwóch etapów:
- Generowania klucza publicznego i prywatnego,
- oraz kopiowania klucza publicznego na węzły podrzędne
Klucze generuje się w ten sposób:
Listing 2.15: Uwierzytelnianie klucza SSH |
# ssh-keygen -t dsa
Generating public/private dsa key pair.
Enter file in which to save the key (/root/.ssh/id_dsa): /root/.ssh/id_dsa
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_dsa.
Your public key has been saved in /root/.ssh/id_dsa.pub.
The key fingerprint is:
f1:45:15:40:fd:3c:2d:f7:9f:ea:55:df:76:2f:a4:1f root@master
# scp /root/.ssh/id_dsa.pub node01:/root/.ssh/authorized_keys
root@master's password:
id_dsa.pub 100% 234 2.0MB/s 00:00
# scp /root/.ssh/id_dsa.pub node02:/root/.ssh/authorized_keys
root@master's password:
id_dsa.pub 100% 234 2.0MB/s 00:00
|
Uwaga:
Klucze hosta muszą mieć pustą frazę kodującą hasła. RSA jest wymagane dla
uwierzytelnienia hosta.
|
By umożliwić uwierzytelnianie hosta trzeba również edytować plik
/etc/ssh/shosts.equiv.
Listing 2.16: /etc/ssh/shosts.equiv |
node01.adelie
node02.adelie
master.adelie
|
Oraz wykonać kilka zmian w pliku /etc/ssh/sshd_config:
Listing 2.17: Konfiguracja sshd |
# $OpenBSD: sshd_config,v 1.42 2001/09/20 20:57:51 mouring Exp $
# This sshd was compiled with PATH=/usr/bin:/bin:/usr/sbin:/sbin
# This is the sshd server system-wide configuration file. See sshd(8)
# for more information.
# HostKeys for protocol version 2
HostKey /etc/ssh/ssh_host_rsa_key
|
Jeśli program wymaga komunikacji RSH, należy zainstalować net-misc/netkit-rsh i
sys-apps/xinetd.
Listing 2.18: Instalowanie potrzebnych programów |
# emerge -p xinetd
# emerge xinetd
# emerge -p netkit-rsh
# emerge netkit-rsh
|
Potem konfigurujemy demona rsh. W tym celu edytujemy plik
/etc/xinet.d/rsh.
Listing 2.19: rsh |
# Adelie Linux Research & Development Center
# /etc/xinetd.d/rsh
service shell
{
socket_type = stream
protocol = tcp
wait = no
user = root
group = tty
server = /usr/sbin/in.rshd
log_type = FILE /var/log/rsh
log_on_success = PID HOST USERID EXIT DURATION
log_on_failure = USERID ATTEMPT
disable = no
}
|
A następnie plik /etc/hosts.allow i zezwalamy na połączenia rsh.
Listing 2.20: hosts.allow |
# Adelie Linux Research & Development Center
# /etc/hosts.allow
in.rshd:192.168.1.0/255.255.255.0
|
Lub po prostu możemy zaufać sieci LAN klastra:
Listing 2.21: hosts.allow |
# Adelie Linux Research & Development Center
# /etc/hosts.allow
ALL:192.168.1.0/255.255.255.0
|
W końcu konfigurujemy uwierzytelnianie hosta w /etc/hosts.equiv.
Listing 2.22: hosts.equiv |
# Adelie Linux Research & Development Center
# /etc/hosts.equiv
master
node01
node02
|
Potem należy dodać xinetd do domyślnego poziomu uruchamiania:
Listing 2.23: Dodawanie xinetd do domyślnego poziomu uruchamiania |
# rc-update add xinetd default
|
NTP.
Network Time Protocol (NTP) jest używany do synchronizacji czasu
komputera klienta lub serwera do innego serwera lub innego odnośnika źródła
czasu, jak np. odbiornik radiowy, satelitarny lub modem. Dostarcza ono
dokładność rzędu milisekund w sieci LAN i do kilkudziesięciu milisekund w sieci
WAN w odniesieniu do czasu uniwersalnego (UTC), poprzez na przykład satelitarny
program lokalizujący GPS. Typowe ustawienia NTP wykorzystują wielorakie
rezerwowe serwery oraz różnorodne ścieżki sieciowe, co zapewnia wysoką
dokładność i rzetelność wyniku.
Należy wybrać najbliższy geograficznie serwer NTP ze strony NTP
Time Servers oraz skonfigurować pliki /etc/conf.d/ntp i
/etc/ntp.conf na węźle głównym.
Listing 2.24: Główny /etc/conf.d/ntp |
# /etc/conf.d/ntpd
# NOTES:
# - NTPDATE variables below are used if you wish to set your
# clock when you start the ntp init.d script
# - make sure that the NTPDATE_CMD will close by itself ...
# the init.d script will not attempt to kill/stop it
# - ntpd will be used to maintain synchronization with a time
# server regardless of what NTPDATE is set to
# - read each of the comments above each of the variable
# Comment this out if you dont want the init script to warn
# about not having ntpdate setup
NTPDATE_WARN="n"
# Command to run to set the clock initially
# Most people should just uncomment this line ...
# however, if you know what you're doing, and you
# want to use ntpd to set the clock, change this to 'ntpd'
NTPDATE_CMD="ntpdate"
# Options to pass to the above command
# Most people should just uncomment this variable and
# change 'someserver' to a valid hostname which you
# can aquire from the URL's below
NTPDATE_OPTS="-b ntp1.cmc.ec.gc.ca"
##
# A list of available servers is available here:
# http://www.eecis.udel.edu/~mills/ntp/servers.html
# Please follow the rules of engagement and use a
# Stratum 2 server (unless you qualify for Stratum 1)
##
# Options to pass to the ntpd process that will *always* be run
# Most people should not uncomment this line ...
# however, if you know what you're doing, feel free to tweak
#NTPD_OPTS=""
|
Następnie edytujemy plik /etc/ntp.conf na węźle głównym, aby
ustawić zewnętrzne źródło synchronizacji:
Listing 2.25: Główny ntp.conf |
# Adelie Linux Research & Development Center
# /etc/ntp.conf
# Synchronization source #1
server ntp1.cmc.ec.gc.ca
restrict ntp1.cmc.ec.gc.ca
# Synchronization source #2
server ntp2.cmc.ec.gc.ca
restrict ntp2.cmc.ec.gc.ca
stratum 10
driftfile /etc/ntp.drift.server
logfile /var/log/ntp
broadcast 192.168.1.255
restrict default kod
restrict 127.0.0.1
restrict 192.168.1.0 mask 255.255.255.0
|
Później na wszystkich węzłach podrzędnych ustawiamy źródło synchronizacji tak
jak na węźle głównym.
Listing 2.26: Węzeł /etc/conf.d/ntp |
# /etc/conf.d/ntpd
NTPDATE_WARN="n"
NTPDATE_CMD="ntpdate"
NTPDATE_OPTS="-b master"
|
Listing 2.27: Węzeł ntp.conf |
# Adelie Linux Research & Development Center
# /etc/ntp.conf
# Synchronization source #1
server master
restrict master
stratum 11
driftfile /etc/ntp.drift.server
logfile /var/log/ntp
restrict default kod
restrict 127.0.0.1
|
Następnie na wszystkich węzłach należy dodać demon ntpd do domyślnego poziomu
uruchamiania:
Listing 2.28: Dodawanie demona ntpd do domyślnego poziomu uruchamiania |
# rc-update add ntpd default
|
Uwaga:
NTP nie zaktualizuje zegara lokalnego jeśli różnica czasu pomiędzy źródłem
synchronizacji, a czasem lokalnym jest zbyt duża.
|
Iptables.
Do ustawienia zapory ogniowej w klastrze będziemy potrzebować iptables.
Listing 2.29: Instalowanie iptables |
# emerge -p iptables
# emerge iptables
|
Wymagana konfiguracja jądra:
Listing 2.30: Konfigurowanie jądra dla iptables |
CONFIG_NETFILTER=y
CONFIG_IP_NF_CONNTRACK=y
CONFIG_IP_NF_IPTABLES=y
CONFIG_IP_NF_MATCH_STATE=y
CONFIG_IP_NF_FILTER=y
CONFIG_IP_NF_TARGET_REJECT=y
CONFIG_IP_NF_NAT=y
CONFIG_IP_NF_NAT_NEEDED=y
CONFIG_IP_NF_TARGET_MASQUERADE=y
CONFIG_IP_NF_TARGET_LOG=y
|
A to reguły wymagane dla naszej zapory ogniowej:
Listing 2.31: rule-save |
# Adelie Linux Research & Development Center
# /var/lib/iptables/rule-save
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -s 192.168.1.0/255.255.255.0 -i eth1 -j ACCEPT
-A INPUT -s 127.0.0.1 -i lo -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -j LOG
-A INPUT -j REJECT --reject-with icmp-port-unreachable
COMMIT
*nat
:PREROUTING ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A POSTROUTING -s 192.168.1.0/255.255.255.0 -j MASQUERADE
COMMIT
|
Następnie na wszystkich węzłach należy dodać iptables do domyślnego poziomu
uruchamiania:
Listing 2.32: Dodawanie iptables do domyślnego poziomu uruchamiania |
# rc-update add iptables default
|
3.
Narzędzia HPC.
OpenPBS.
Portable Batch System (PBS) jest elastycznym systemem nadzorującym
kolejkowanie prac wsadowych oraz obciążenie pracą, który pierwotnie został
opracowany dla NASA. Operuje ono na sieciowych wieloplatformowych środowiskach
UNIX, włącznie z niejednorodnymi klastrami stacji roboczych, superkomputerów
oraz w operacyjnych komputerach masywnie równoległych (massive parallel
systems). PBS jest rozwijany przez Altair Grid Technologies.
Listing 3.1: Instalowanie openpbs |
# emerge -p openpbs
|
Uwaga:
Ebuild OpenPBS w chwili obecnej nie ustawia poprawnie uprawnień w
katalogach var używanych przez OpenPBS.
|
Przed rozpoczęciem użytkowania OpenPBS wymagane są zatem pewne zmiany w
konfiguracji. Pliki, których ustawienia będziemy musieli dostosować to:
- /etc/pbs_environment
- /var/spool/PBS/server_name
- /var/spool/PBS/server_priv/nodes
- /var/spool/PBS/mom_priv/config
- /var/spool/PBS/sched_priv/sched_config
Przykładowy sched_config:
Listing 3.2: /var/spool/PBS/sched_priv/sched_config |
#
# Create queues and set their attributes.
#
#
# Create and define queue upto4nodes
#
create queue upto4nodes
set queue upto4nodes queue_type = Execution
set queue upto4nodes Priority = 100
set queue upto4nodes resources_max.nodect = 4
set queue upto4nodes resources_min.nodect = 1
set queue upto4nodes enabled = True
set queue upto4nodes started = True
#
# Create and define queue default
#
create queue default
set queue default queue_type = Route
set queue default route_destinations = upto4nodes
set queue default enabled = True
set queue default started = True
#
# Set server attributes.
#
set server scheduling = True
set server acl_host_enable = True
set server default_queue = default
set server log_events = 511
set server mail_from = adm
set server query_other_jobs = True
set server resources_default.neednodes = 1
set server resources_default.nodect = 1
set server resources_default.nodes = 1
set server scheduler_iteration = 60
|
Aby przedłożyć zadanie OpenPBS należy użyć polecenia qsub z
opcjonalnymi parametrami. W przykładzie poniżej, "-l" pozwala określić wymagane
zasoby, "-j" zapewnia przekierowanie wyjścia standardowego oraz standardowego
raportowania błędów, a "-m" wysyła e-mail do użytkownika przy rozpoczęciu (b),
zakończeniu (e) i anulowaniu (a) zadania.
Listing 3.3: Przedkładanie zadania |
# qsub -l nodes=2 -j oe -m abe myscript
|
Zwykle zadania dla OpenPBS są przedkładane w formie skryptów. Istnieje również
funkcja ręcznego wykonywania poleceń dla celów testowych. Aby zażądać
interaktywnej powłoki od OpenPBS należy podać parametr "-I".
Listing 3.4: Żądanie interaktywnej powłoki |
# qsub -I
|
Aby sprawdzić stan zadań należy wykonać polecenie qstat:
Listing 3.5: Sprawdzanie stanu zadań |
# qstat
Job id Name User Time Use S Queue
------ ---- ---- -------- - -----
2.geist STDIN adelie 0 R upto1nodes
|
MPICH.
Przesyłanie komunikatów jest paradygmatem używanym szeroko w pewnych klasach
maszyn pracujących równolegle, szczególnie na tych z pamięcią rozproszoną. MPICH
jest darmową, przenośną implementacją MPI, czyli standardu do bibliotek
przesyłania komunikatów.
Stworzony przez Adelie Linux ebuild mpich pozwala na użycie 2 flag USE:
doc i crypt. doc spowoduje zainstalowanie dokumentacji, a
crypt skonfiguruje MPICH, aby używał ssh zamiast rsh.
Listing 3.6: Instalowanie programu mpich |
# emerge -p mpich
# emerge mpich
|
Może być również konieczne wyeksportowanie katalogu roboczego mpich na wszystkie
węzły podrzędne w /etc/exports:
Listing 3.7: /etc/exports |
/home *(rw)
|
Większość operacyjnych komputerów masywnie równoległych (ang. massively parallel
processors) daje możliwość uruchomienia programu na żądanej przez nas liczbie
procesorów. mpirun robi użytek z odpowiedniego polecenia kiedykolwiek
jest to możliwe. Z drugiej strony klastry złożone ze stacji roboczych wymagają
aby każdy proces w równoległym zadaniu został uruchomiony oddzielnie, pomimo że
istnieją programy, które pomagają start tym procesom. Ponieważ klastry stacji
roboczych nie są jeszcze tak zorganizowane jak MPP, więc dodatkowa informacja
jest wymagana aby zrobić z nich użytek. Mpich powinno być zainstalowane z listą
uczestniczących stacji roboczych w pliku machines.LINUX, który się
znajduje w katalogu /usr/share/mpich/. Ten plik jest używany przez
mpirun do wybierania procesorów na których będzie dane zadanie
wykonywane.
Należy edytować ten plik, tak by odpowiadał on konfiguracji sieci klastra:
Listing 3.8: /usr/share/mpich/machines.LINUX |
# Change this file to contain the machines that you want to use
# to run MPI jobs on. The format is one host name per line, with either
# hostname
# or
# hostname:n
# where n is the number of processors in an SMP. The hostname should
# be the same as the result from the command "hostname"
master
node01
node02
# node03
# node04
# ...
|
Później należy użyć skryptu tstmachines w /usr/sbin/ aby
się upewnić, że możemy używać wszystkich maszyn, które wcześniej zostały wpisane
do pliku machines.LINUX. Ten skrypt wykonuje rsh i wyświetla krótką
zawartość katalogu; te testy sprawdzają czy obie maszyny mają dostęp do węzła
i czy program w katalogu bieżącym jest widoczny na węźle zdalnym. Jeśli są
jakiekolwiek problemy, to zostaną one wyświetlone. Te problemy muszą być
naprawione zanim przystąpimy do nastepnego kroku.
Jedynym parametrem dla tstmachines jest nazwa architektury, która jest
taka sama jak rozszerzenie w pliku machines. Dla przykładu, następujące
polecenie sprawdza czy program z katalogu bieżącego może być uruchomiony przez
wszystkie maszyny, które są na liście maszyn LINUX.
Listing 3.9: Uruchamianie testu |
# /usr/local/mpich/sbin/tstmachines LINUX
|
Uwaga:
Ten program pracuje w trybie dyskretnym; jeśli chcemy zobaczyć co on wykonuje,
możemy użyć argumentu -v (tryb szczegółowego informowania o wszystkim):
|
Listing 3.10: Uruchamianie testu ze szczogółowymi informacjami |
# /usr/local/mpich/sbin/tstmachines -v LINUX
|
Wynik tego polecenia może wyglądać tak jak poniżej:
Listing 3.11: Wynik powyższego polecenia |
Trying true on host1.uoffoo.edu ...
Trying true on host2.uoffoo.edu ...
Trying ls on host1.uoffoo.edu ...
Trying ls on host2.uoffoo.edu ...
Trying user program on host1.uoffoo.edu ...
Trying user program on host2.uoffoo.edu ...
|
Jeśli tstmachines znajdzie problem, zasugeruje on możliwe przyczyny i
rozwiązania tego problemu. W skrócie wykonuje on 3 testy:
-
Czy procesy mogą być wykonywane na zdalnych komputerach? tstmachines
próbuje uruchomić polecenie powłoki true na każdej maszynie, która jest
na liście.
-
Czy bieżący katalog jest dostępny dla wszystkich komputerów? Spróbuje
poleceniem ls wyświetlić plik, który wcześniej utworzy.
-
Czy programy użytkownika mogą być uruchamiane na zdalnych systemach?
sprawdza czy biblioteki współdzielone i inne komponenty są poprawnie
zaintalowane na wszystkich komputerach.
Wymagany test dla każdego narzędzia programistycznego:
Listing 3.12: Testowanie narzędzia programistycznego |
# cd ~
# cp /usr/share/mpich/examples1/hello++.c ~
# make hello++
# mpirun -machinefile /usr/share/mpich/machines.LINUX -np 1 hello++
|
Aby uzyskać więcej informacji o MPICH należy zajrzeć do dokumentacji na http://www-unix.mcs.anl.gov/mpi/mpich/docs/mpichman-chp4/mpichman-chp4.htm.
LAM.
(Wkrótce)
OMNI.
(Wkrótce)
4.
Bibliografia
Oryginalny dokument został opublikowany na stronie Adelie Linux R&D Centre,
oraz jest powielony tu za zgodą autorów i Cyberlogic's Adelie Linux R&D
Centre.
-
http://www.gentoo.org, Gentoo Foundation, Inc.
-
http://www.adelielinux.com,
Adelie Linux Research and Development Centre
-
http://nfs.sourceforge.net,
Linux NFS Project
-
http://www-unix.mcs.anl.gov/mpi/mpich/,
Mathematics and Computer Science Division, Argonne National Laboratory
-
http://ntp.org
-
http://www.eecis.udel.edu/~mills/,
David L. Mills, University of Delaware
-
http://www.ietf.org/html.charters/secsh-charter.html,
Secure Shell Working Group, IETF, Internet Society
-
http://www.linuxsecurity.com/,
Guardian Digital
-
http://www.openpbs.org/,
Altair Grid Technologies, LLC.
|