Super ordinateurs et Linux: des histoires du CLUMEQ à l'Université Laval Sébastien Boisvert 2012-11-15 19:00 Où : Université Laval Pavillon Palasis-Prince, local 3325 (Carte) Introduction ● ● ● Étudiant/chercheur au doctorat (physiologieendocrinologie), Faculté de médecine, Université Laval (boursier IRSC 2010/09— 2013/08) Spécialiste en calcul distribué, Calcul Québec (contrat 8 h / semaine) Outils de travail: vim, git, ssh, screen Intérêts ● Passage de messages (MPI, Minix, autres) ● Noyau Linux (système RCU) ● Bioinformatique ● Régions répétées dans les génomes ● Modèles hybrides de programmation distribués Logiciels libres ● ● Membre de Debian Med (un Debian Pure Blend) Membre de Fedora Science and Technology Special Interest Group Le calcul à l'Université Laval colosse #314 top500 06/2012 7616 Intel Xeon X5560 cores Mellanox Technologies MT26428 332 kW 5 Plan ● Architecture matériel ● Réseautique Infiniband ● Système d'exploitation: Linux + GNU ● Système distribué de fichiers: Lustre ● Planificateur de tâches: Moab + Torque ● Compilateurs: GNU gcc 4.7.2 (C, C++, ...) ● Bibliothèque de passage de messages: Open-MPI 1.6.3 Architecture matériel Ordinateur ● Processeur ● Mémoire ● Stockage (et autres périphériques) Abstractions ● Processus abstrait le processeur ● Mémoire virtuelle abstrait la mémoire ● Le système virtuel de fichiers abstrait le stockage Réseautique Infiniband Infiniband ● ● ● ● Carte PCI express 0d:00.0 InfiniBand: Mellanox Technologies MT26428 [ConnectX VPI PCIe 2.0 5GT/s - IB QDR / 10GigE] (rev a0) Latence point à point: < 1 microseconde Latence point à point pour des applications: < 50 microsecondes Système d'exploitation: Linux + GNU Système d'exploitation: Linux + GNU ● Linux: noyau monolithique ● Modules chargés dynamiquement ● 2.6.18-308.16.1.el5 ● ● Modules Infiniband: mlx4_core, mlx4_ib, mlx4_en, ib_core, ib_mad Modules Lustre (client): lustre, lov, mdc, osc, ptlrpc, obdclass, lnet, lvfs, libcfs, .config ● # CONFIG_PREEMPT is not set ● # CONFIG_RCU_TORTURE_TEST is not set ● CONFIG_NUMA=y ● CONFIG_K8_NUMA=y ● CONFIG_X86_64_ACPI_NUMA=y ● # CONFIG_NUMA_EMU is not set ● CONFIG_ACPI_NUMA=y Logiciels GNU ● Gcc ● Binutils ● Coreutils ● Autoconf ● Automake Système distribué de fichiers: Lustre Rappel sur les fichiers ● Un fichier est une suite d'octets ● En pratique: ● i-noeud (i-node) ● Blocs ● Souvent: les blocs sont en extension (blocs contigüs sur le périphérique de blocs Idées de Lustre ● ● ● ● Les i-noeuds sont centralisés Les blocs sont distribués sur plusieurs serveurs Exemple: un répertoire contient 10 fichiers .iso de 700 Mo chacun Le contenu (les blocs) de chaque fichier est sur un serveur différent Lustre ● Protocole ouvert LNET (Lustre Network) ● LNET dans Infiniband ● LNET dans Myrinet ● LNET dans TCP Lustre est distribué ● 3 composantes ● 1/3: Client LOV avec interface POSIX ● LOV= Logical Object Volume ● 2/3: Serveur de méta-données (i-noeuds) MDS ● MDS= Meta Data Server ● 3/3: Serveur d'objets (blocs) OSS ● OSS= Object Storage Server Lustre: le client LOV ● Appels POSIX: ● fopen, fclose, fread, fclose ● ftell, fseek ● fgets,fputs ● Le Virtual File System (VFS) de Linux ● Module Lustre lvfs Serveur MDS ● Meta Data Server ● Contient tous les i-noeuds ● Opère des cibles Meta Data Targets ● Système de fichiers ext3 modifié ● Adresse distante des extensions dans les attributs ext3 du MDS ● Passe par là: ● fopen, fclose, fstat ● ftell, fseek Serveur d'objets ● Object Storage Server ● Contient des blocs de fichiers ● Opère des cibles Object Storage Target ● Passe par là: ● fread, fwrite, fgets, fputs Planificateur de tâches: Moab + Torque Consommation sur demande ● Consommation élastique ● Allocation annuelle en coeur-années ● Exemple: ● 250 coeur-année ● ● Correspond à 6000 (24*250) coeur-heures par jour Correspond à 2190000 (365*24*250) coeurheures pour une année Soumission de tâches ● #!/bin/bash ● #PBS -S /bin/bash ● #PBS -N Test Nom de la tâche ● #PBS -A nne-790-ab Numéro d'allocation Calcul Canada ● #PBS -l walltime=48:00:00 Temps demandé ● #PBS -l nodes=16:ppn=8 Nombre demandé d'ordinateurs ● ● cd $PBS_O_WORKDIR ● module load compilers/gcc/4.7.2 ● module load mpi/openmpi/1.6.3_gcc Chargement des modules requis ● ● mpiexec -n 128 Ray -o Test -k 31 \ Lancement de 128 processus Ray ● -p SRS011098/SRR062051_1.fastq.gz SRS011098/SRR062051_2.fastq.gz \ Commandes Moab ● msub ● showq ● checknode ● checkjob ● canceljob Torque ● Gestionnaire de ressources ● Démarrage et arrêt des jobs ● Gestion des ressources Compilateurs: GNU gcc 4.7.2 (C, C++, ...) Compilateurs ● ● ● ● Traduit un texte du langage A vers le langage B g++ peut par exemple traduire du C++ 1998 en code machine x86-64 avec la personnalité C++ de Linux En général: transforme un code source en exécutable Pour colosse: g++ -march=native -pipe -Wall -O2 GNU gcc ● Plusieurs versions disponibles ● 4.7.2 ● Support pour C++ 1998, C++ 2003, C++ 2011 ● Support pour C 1989, C 1990, C 1999, C 2011 ● Macros (#ifdef) Bibliothèque de passage de messages: Open-MPI 1.6.3 Standard MPI ● Standard Message Passing Interface ● Message Passing Interface Forum Passage de messages ● Idée: démarrer le même logiciel plein de fois (plusieurs processus) ● Processus qui s'envoient des messages ● Opérations point-à-point (1 à 1) ● Opérations collectives (tous à 1, 1 à tous, tous à tous) Open-MPI ● Implémentation du standard MPI ● Très modulaire Commandes standards ● Compilation d'un programme: ● mpicxx Programme.cpp -o Programme ● Exécution: ● mpiexec -n 48 --hostfile Hosts.txt Programme Remerciements ● LinuQ pour l'invitation ● CLUMEQ / Calcul Québec pour la visite ● Toutes les personnes qui utilisent et/ou contribuent aux logiciels libres