Nikita Veshchikov e-mail : nikita.veshchikov@ulb.ac.be téléphone : 02/650.58.56 bureau : 2N8.213 URL : http://student.ulb.ac.be/~nveshchi/ INFO-F-404 : Techniques avancées de systèmes d exploitation Table des matières 1 Le système HYDRA 1 1.1 IMPORTANT........................................ 1 1.2 Qu est-ce que c est?.................................... 2 1.3 Se connecter à HYDRA.................................. 2 1.4 Envoyer des fichiers sur HYDRA............................. 3 1.5 Exécuter un programme écrit en MPI sur HYDRA.................... 4 1.5.1 Comment ça marche?............................... 4 1.5.2 Le programme hello world version MPI..................... 5 1.5.3 Créer un jobfile................................... 5 1.5.4 Exécuter hello world grâce à notre jobfile................... 6 1.5.5 Exécuter hello world à la main......................... 7 1 Le système HYDRA 1.1 IMPORTANT En ce moment HYDRA est en train de déménager vers new-hydra! Une fois que vous êtes inscrit sur HYDRA, travaillez avec new-hydra. 1
1.2 Qu est-ce que c est? Le Centre de calcul a récemment installé un nouveau cluster pour le calcul intensif (High Performance Computing). HYDRA remplace ainsi ASTER, le vieux cluster Alpha, et offre aux chercheurs de l ULB et de la VUB une puissance de calcul 20 fois supérieure. Son architecture parfaitement équilibrée en fait le meilleur dans son genre pour un large éventail d applications. Les codes de calcul intensif, les programmes gourmands en mémoire, les packages hautement parallèles et les logiciels à E/S intensives, sont tous exécutés rapidement et sans à-coup. Consultez aussi https://cc.ulb.ac.be/hydra/ 1.3 Se connecter à HYDRA Pour se connecter au système HYDRA, rien de plus simple 1 : 1. Ouvrir un terminal 2. Initialiser le protocole réseau telnet (TErminal NETwork ou TELecommunication NETwork, ou encore TELetype NETwork) via la commande telnet Réponse : telnet> 3. Se connecter à HYDRA grâce à la commande telnet> open hydra.ulb.ac.be Réponse : Trying 134.184.129.57... Connected to hydra.ulb.ac.be. Escape character is ^]. Password: 1. consultez aussi https://cc.ulb.ac.be/hydra/howto/login_hydra.php 2
Last login: Mon Nov 12 18:28:31 from cable-62-205-92-158.upc.chello.be Linux for High Performance Computing This product is based on Red Hat Enterprise Linux version 4 source packages found on ftp.redhat.com. Red Hat(R) is a registered trademark of Red Hat, Inc. This disc is not a product of Red Hat, Inc. and is not endorsed by Red Hat, Inc. This is a product of Hewlett-Packard Company. ======================================================================== All user files from ASTER were copied to HYDRA. You will find your ASTER files in the directory ASTER in your homedirectory. Don t forget to clean up files you no longer need. Thank you. ======================================================================== You have mail. -sh-3.00$ Vous êtes maintenant connecté à HYDRA! Le mot de passe qui vous a été demandé est celui de votre compte ULB (c est-à-dire celui de votre boite mail). Vous pouvez désormais naviguer dans vos dossier grâce aux commandes classiques ls, cd, etc. Pour que vos programmes puissent avoir accès aux multiples nœuds d HYDRA, il est nécessaire de générer un fichier ssh. Heureusement, cette étape ne doit être réalisée qu une seule fois. Pour créer ce fichier ssh, il suffit de taper les commandes : cd ssh-keygen -t dsa<<eof EOF Cette dernière opération vient de créer le fichier /.ssh/id_dsa.pub. Il suffit maintenant de copier ce fichier vers /.ssh/authorized_keys grâce à la commande cp /.ssh/id_dsa.pub /.ssh/authorized_keys 1.4 Envoyer des fichiers sur HYDRA Pour envoyer des fichiers sur HYDRA, nous ne pouvons pas nous servir du protocole telnet. Il nous faut nous servir du protocole FTP (File Transfer Protocol pour les newbies). Pour cela, vous pouvez soit vous servir d un client FTP (recommandé), soit vous servir d un nouveau terminal de la manière suivante : 3
ordinateur-de-vincent-nelis:~ pmeumeuy$ ftp ftp> open hydra.ulb.ac.be Connected to hydra.vub.ac.be. 220 (vsftpd 2.0.1) Name (hydra.ulb.ac.be:pmeumeuy): pmeumeuy 331 Please specify the password. Password: 230 Login successful. Remote system type is UNIX. Using binary mode to transfer files. ftp> send (local-file) nom_du_fichier_local (remote-file) nom_du_fichier_sur_hydra Dans le cadre de ce TP, je vous demanderais de 1. télécharger les fichiers hello_world_mpi.c disponible sur l université virtuelle, 2. créer jobfile_hw, 3. vous connectez à HYDRA par le protocole FTP, 4. créer un nouveau dossier portant le nom MPI_test grâce à la commande FTP suivante ftp> mkdir MPI_test 5. envoyer les fichiers hello_world_mpi.c et jobfile_hw dans ce nouveau dossier. 6. executer hello_world une fois en ligne de commande et une fois à l aide de jobfile_hw 1.5 Exécuter un programme écrit en MPI sur HYDRA 1.5.1 Comment ça marche? Chaque programme interactif exécuté sur HYDRA est limité à 5 minutes de temps (d exécution) CPU. Si vos programmes nécessitent plus de temps (ou qu ils doivent être exécutés de manière distribuée, ce qui est notre cas), vous devez utiliser LSF (Load Sharing Facility). LSF est un système qui gère les processus gourmands en terme de temps CPU, de mémoire ou en autres ressources systèmes. LSF n exécutera un processus qu uniquement lorsqu il y a suffisamment de ressources disponibles pour celui-ci. Dans le cas contraire, le processus est placé dans une file d attente. Pour faire exécuter un programme par LSF, nous devons lui préciser certaines spécifications, comme par exemple le nombre de processeurs à utiliser ou encore le nom de la file d attente dans laquelle les instances du programme doivent être placées en cas de non-disponibilité de certaines 4
ressources. Pour cela, nous devons créer un fichier de spécifications que nous appellerons désormais un jobfile. Un jobfile est un fichier très similaire à un script de commande shell (on y inscrit notamment les instructions de compilations et d exécutions de notre programme), excepté que l on peut y indiquer des commandes supplémentaires nécessaires à LSF qui décrivent le programme à exécuter. 1.5.2 Le programme hello world version MPI Ce minuscule programme va nous servir d exemple dans le cadre de ce TP. Chaque instance de ce programme affiche à l écran son ID, le nombre total d instances qui ont été lancées ainsi que le nom de la machine sur laquelle l instance en cours est exécutée. Le code source est donné ci-dessous. Ce code peut être téléchargé depuis l université virtuelle où il porte le nom hello_world_mpi.cpp. #include <stdio.h> #include <mpi.h> int main(int argc; char *argv[]) { int id, nb_instance, len; char processor_name[mpi_max_processor_name]; MPI_Init(&argc, &argv); MPI_Comm_rank(MPI_COMM_WORLD, &id); MPI_Comm_size(MPI_COMM_WORLD, &nb_instance); MPI_Get_processor_name(processor_name, &len); printf ("Hello world! I m %d of %d on %s\n", id, nb_instance, processor_name); MPI_Finalize(); } 1.5.3 Créer un jobfile Voici un exemple de jobfile pour le programme hello_world_mpi.c que vous pouvez télécharger depuis l université virtuelle (et qui s appelle jobfile_hw ). #!/bin/bash -l #PBS -l nodes=4:ppn=8 #PBS -l walltime=00:02:00 5
#PBS -l pmem=2kb #PBS -j oe #PBS -N Hello #PBS -o hello_out.txt echo "Running job on $HOST - " date module load openmpi/1.4.3/gcc/4.6.1 cd $HOME/helloWorld/ mpicc hello.c -o hello mpirun./hello echo "Done" Les six premières lignes sont des spécifications MPI du programme hello_world_mpi. Ces spécifications ont la forme #PBS -option value Vous pouvez trouver la liste des options sur https://cc.ulb.ac.be/hydra/howto/prepare_jobs. php. Consultez aussi https://cc.ulb.ac.be/hydra/howto/compile_mpi.php pour les options de compilation. 1.5.4 Exécuter hello world grâce à notre jobfile Une fois que le jobfile est créé, on l envoi grâce à la commande suivante : qsub jobfile_hw Réponse : 37688.mn01.hydra.vub.ac.be Après l exécution de notre programme, nous pouvons lire les résultats (et les outputs) grâce à la commande cat filename où filename est le fichier vers lequel nous avons redirigé l output de notre programme (ici : filename est le fichier hello_out.txt ). 6
1.5.5 Exécuter hello world à la main Il est possible de compiler et d executer un program sans jobfile. Il suffit de pater les comandes suivantes : module load openmpi/1.4.3/gcc/4.6.1 mpicc hello.c -o hello mpirun -np 4./hello 7