Annexe A
Annexe
1 CONFIGURATION DE NOTRE GRAPPE
1.1 Configuration logicielle
1.1.1 OAR : gestionnaire de tâches
La première chose à savoir est l'architecture OAR.
L'installation du gestionnaire OAR est composé: - du server OAR qui
détient <l'intelligence> de OAR.
- du serveur de base de données.
- du frontal de soumission des tâches sur lequel on va se
logger pour réserver certains noeuds de calcul.
- des noeuds de calcul sur lesquels les calculs
s'exécuteront.
Etant donné qu'on fait une installation sur les
distributions Debian, on installera le paquet oar-server sur le serveur OAR, le
paquet oar-user sur le frontal de soumission et le paquet oar-node sur les
machines de calcul. On installe également mysql-server. Ajouter
environment="OAR_KEY=1" au début de la clé publique dans le
fichier oar/.ssh/authorized_keys.
Préréquis
Sur chaque noeud (serveur, frontal , calcul), les paquets
suivants doivent être installés : sudo Perl
Perl-base
openssh (serveur et client)
Sur le serveur OAR et sur le frontal, les paquets suivants
doivent être installés : Perl-Mysql Perl-DBI
MySQL
MySQL-shared
libmysql
Vers l'installation
- Ajouter un utilisateur nommé <oar> dans le groupe
< <oar> sur chaque noeud.
- Créer un ensemble de clés ssh pour l'utilisateur
<oar> en utilisant ssh-keygen. Pour notre cas, id_dsa.pub et id_dsa.
- Copier ces clés dans le dossier .ssh de l'utilisateur
<oar>
- Ajouter le contenu de 'id_dsa.pub' au fichier
oar/.ssh/authorized_keys
- Dans /.ssh/config ( créer le fichier s'il n'existe pas
), ajouter les lignes :
Host *
ForwardX11 no
StrictHostKeyChecking no
PasswordAuthentication no
AddressFamily inet
- Ajouter dans le fichier de configuration du serveur ssh
AcceptEnv OAR_CPUSET OAR_JOB_USER
PermitUserEnvironment yes
UseLogin no
AllowUsers oar
Ajouter dans le fichier ~oar/.bashrc export
PATH=/usr/local/oar/oardodo:\$PATH
On n'a plus qu'à installer les paquets OAR.
Lancer le serveur OAR en utilisant l'utilisateur <oar>.
Utiliser le script "/etc/init.d/oar-server" pour lancer le démon. Editer
le fichier /etc/oar.conf pour faire correspondre la configuration de la
grappe.
DB_TYPE=mysql
DB_HOSTNAME=localhost
DB_BASE_NAME=oar
DB_BASE_LOGIN=oar
DB_BASE_PASSWD=oar
DB_BASE_LOGIN_RO=oar_ro
SERVER_HOSTNAME=localhost
DEPLOY_HOSTNAME="127.0.0.1"
... ... ALLOWED_NETWORKS="127.0.0.1/32 0.0.0.0/0"
S'assurer que la variable d'environnement PATH contient
$PREFIX/$BINDIR de notre installation. Pour notre cas, le chemin est le chemin
par défaut /usr/local/bin.
Initialisation de la base de données
L'initialisation de la base de données (MySQL) est
effectuée en utilisant le script oar_mysql_db_init fournit avec le
paquet d'installation du serveur et stocké par défaut dans
/usr/local/sbin. Etant en root, lancer ce script .
Quelques commandes
oarnodesetting
Cette commande permet de changer l'état ou la
propriété d'un noeud ou de plusieurs ressources. -a : ajouter une
nouvelle ressource
-s : l'état à assigner au noeud :
* "Alive" : une tâche peut être lancée sur ce
noeud.
* "Absent" : L'administrateur veut enlever le noeud de la liste
un moment. * "Dead" : Le noeud ne sera pas utilisé et sera
supprimé.
-h : spécifier le nom du noeud.
-r : spécifier le numéro de la ressource.
Oarsub
Cette commande permet à l'utilisateur de soumettre une
tâche.
Oarnodes
Cette commande affiche les informations sur les ressources de la
grappe.
1.1.2 MPICH2 : bibliothèque de
communications
Pré-réquis.
Pour une installation par défaut, les
éléments suivants doivent être installés :
- Une distribution de la copie mpich2.tar.gz
- Le compilateur C
- Les compilateurs Fortran-77 , Fortran-90 et/ou C++ si on veut
écrire nos programmes dans ces langages.
- Python 2.2 ou la dernière version pour construire le
système de gestion par défaut des processus. Les
étapes d'installation.
Les étapes suivantes sont celles à appliquer pour
pouvoir installer MPICH2 en vue d'exécuter un programme parallèle
sur plusieurs machines.
1. # tar xvzf mpich2.tar.gz
2. On choisit de créer notre répertoire
d'installation avec la commande mkdir /home/user/mpich2- install. On le partage
en utilisant NFS sur toutes les machines qu'on utilisera pour lancer le
programme parallèle.
3. Choisir le répertoire de construction1 :
mkdir /tmp/user/mpich2-1.0.8p1
4. Configurer MPICH2 en spécifiant le répertoire
d'installation et exécuter le script configure dans le répertoire
source :
# cd /tmp/you/mpich2-1.0.8p1
#./configure -prefix=/home/user/mpich2-install| tee
configure.log
5. On construit MPICH2 # make | tee make.log
6. Installer les commandes MPICH2 # make install | tee
install.log
7. Ajouter le sous répertoire bin du
répertoire d'installation dans le PATH # export
PATH=/home/user/mpich2-install/bin :$PATH
Tester que tout marche bien à ce niveau en faisant
# which mpd
# which mpicc
'build directory
# which mpiexec
# which mpirun
Le résultat devrait être le sous répertoire
/home/user/mpich2-install/bin
8. MPICH2 contrairement à MPICH utilise un
gestionnaire externe de processus pour lancer un grand nombre de tâches
MPI. Il est appelé MPD qui est un anneau de daemons sur les machines
où on va exécuter nos programmes MPI. Pour des raisons de
sécurité, MPD cherche dans le répertoire de l'utilisateur
un fichier nommé .mpd.conf contenant la ligne :
# secretword=<secretword> où secretword
est une chaine de caractère qui uniquement connue par nous.
Ensuite, on rend ce fichier lisible et modifiable uniquement par nous :
# cd
# touch .mpd.conf
# chmod 600 .mpd.conf
Ensuite on utilise, un éditeur pour placer une ligne
comme :
secretword=chaine de caractères
Le premier contrôle consiste à faire à
exécuter un programme non-MPI avec le demon MPD : # mpd&
# mpiexec -n 1 /bin/hostname
# mpdallexit
Ceci doit afficher le nom de la machine locale.
9. Etant donné que l'on veuille exécuter le
programme parallèle sur plusieurs machines, on devrait lancer le daemon
MPD sur chacune de ces machines. Nous devons créer un fichier
nommé mpd.hosts qui contient la liste des noms complets des
machines, un par ligne. Ces machines seront des cibles ssh ou rsh
donc il faudrait préciser le nom complet de domaine si
nécessaire. Vérifier si on peut atteindre ces machines par
ssh : # ssh remotemachine date
qui doit afficher l'heure système de la machine
distante
Lancer les démons sur chaque certaines (ou toutes les)
machines du fichier mpd.hosts. # mpdboot -n <number to start >
-f mpd.hosts
ou
# mpdboot -n <number to start>
# mpdtrace -l
<number to start > peut être inférieur
à 1+ le nombre d'hôtes dans le fichier mpd.hosts mais ne
peut pas être plus grand.
10. Compilation d'un programme parallèle # mpicc -o
<executable> <programme.c>
11. exécution d'un programme parallèle
Après avoir lancer les daemons sur les autres machines, #
mpiexec -n <nombre de processus> <executable>
1.1.3 Serveur NFS : Network file system Installation du
serveur NFS
Pour installer le serveur NFS sous débian, il suffit de
taper la commande :
# apt-get install nfs-kernel-server Configuration du
serveur NFS.
La configuration du serveur NFS est stockée dans le
fichier /etc/exports. Ce fichier de configuration
dispose d'une page de manuel :
# man exports
Ouvrir le fichier /etc/exports et ajouter la ligne pour pouvoir
partager le repertoire d'installation de MPICH2 à toutes les machines
/home/user/mpich2 - install * (ro)
A chaque modification du fichier /etc/exports, il faut relancer
le serveur NFS pour que les modifications soient prises en compte :
# /etc/init.d/nfs-kernel-server restart
Utilisation de NFS depuis un poste client.
Si on veut que ce répertoire soit accessible à
chaque boot, il suffit de rajouter la ligne suivante dans le fichier /etc/fstab
:
serveur : /home/user/mpich2 - install
/home/user/mpich2 - install nfs defaults 0 0
1.1.4 Serveur NIS : Network information
service
Pour installer NIS sous Débian, utiliser la commande
suivante :
# apt-get install nis Configuration du
serveur.
Il faut tout d'abord vérifier que le fichier /etc/hosts
contient l'adresse IP et le nom complet du serveur : Il faut ensuite ajouter
dans le fichier /etc/defaultdomain le nom du domaine NIS : labonis
Dans le fichier /etc/ypserv.securenets, on restreint
l'utilisation du domaine NIS au domaine du réseau local.
On remplace la ligne 0.0.0.0 0.0.0.0 par : 255.255.255.0
192.168.12.0.
On modifie ensuite /etc/default/nis pour indiquer qu'il s'agit du
serveur NIS :
NISSERVER=master
On relance le serveur NIS :
# /etc/init.d/nis restart
On lance ensuite la création des bases de données
NIS avec la commande suivante :
# /usr/lib/yp/ypinit -m
Ceci va créer les fichiers partagés dans le
répertoire /var/yp/DOMAINENIS.
Configuration du client
Il faut préciser le nom du domaine NIS fichier
/etc/defaultdomain contienne le domaine NIS : labonis #vi
/etc/defauldomain labonis Dans le fichier /etc/yp.conf, on indique
l'adresse IP du serveur NIS : # vi /etc/yp.conf
ypserver 192.168.12.3
On démarre le client NIS :
# /etc/init.d/nis start
On vérifie que le fichier /etc/nsswitch.conf contient bien
les lignes suivantes :
# cat /etc/nsswitch.conf
...
passwd : compat
group : compat
shadow : compat
...
netgroup: nis
2 Code séquentiel du produit d'une matrice par un
vecteur
A la fin du fichier /etc/passwd, on rajoute la ligne suivante
:
# echo 11+ : : : : : :11 >
/etc/passwd
A la fin du fichier /etc/shadow, on rajoute la ligne suivante
:
# echo 11+ : : : : : : : :11 >
/etc/shadow
A la fin du fichier /etc/group, on rajoute la ligne suivante : #
echo 11+ : : :11 > /etc/shadow
Test
Sur le serveur NIS, on rajoute un utilisateur : # adduser
franklin
On met à jour la base de données NIS : #
/usr/lib/yp/ypinit -m
Si tout fonctionne, on doit pouvoir se logger sur un des
clients NIS avec l'utilisateur franklin.
2 Code séquentiel du produit d'une matrice par un
vecteur
... ... int main()
{
double a[SIZE][SIZE],b[SIZE],c[SIZE];
struct timeval start,end;
int i,j;
initialiser(a);
for(i=0;i<SIZE;i++) b[i]=2.0;
for(i=0;i<SIZE;i++)
{c[i]=0.0;
for(j=0;j<SIZE;j++)
c[i]=c[i]+a[i][j]*b[j];
}
....
...
|