Transcript PM2 : Quoi d’neuf docteur
Supports d’exécution parallèles et répartis Raymond Namyst
LaBRI Université de Bordeaux I
Jean-François Méhaut
GRIMAAG Université des Antilles-Guyane
Plan
Introduction Supports d’exécution, environnements, middlewares, intergiciels, … Communications dans les grappes (RN) Technologies, interfaces, hétérogène,… Multithreading (JFM) Rappels, exploitation des SMP, … Grilles de calcul (JFM) Toolkit Globus, gestion de ressources,…
Programmation parallèle et répartie
Conception Modélisation Algorithmique Langage Compilation Exécution Gestion d’activités Communications Mise au point Régulation de charge Gestion de données Sécurité … Proc. 0 Application Programme parallèle Proc. 1 Proc. 2 Proc. 3
Supports et environnements d’exécution (1)
Pour les utilisateurs et leurs applications Abstractions de haut niveau Portabilité Efficacité !
Applications Interface de programmation (API) Support d’exécution Systèmes d’exploitation (OS) Grappes, grilles, machines parallèles, réseaux,…
Supports et environnements d’exécution (2)
Etendre et spécialiser les OS Centralisés et complétés pour le “distribué” Nouveaux modèles (tâches, communication, fichiers,…) Exemple: Stockage de fichiers, réplication, cache, … Applications Interface de programmation (API) Support d’exécution Systèmes d’exploitation (OS) Grappes, grilles, machines parallèles, réseaux
Discussions
Souplesse par rapport à des développement au niveau système Définition d’interface standard Exemples: POSIX Threads, MPI, CORBA, OpenMP… Difficulté de faire évoluer les standards Implémentation basée sur des standards Exemple: Globus-MDS basé sur LDAP
Compromis à trouver
Fonctionalités X Portabilité Efficacité
PM2 : support pour les grappes
Applications Régulation HPF, C* C++//, Java Interface de programmation (RPC, migration, allocation iso-adresse) Marcel PM2 Madeleine Unix (~10 versions) Architecture (grappes, machines parallèles) Légende Marcel : noyau de processus légers Madeleine : module de communication
Globus : support pour les grilles
Applications
GlobusView DUROC MPI
Boite à outils Application
Condor-G HPC++ Nimrod/G Testbed Status globusrun I/O Nexus MDS
Services de la Grille
GSI GSI-FTP HBM GRAM GASS Condor LSF MPI PBS NQE
Base de la Grille
Linux NT Solaris TCP UDP DiffServ
Communications dans les grappes hautes performances
Raymond Namyst LaBRI Université de Bordeaux I
Plan
Technologies matérielles Ethernet, Myrinet, SCI Interfaces de bas niveau BIP, SISCI, VIA Interfaces de haut niveau MPI et les communications irrégulières Interfaces de niveau intermédiaire FM, Madeleine Vers les grappes hétérogènes…
Technologies matérielles
Cartes passives, actives, réseaux à capacité d’adressage
(Fast|Giga)-Ethernet
Interconnexion Hub ou switch Câblage Cuivre ou fibre optique Latence ~20 µs Débit 100 Mb/s et 1Gb/s Note Compatibilité avec l’Ethernet classique
Hub Switch
Ethernet
Cartes passives (sauf Giga-Ethernet) Interfaces : TCP, SBP, GAMMA, VIA, … Memory TX-ring PCI Bus PCI Bridge DMA TX reg RX reg Packet Interface NIC Network
Myrinet
Société Myricom (C. Seitz) Interconnexion Switch Câblage Nappes courtes Cartes équipées d’un processeur Latence 1~2 µs Débit 1 Gb/s Note Durée de vie limitée des messages (50 ms) LANai
Myrinet
Routage Réseau commuté, routage wormhole Carte programmable Protocoles de transmission « intelligents » Stratégie adaptée à la taille des messages Déclenchement d’interruptions PCI Bus PCI Bridge DMA NIC SRAM RISC Packet Interface LANai Network
SCI
S calable C oherent I nterface Norme IEEE (1993) Société Dolphin Fonctionnement par accès mémoire distants Projections d’espaces d’adressage
Mémoire Bus PCI Machine A Réseau SCI Machine B Bus PCI Mémoire
Carte à capacité d ’addressage
BUS PCI Pci req: addr+ data TLB Paquet SCI Interface paquet Partie émission Interface paquet BUS PCI TLB Paquet SCI Pci req: addr+ data Partie réception
Adressage à distance
Projections e ffectués par le pilote (SISCI) Zones de mémoire physiques souvent spécifiques Accès mémoire effectués par le processeur Le processeur distant n’est pas (forcément) interrompu
Processus A Processus B
Espace d'adressage virtuel Bus PCI PCI-SCI Interconnexion SCI PCI-SCI Bus PCI Mémoire physique Espace d'adressage virtuel
SCI : mécanisme d’adressage
Table de Translation des Adresses 16 bits Destinataire 30 bits Adresse Virtuelle MMU 32 bits Adresse Physique (E/S) Bus d’E/S 32 bits 10 bits 18 bits 18 bits Réseau
SCI : mécanisme d’adressage
30 bits Réseau 18 bits Adresse Physique (E/S) Bus d’E/S 32 bits Mémoire
SCI : performances
Latence : 2.5 m s (écriture de processus à processus) Débit : Verrou : 45 Mo/s < 10 m s (fetch&add)
Interfaces de bas niveau
BIP, SISCI, VIA
Communications performantes
Comment exploiter les réseaux rapides ?
Faible latence Quelques microsecondes Bande passante élevée De l’ordre du Gb/s Tendance actuelle Interaction directe avec la carte réseau Communication en « mode utilisateur » Transmissions zéro-copie La carte récupère/dépose les données au bon endroit
Interfaces
Initialisation Réservée au système Uniquement en début de session Transferts Directs depuis l’espace utilisateur Pas d’appels systèmes Pas de transitions Transmissions zéro copie
Programme Interface Initialisation Réseau Espace utilisateur Système Transferts
Streamline Buffer Protocol
UNH (R. Russell & P. Hatcher) Principe Partage de tampons entre noyau/processus Tampons préformatés (trames ethernet) Deux jeux de files de tampons : RQ & SQ Performances (Linux, P133) Latence : 24 us, débit : ~ 12 Mo/s
Basic Interface for Parallelism: BIP
L. Prylli & B. Tourancheau Principe Envoi de message “classique” (asynchrone) Pas de contrôle de flux Pas de detection d’erreur Performances Latence : 4.8us, débit : 126 Mo/s
BIP
Fonctionnalités réduites au minimum Messages courts : recopiés à l’arrivée Messages longs : mode zéro-copie (RDV) Contrôle de flux minimal Matériel (msgs “évaporés” au dela de 50ms)
Interface Dolphin pour SCI
Deux niveaux : Interface orientée “fichiers projetés” Interface orientée “VIA” (cf + loin) Fichiers projetés Utilisation de “mmap” Synchronisation Segments spéciaux “fetch & add”
SISCI: principe
Communications Accés mémoire distants Implicites (après projection) Explicites ( remote DMA ) Support matériel pour une MVP (?) Performances Ecriture 2 us , lecture Bande passante 85 4 us Mo/s (difficilement !)
SCI : optimisations matérielles
Caches dans la carte Read Prefetching Write Combining :
Processus A Processus B
Espace d'adressage virtuel Bus PCI PCI-SCI Interconnexion SCI PCI-SCI Bus PCI Mémoire physique Espace d'adressage virtuel
Conséquences
Une Grappe SCI est une NC-NUMA Non-Coherent Non-uniform Memory Arch.
Cohérence séquentielle non vérifiée Plus gênant : ordre des écritures modifié Pb d’atomicité des transactions PCI Assez inhabituel (?)
VIA
V irtual I nterface A rchitecture Tentative de standardisation Beaucoup d’industriels impliqués Caractéristiques Principe d’ interfaces virtuelles Zones de transmission protégées Lectures/Ecritures distantes
VIA: Basic Principles
Use the Kernel for Set-Up… …and
Get It Out of the Way
for Send/Receive !
The “Virtual Interface” (VI) Protected Application-Application Channel Memory Directly Accessible Target Environment by User Process LANs and “SAN”s at Gigabit Speeds No Reliability of Underlying Media Assumed
VI Architecture
Host NIC
VI Consumer Sockets, MPI, Legacy, etc. VI User Agent (“libvia”) VI Kernel Agent (Slow) User-Level (Fast) Descriptor Read, Write VI
S R
VI
S R
VI
S R
C
C O M P Requests Completed VI-Capable NIC
VI Kernel Agent
A Privileged Part of Operating System (driver) Usually supplied by the VI NIC vendor Possibly supplied by research groups (UCB,…) Setup and Resource Management Functions Creation/Destruction of Vis VI Connection setup/tear-down Management of System Memory used by the VI NIC
A Virtual Interface
VI Consumer Send Q Descriptor Descriptor Status Recv Q Descriptor Descriptor Status
VI-Capable NIC
Descriptors
Descriptors Contain: Address and Length of Data Buffer Status Fields Memory Protection Information Multiple Segments to Allow Scatter/Gather etc., etc., etc.
A minimum of 45 bytes long Many messages may only be a few bytes...
Queues and Doorbells
Queues of Descriptors Transmit and Receive Completions and Errors May Reside on Host or NIC (Unspecified) Doorbells “Addresses” of Descriptors, Small and Fast Allows NIC to Use Descriptors… Future “VIA-NICs” May Have Hardware Support
Memory Registration
Data buffers and descriptors must reside of “ registered memory ” within a region Call
VipRegisterMemory
Pins the specified pages into physical memory Communicates the addresses to the NIC To allow DMA I/O from the NIC
Ce qu’il faut retenir
Interfaces de très bas niveau !
Fonctionnalités proches du matériel Grande efficacité Paradigmes très différents Approche non généralisable Pas de consensus Tentative de standard : VIA Virtual Interface Architecture (Intel, Microsoft, Compaq) But : dénominateur commun Bas niveau, peu adapté à certaines technologies Portabilité ???
Interfaces de haut niveau
MPI : la solution idéale ?
Bibliothèques
Paradigme passage de message Les nœuds se synchronisent et communiquent par messages Deux instructions de base Send Receive émission d’un message réception d’un message Points forts Simple à mettre en oeuvre Permet d’émuler les autres paradigmes
PVM
P arallel V irtual M achine Laboratoire National d’Oak Ridge (Tennessee) 1989 Caractéristiques Notion de machine virtuelle Ensemble de machines physiques Construction préalable au lancement de la session Disponibilité très large Réseaux UDP + protocole de réémission Support de l’hétérogénéité XDR
MPI
M essage P assing I nterface MPI-Forum v 1.0
1994 v 2.0
1997 Caractéristiques Un standard, pas une bibliothèque Diverses implémentations MPI-CH LAM-MPI … Supplante PVM Version 2.0 encore peu implémentée
MPI répond-t-il aux besoins ?
Implantations efficaces existantes MPICH/BIP, MPICH/SISCI, etc.
Quid des schémas de communication de la vraie vie ?
Messages dont le contenu est inconnu récepteur a priori par le Transmissions zéro-copie ?
Messages asynchrones Recouvrement des communications ?
Accès mémoire distants (PUT/GET) Temps de réponse ?
Transmissions zéro-copie
Processus A Réseau Processus B Message Acquittement
Préparation mémoire DMA
Entête Données
Et la réactivité alors ?
Problèmes Assurer la progression des communications asynchrones Réagir rapidement aux sollicitations extérieures proc proc proc réseau proc
Envois asynchrones
?
Parvient-on vraiment à assurer du recouvrement
MPI_Isend MPI_recv Acquittement MPI_test Processus A Processus B
Interfaces de niveau intermédiaire
Madeleine : principe et interface
Madeleine
Interface de communication Efficace et portable Double objectif Support de multiples paradigmes/modes Support de multiples réseaux simultanément Proposition Programmation par « contrat » Contrôle du niveau d’optimisation Transferts immédiats possibles Statut Disponible sur BIP, SISCI, TCP et MPI.
Portage en cours sur VIA
Interface
Construction des messages mad_begin_packing mad_pack mad_end_packing mad_begin_unpacking mad_unpack mad_end_unpacking Gestion des canaux (~
communicators
) Choix explicite du dispositif physique
Packing et Unpacking
Commandes : mad_pack (cnx, buffer, len, pack_mode, unpack_mode) mad_unpack (cnx, buffer, len, pack_mode, unpack_mode) Modes : Send_SAFER Send_CHEAPER Send_LATER Receive_EXPRESS Receive_CHEAPER
Emission : modes d’empaquetage
Pack Modification Send_SAFER Send_LATER Send_CHEAPER End_packing Version transmise
Réception : mode de déballage (1)
RECV_EXPRESS Unpack Tampon Après Unpack
Données disponibles
End_packing
Réception : mode de déballage (2)
RECV_CHEAPER Unpack Tampon Après Unpack
Données disponibles ???
End_packing
Données disponibles
Exemple
Sending side int n; char *s = "Hello, World !"; p_mad_connection_t cnx; cnx = mad_begin_packing(channel, dest); n = strlen(s) + 1; mad_pack(cnx, &n, sizeof(int), send_CHEAPER, receive_EXPRESS); mad_pack(cnx, s, n, send_CHEAPER, receive_CHEAPER); mad_end_packing(cnx); Receiving side int n; char *s = NULL; p_mad_connection_t cnx; cnx = mad_begin_unpacking(channel); mad_unpack(cnx, &n, sizeof(int), send_CHEAPER,receive_EXPRESS); s = malloc(n); mad_unpack(cnx, s, n, send_CHEAPER,receive_CHEAPER); mad_end_unpacking(cnx);
Exemple
Sending side int n; char *s = "Hello, World !";
p_mad_connection_t cnx;
cnx = mad_begin_packing(channel, dest); n = strlen(s) + 1; mad_pack(cnx, &n, sizeof(int), send_CHEAPER, receive_EXPRESS); mad_pack(cnx, s, n, send_CHEAPER, receive_CHEAPER); mad_end_packing(cnx); Receiving side int n; char *s = NULL;
p_mad_connection_t cnx;
cnx = mad_begin_unpacking(channel); mad_unpack(cnx, &n, sizeof(int), send_CHEAPER,receive_EXPRESS); s = malloc(n); mad_unpack(cnx, s, n, send_CHEAPER,receive_CHEAPER); mad_end_unpacking(cnx);
Exemple
Sending side int n; char *s = "Hello, World !"; p_mad_connection_t cnx;
cnx = mad_begin_packing(channel, dest);
n = strlen(s) + 1; mad_pack(cnx, &n, sizeof(int), send_CHEAPER, receive_EXPRESS); mad_pack(cnx, s, n, send_CHEAPER, receive_CHEAPER); mad_end_packing(cnx); Receiving side int n; char *s = NULL; p_mad_connection_t cnx;
cnx = mad_begin_unpacking(channel);
mad_unpack(cnx, &n, sizeof(int), send_CHEAPER,receive_EXPRESS); s = malloc(n); mad_unpack(cnx, s, n, send_CHEAPER,receive_CHEAPER); mad_end_unpacking(cnx);
Exemple
Sending side int n; char *s = "Hello, World !"; p_mad_connection_t cnx; cnx = mad_begin_packing(channel, dest); n = strlen(s) + 1;
mad_pack(cnx, &n, sizeof(int), send_CHEAPER, receive_EXPRESS);
mad_pack(cnx, s, n, send_CHEAPER, receive_CHEAPER); mad_end_packing(cnx); Receiving side int n; char *s = NULL; p_mad_connection_t cnx; cnx = mad_begin_unpacking(channel);
mad_unpack(cnx, &n, sizeof(int), send_CHEAPER,receive_EXPRESS);
s = malloc(n); mad_unpack(cnx, s, n, send_CHEAPER,receive_CHEAPER); mad_end_unpacking(cnx);
Exemple
Sending side int n; char *s = "Hello, World !"; p_mad_connection_t cnx; cnx = mad_begin_packing(channel, dest); n = strlen(s) + 1; mad_pack(cnx, &n, sizeof(int), send_CHEAPER, receive_EXPRESS); mad_pack(cnx, s, n, send_CHEAPER, receive_CHEAPER); mad_end_packing(cnx); Receiving side int n; char *s = NULL; p_mad_connection_t cnx; cnx = mad_begin_unpacking(channel); mad_unpack(cnx, &n, sizeof(int), send_CHEAPER,receive_EXPRESS);
s = malloc(n);
mad_unpack(cnx, s, n, send_CHEAPER,receive_CHEAPER); mad_end_unpacking(cnx);
Exemple
Sending side int n; char *s = "Hello, World !"; p_mad_connection_t cnx; cnx = mad_begin_packing(channel, dest); n = strlen(s) + 1; mad_pack(cnx, &n, sizeof(int), send_CHEAPER, receive_EXPRESS);
mad_pack(cnx, s, n, send_CHEAPER, receive_CHEAPER);
mad_end_packing(cnx); Receiving side int n; char *s = NULL; p_mad_connection_t cnx; cnx = mad_begin_unpacking(channel); mad_unpack(cnx, &n, sizeof(int), send_CHEAPER,receive_EXPRESS); s = malloc(n);
mad_unpack(cnx, s, n, send_CHEAPER,receive_CHEAPER);
mad_end_unpacking(cnx);
Exemple
Sending side int n; char *s = "Hello, World !"; p_mad_connection_t cnx; cnx = mad_begin_packing(channel, dest); n = strlen(s) + 1; mad_pack(cnx, &n, sizeof(int), send_CHEAPER, receive_EXPRESS); mad_pack(cnx, s, n, send_CHEAPER, receive_CHEAPER);
mad_end_packing(cnx);
Receiving side int n; char *s = NULL; p_mad_connection_t cnx; cnx = mad_begin_unpacking(channel); mad_unpack(cnx, &n, sizeof(int), send_CHEAPER,receive_EXPRESS); s = malloc(n); mad_unpack(cnx, s, n, send_CHEAPER,receive_CHEAPER);
mad_end_unpacking(cnx);
Interfaces de niveau intermédiaire
Madeleine : implantation
Proposition
Interface Gestion des tampons Gestion de protocole
Pack Send Unpack Receive
Madeleine – structure
Application BMM 1 Switch BMM n Generic Buffer Management Modules TM 1 Selection TM n Specific Transmission Modules Network Application BMM 1 Switch BMM m TM 1 Selection TM n
Adaptativité
Sélection du mode de transmission adéquat
Interface Gestion des tampons Gestion de protocole
?
Pack
Implementation
Madeleine II a été portée sur : SISCI/SCI BIP/Myrinet MPI VIA TCP SBP
12 10 8 6 4 2 0
0
BIP/Myrinet
Latency: Madeleine II/BIP
64 Packet size (bytes) 128
BIP/Myrinet
Bandwidth: Madeleine II/BIP 120 100 80 60 40 20 0
4 16 64 256 1024 4096 16384 Packet size (bytes) 65536 26 21 44 10 48 57 6
10 9 8 3 2 1 0 7 6 5 4
0
SISCI/SCI
Latency: Madeleine II/SCI
64 Packet size (bytes) 128
SISCI/SCI
Bandwidth: Madeleine II/SCI
50 40 30 20 10 0 90 80 70 60 1 4 16 64 25 6 10 24 40 96 16 38 4 Packet size (bytes) 65 53 6 26 21 44 10 48 57 6 41 94 30 4 1, 7E+ 07
Quelques résultats
Latence 7 µs 4 µs sur BIP/Myrinet sur SISCI/SCI Bande passante 125 Mo/s 80 Mo/s sur BIP/Myrinet sur SISCI/SCI Migration (PM2) 24 µs 52 µs sur SISCI/SCI sur BIP/Myrinet
MPICH/ Madeleine II
MPICH: general-purpose portable MPI implementation well-defined protocol interface Abstract Device Madeleine: cluster-specific high-performance communication generic structure available on Gigabit networks highly optimized implementation The best of both worlds!
Madeleine as a MPICH device
MPICH/ Madeleine II
MPI API ADI Protocol Interface Generic part (collective operations, context/group management, ...) Generic ADI code, datatype management, request queues management
CH_MAD device
inter-node communication polling loops eager protocol rendez-vous-protocol
SMP_PLUG device CH_SELF device
intra-node communication self communication
TCP
Fast-Ethernet
Madeleine II multi-protocol management SISCI
SCI
BIP
Myrinet
Latency
40 35 30 25 20 15 10 5 0
1
Comparison : various MPI/SCI implementations
10 Packet size (bytes) 100 SCI-MPICH SCA-MPI MPI/MadII/SCI 1000
Bandwidth
Comparison : various MPI/SCI implementations
80 70 60 50 40 30 20 10 0 1 4 16 SCI-MPICH SCA-MPI MPI/MadII/SCI 64 25 6 10 24 40 96 16 38 4 Packet size (bytes) 65 53 6 26 21 44 10 48 57 6
Vers les grappes de grappes
Objectifs
Support des grappes de grappes Communications hétérogènes Transparence Efficacité du routage sur les machines « passerelles » Minimisation des copies Maintien du débit par techniques de pipeline Utilisation des threads !
Réseau rapide PC/SCI PC/Myrinet
PACX-MPI
2 nœuds sacrifiés pour les communications Transparence pour l’application Protocole TCP/IP entre les grappes MPI MPI TCP
Globus
Principe : Appel de Procédure à Distance Librairie de communication : Nexus Multiprotocole Multithreading non nécessairement préemptif La passerelle est sacrifiée Tout est à faire par l’utilisateur Pas de gestion explicite des grappes de grappes Pas adapté au problème
Madeleine II
Bibliothèque de communication Multiprotocole Canaux de communication indépendants Un canal correspond à un adaptateur réseau Canal SCI Canal TCP Canal TCP
Structure interne
Couche générique de gestion de tampons Couche de portabilité avec les protocoles Application MGT 1 MGT 2 MGT n MT 1 MT 2 Réseau MT n
Structure interne
Application Aiguillage MGT 1 MGT n Couche de gestion de tampons Application Aiguillage MGT 1 MGT n Sélection MT 1 MT n Réseau Couche de portabilité Sélection MT 1 MT n Réseau
Structure (suite)
Organisation des données Madeleine : données globales Driver : spécifique à un protocole Adapter : virtualisation d’une carte réseau Channel : isolation des communications Connection : connexion point à point Link : virtualisation d’une méthode de transfert
Ce qui manque
Utilisation de réseaux qui ne sont pas présents sur tous les nœuds Envoi de messages entre des machines non directement reliées SCI Myrinet
Intégration dans Madeleine
MTs : pas portable MGTs : problèmes de conversion Au-dessus : perte d’efficacité Application MGT 1 MGT 2 MGT n MT 1 Réseau MT 2
Solution retenue
MT générique entre les MTs et les MGTs Pas de MGT au niveau de la passerelle Application MGT 1 MGT 2 MGT n MT générique MT 1 Réseau MT 2
Canaux virtuels
Contiennent plusieurs canaux réels Permettent de séparer les messages à retransmettre des messages normaux (canaux réels différents) Canal virtuel 1 2 3 4 Canaux SCI Canaux Myrinet Canal spécial Canal normal
Réactivité et parallélisme
Retransmission des messages par des threads dédiés Une paire de threads par réseau physique Mécanisme de pipeline Réception des messages normaux sur la passerelle Pas d’informations à priori Threads de scrutation sur la provenance
Principe de la passerelle
Application Thread de scrutation Threads de retransmission Myrinet SCI
Tests de performances
Ping-pong entre 2 machines séparées par une passerelle 1 SCI 2 Myrinet 3
Évaluation
Bande passante Latence SCI BIP 80 Mo/s 116 Mo/s BIP/SCI Avec une passerelle
41
Mo/s 5,3
μ
s 7,8
μ
s
32,5
μ
s
Intégration des threads et des communications
Réactivité des nœuds aux E/S
Progression des communications
Problème Comment assurer la progression des communications ?
proc proc proc réseau proc
Scrutation et interruptions
La scrutation est nécessaire API réseau ne fournissant pas d’appels bloquants OS ne fournissant pas “d’activations” Problème Fréquence difficile à assurer Coûteux en présence de multiple “ pollers ” Les interruptions sont nécessaires Réactivité Problème Outils de synchronisation “interrupt safe” ?
Support de l’ordonnanceur
Ordonnanceur = serveur de scrutation Choix de la méthode d’accès (scrutation/intr.) Support pour la scrutation Fréquence contrôlée Factorisation des scrutations multiples Support pour les interruptions Utilisation possible des activations Verrous spécifiques « interrupt-safe »
Scrutation par l’ordonnanceur
Création d’une
catégorie
de polling (ex: MPI), assignation d’une
fréquence
et enregistrement de
callbacks.
Chaque thread candidat à une opération de polling adresse une requête à l’ordonnanceur et se bloque.
MPI_Isend Marcel_poll MPI_Irecv Marcel_poll Polling jobs queue
MPI
Polling( ) Régulièrement, l’ordonnanceur appelle la fonction de scrutation définie par l’utilisateur...
Ordonnanceur des threads
Multithreading
Introduction et rappels
Rappel : les processus lourds
Caractéristiques Entité active directement supportée par l’OS Flot d’exécution Espace d’adressage privé Ressources systèmes Exécution séquentielle Coût de gestion élevé Allocation des ressources Appels systèmes
Processus lourds
Ressources “noyau” + données “utilisateur”
Processus
Espace utilisateur
Processus Processus
processeur Ordonnanceur Noyau processeur processeur
Threads
: Motivations
Difficulté de programmation Fil d’exécution unique une seule chose à la fois !
Partage de données laborieux Réactivité aux sollicitations externes Performances Opérations de base coûteuses Recouvrement des opérations d’E/S difficiles
Simplicité de programmation
Objectif Mener plusieurs activités indépendantes au sein d’un processus Exemples Simulations Serveurs de fichiers Systèmes d’exploitation (!) Seule solution (?) Automate à états finis implanté « à la main » (sauvegardes d’états)
Structure d’un OS monolytique
Exemple
for (;;) { if(networkMsgIn()) getNetworkMsg(); if(kbdReady()) getKey(); if(diskBlockReady()) handleDiskBlock(); … }
Séquence infinie d’opérations courtes Ordre et fréquence des scrutations ?
Systèmes multiprogrammés
for (;;) { wait for network msg; getNetworkMsg(); } for (;;) { wait for key stroke; getKey(); } for (;;) { wait for disk block; handleDiskBlock(); }
Exécution indépendante des activités Concurrence entre les différents traitements
Processus serveur classique
Sérialisation des requêtes client serveur OS Pas de recouvrement des E/S Exploitation SMP délicate Prise en compte de priorités ?
OS
Sur l’efficacité des E/S
Caractéristiques du serveur de fichiers Tps de traitement d’une requête = 15ms Tps supplémentaire pour l’accès disque = 75ms (pour 1/3 des requêtes) Débit sans/avec recouvrement des E/S Sans recouvrement 25 requêtes/seconde Avec recouvrement 33.33 requêtes/seconde (+33%)
Les processus légers
Principe Détacher flot d’exécution et ressources
thread
ressources Introduits dans divers langages & systèmes Programmation concurrente Recouvrement des E/S Exploitation des architectures SMP
Caractéristiques de base
Thread = pile + contexte Partage de ressources Code, tas, … : espace d’adressage Fichiers ouverts Etc.
Opérations de base performantes Création, destruction Synchronisation, commutation de contextes Création d’un processus léger Adresse de fonction à exécuter + paramètres
Performance des
threads
Opérations critiques
Création/destruction (gestion mémoire) Changement de contexte (temps-partagé) Synchronisation (mode utilisateur)
Programme d’évaluation
Création d’une activité (processus,
thread
) + synchronisation (terminaison de l’activité) OS/Processeur Linux 2.2/PII 450 Solaris 2.7/PII 350
Processus
0.540
8.622
Thread noyau
0.130
0.214
Thread utilisateur
0.160
PM2
0.006
0.009
Repères historiques
L’ancêtre : les coroutines Entrelacement explicite des exécutions Langages : Simula (67), Modula2 (82) Primitives clés : create + resume Les threads dans les systèmes Cthread (Mach) -> DecThread -> PThread (~90) Chorus, Solaris (87), winNT, IRIX, Linux, etc.
Les threads dans les langages Ada (83), Java, etc.
C++ //, Eiffel //, etc.
Multithreading
Premier contact
L’interface POSIX-Threads
Interface de programmation standard pour Unix Portabilité des applications Solaris, IRIX, HP-UX, Linux, Etc.
Fonctionnalités Création/destruction de threads Synchronisation Ordonnancement, priorités Signaux Etc.
Exemple: création
int pthread_create( pthread_t * pid , pthread_attr_t * attr , void * (* start_func )(void *), void * arg ); Création d’un nouveau thread Éventuels attributs dans la structure attr Exécution de start_func *pid avec le paramètre est l’identificateur du thread créé arg
Attente de fin d’exécution
int pthread_join( pthread_t pid , void ** status ); Attente de la terminaison du thread pid Récupération de son code de retour status On peut contourner ce mécanisme en « détachant » les threads : int pthread_detach( pthread_t pid );
« Hello World! »
} #include
> } { void *func(void *arg) printf( “Thread %x says %s\n”, pthread_self (), arg); return NULL; { int main(void) pthread_t pid; pthread_create (&pid, NULL, func, “Hello World!”); printf( “This is the main thread\n”); pthread_join (pid, NULL); return 0;
Attributs
Ensemble fixé de caractéristiques Utilisé à l’initialisation Threads, verrous, variables de condition, etc.
Threads Priorité Pile : taille, emplacement Détaché : oui/non Type d’ordonnancement Verrous Inversion de priorités, récursivité
Attributs : exemple
} #include
> } { void *handle_request(void *arg) … { int main(void) … pthread_attr_t attr; } for(;;) { fd = accept(sock, …); pthread_attr_init (&attr); pthread_attr_setdetachstate (&attr, PTHREAD_CREATE_DETACHED ); pthread_create ( NULL , &attr, handle_request, fd);
Exemple bis : pile
pthread_attr_t attr; pthread_attr_init (&attr); pthread_attr_setstacksize (&attr, 128*1024 ); pthread_create ( NULL , &attr, func, NULL ); À manipuler avec précaution !
Quelle taille de pile choisir ?
Comment prévenir/détecter les débordements ?
Le standard OpenMP
Interface pour écrire des applications multithreads portables (sur SMP) Directives de compilation (C, C++, Fortran) + routines Objectif = simplicité + portabilité Constructeurs + fabricants de logiciels + etc.
Modèle de programmation « Fork-Join » Parallélisation des boucles (#pragma omp)
Multithreading
Partage mémoire efficace
Les threads et la mémoire
Chaque thread possède sa propre pile Variables locales « privées » ( visibilité) Les threads partagent l’espace d’adressage Variables globales Tas (malloc) Variables locales (piles) également !
Intérêt Communications par pointeurs !
Parallélisation de programmes séquentiels aisée ?
Outils pour la synchronisation
Exclusion mutuelle : les verrous int glob = 0; } { void *inc(void *arg) for(i=0; i<100; i++) { pthread_mutex_lock(&mutex); glob++; pthread_mutex_unlock(&mutex); } Synchronisations plus complexes : Variables de condition (cf moniteurs de Hoare) pthread_cond_wait pthread_cond_signal, pthread_cond_bcast
Code réentrant
« code demeurant correct lorsqu’il est exécuté simultanément par plusieurs threads » Exemples typiques Fonction n’utilisant que des variables locales Code protégé par un verrou Quid du code que l’on écrit pas soi-même ?
Malloc, free, …, la bibliothéque standard Fonctions « MT-safe » Option –D_REENTRANT Certains prototypes changent…
Importance de la synchro.
Cohérence séquentielle de la mémoire ?
Compilateurs/Optimiseurs Instructions réordonnées Processeurs modernes Ecritures réordonnées On ne peut pas supposer l’ordre des écritures Primitives de synchronisation Agissent comme des « barrières mémoire »
Variables spécifiques
Pb : comment gérer les variables globales « privées » int my_x; } { void g(void) …my_x… } { void f(void) my_x = do_compute(); … g();
Variables spécifiques
Principe Variable accessible à partir d’une clé Allocation globale (souvent à l’initialisation) pthread_setspecific(clé, valeur) pthread_getspecific(clé) -> valeur Exemple : la variable errno Fichier errno.h
#ifdef _REENTRANT #define errno (*__errno_location()) #else extern int errno; #endif
Exploitation efficace des machines SMP
Quelle catégorie de
threads
?
Multithreading utilisateur
Deux ordonnanceurs indépendants :
Process
User Space
Process Process
Scheduler Scheduler processor Scheduler OS Kernel processor processor
Multithreading noyau
Un seul ordonnanceur :
Process
User Space
Process Process
processor Scheduler OS Kernel processor processor
Multithreading mixte
Deux ordonnanceurs coopérants
Process
User Space
Process Process
Scheduler Scheduler Scheduler OS Kernel processor processor Note: Quid des appels systèmes bloquants ?
processor
E/S et ordonnancement
Threads noyaux : OK Threads utilisateurs Appel bloquant -> blocage du processus entier Threads mixtes Idem au bout d’un certain nombre !
Solutions ?
Appels toujours non-bloquants (polling) Appels effectués par des threads dédiés Support système spécifique
Exploitation efficace des machines SMP Scheduler Activations
Recouvrement des E/S
Au lieu de
syscall
Espace utilisateur Temps CPU perdu Espace noyau
I/O request interrupt
Matériel …on voudrait : Espace utilisateur Espace noyau Matériel CPU utilisé
Scheduler Activations
Introduit par [Anderson et al. 91] Idée: la coopération entre les deux ordonnanceurs est bidirectionnelle L’ordonnanceur utilisateur utilise des appels systèmes L’ordonnanceur noyau utilise des upcalls!
Upcalls
Informe l’application des événements noyaux Activations Autant d’activations en exécution que de processeurs Contrôlées par le noyau Principe mis en œuvre dans Solaris
Difficultés de mise en œuvre
Retour d’un appel bloquant Un « unblock upcall » nécessite deux appels systèmes supplémentaires… La généricité coûte cher !!
Perte du processeur Signalée par un upcall particulier Objectif = éviter les attentes actives !
Conséquences L’ordonnanceur de niveau utilisateur doit se prémunir contre ces interruptions intempestives Le coût est prohibitif !
Un modèle revisité
Contexte = calcul haute performance Une application // à la fois sur la grappe Optimisations pour ce cas de figure Les activations perdent rarement le processeur Propositions Suppression des évènements « preempt Utilisation d’une pile par processeur Implantation Linux 2.2.x
Bibliothèque de threads Marcel »
A propos de réactivité…
Problèmes liés aux évènements «
unblock
Coût important, réactivité non-garantie Proposition Pour les notifications non-urgentes Positionnement d’une variable partagée Test à chaque changement de contexte Pour les notifications critiques Lors du retour en mode utilisateur : Déviation vers le thread « client » de l’événement Déviation éventuellement différée… »
Modifications du noyau Linux
Parties du noyau modifiées schedule (), do_fork () and do_exit () Implantation des transitions task_struct structure Nouveaux champs (état des activations, etc.) Code ajouté Appels systèmes + API pour les upcalls Gestion des upcalls (~signaux) Code pour les changements d’état des activations
Performances
Mono processeur Bi processeur Bibliothèque Marcel/mono Marcel/SMP Opérations sur les threads intensives 330 us 440 us Marcel/activation 320 us / 440 us LinuxThread 15000 us Entrées/ Sorties 40000 ms 15 ms 11 ms 15 ms Calcul intensif 6932 ms 3807 ms 3551 ms 3566 ms
Meilleure réactivité au réseau
Illustration : MPI et les communications asynchrones
MPI_Isend MPI_recv Acquittement MPI_test Processus A Processus B
Multithreading Distribué
Principe et Enjeux
Principe
Introduire les threads dans les applications distribuées et parallèles proc proc proc réseau proc
Enjeux
Bénéfices escomptés Meilleur support du parallélisme à grain fin Recouvrement naturel des communications Uniformisation de la configuration Machines monoprocesseur/machines SMP
Intérêts
Apports des threads Virtualisation de l’architecture Threads = processeurs virtuels Passage à l’échelle ( scalability ) Bonne cible pour des compilateurs Meilleure réactivité au réseau Traitement asynchrone des messages Équilibrage de charge par migration de threads Équilibrage dynamique Régulateur indépendant de l’application (plug-ins) !
Multithreading Distribué
Quel modèle de programmation ?
Approche par juxtaposition
Principe : pas de modèle !
Simplement utiliser conjointement Une bibliothèque de communication (ex: MPI) Une bibliothèque de multithreading Problèmes Conceptuels Pas de visibilité globale des threads Sémantique des communications ?
Techniques Compatibilité entre les bibliothèques Travail d’intégration spécifique -> non réutilisable
Approche intégrée
Threads communicants A0, Chant Pthreads + extensions Rthreads Pthreads DSM-threads Appels de procédure à distance « threadés » A0, Nexus, PM2
Threads communicants
Principe Envoi de message entre threads Modèle « MPI-like » Modèle « Acteurs » Nommage Nommage global des threads Ports de communication Exemples Chant (M. Haines, ICASE) Athapascan-0b (J. Briat, INRIA Grenoble)
Modèle
Pthreads
étendu
Principe Threads + primitives étendues Create/Join à distance Synchronisations distribuées Particularités Nommage global des threads Restriction du modèle Pthreads Exemples Chant (M.Haines, ICASE), Rthreads (M. Zahn, Allemagne)
Modèle
Pthreads
distribué
Principe Adaptation complète (?) de Pthreads Threads + mémoire virtuellement partagée Transparence Cohérence assurée lors des défauts de pages Restriction sur les E/S Extensions Cohérences mémoires relâchées Exemple DSM-Threads (F. Mueller, Berlin)
Modèle dérivé des RPC
Principe
Appel de procédure à distance (A. Birell) Extension du concept aux threads Création de threads pour exécuter les procédures Désignation globale des services Numéro fonction Souches (stubs) pour la transmission des paramètres
Exemples
Nexus (I. Foster, Argonne), PM2
Multithreading Distribué
L’environnement PM2
Premières réflexions sur PM2
Parallel Multithreaded Machine (R. Namyst) Virtualisation de l’architecture Régulateurs génériques de charge (Y. Denneulin) Plateformes usuelles (COW, NOW), machines parallèles Distribution du logiciel, assistance, documentation:-( InterPRC Stratagème (C. Roucairol) Applications irrégulières Optimisation combinatoire Algèbre linéaire creuse (J. Roman) Ordonnancement, régulation Fortement irrégulière : placement + migration
Projet PM2 (95-xx)
Objectif ambitieux : virtualisation Indépendance de la machine cible (#processeurs) Degré de parallélisme important (#processus) Parler de “traitement” / “processus” mécanismes de décomposition parallèle Propositions Mécanisme de décomposition Appel de procédure à distance léger Support des activités Processus légers (threads) Régulateur dynamique de charge Placement + Migration (LRPC)
Appel de procédure à distance
PM 2 LRPC PM 2 Différentes déclinaisons Synchrone Attente différée Asynchrone Nos concurrents...
Nexus : RSR Athapascan : appels de service
Hello World!
#include
Threaded “Hello world!”
Création d’un
thread
Obligatoirement par pm2_thread_create positionnement d’un certain nombre d’attributs héritage du “droit” de faire unpack ...
void thread_func(void *arg) { char msg[128]; pm2_unpack_byte (SEND_CHEAPER, RECV_CHEAPER, msg, 128); pm2_rawrpc_waitdata (); printf(“%s\n”, msg); } void sample_func(void) { pm2_thread_create (thread_func, NULL); } ...
Mobilité des activités
Migration de processus légers PM 2 PM 2 Pourquoi ?
Régulation de charge Localité des données Comment ?
Transfert du contexte Programmes SPMD
Multithreading Distribué
Communications dans un environnement multithreads
Appel de procédure à distance
RPC Intensivement utilisé Accès mémoire distants, migration, etc.
Consensus (?) Athapascan, Nexus, Panda, PM2
Transmission zéro-copie
Processus A Réseau Processus B Message Acquittement
Préparation mémoire DMA
Entête Vecteur
Portabilité
Bibliothèques de haut niveau MPI Pas adapté aux interactions de type « RPC » Bibliothèques de bas niveau BIP (Myrinet), SISCI (SCI), GAMMA (Ethernet) Paradigmes très différents ! Portabilité ??
Niveau intermédiaire Exemple: Fast-Messages Adapté aux RPC (Illinois) Trop souple (surcoûts inutiles)
RPC efficaces avec Madeleine
LRPC, Migration Madeleine Gestion générique de tampons Gestion des transmissions BIP, SISCI, VIA, TCP, MPI
Interface de Madeleine
Construction des messages mad_begin_packing mad_pack mad_end_packing mad_begin_unpacking mad_unpack mad_end_unpacking Gestion des canaux (~ communicators) Choix explicite du dispositif physique
Packing et Unpacking
Commandes: mad_pack (cnx, buffer, len, pack_mode, unpack_mode) mad_unpack (cnx, buffer, len, pack_mode, unpack_mode) Modes: Send_SAFER Send_CHEAPER Send_LATER Receive_EXPRESS Receive_CHEAPER
Conclusion
Multithreading Exploitation efficace des architectures SMP Contrôle fin de l’ordonnancement Conditionné par les fonctionnalités du système Multithreading distribué Communications de type RPC Support spécifique nécessaire Intégration des threads et des communications Délicate !!
Mieux maîtrisée si fonctionnement coopératif
Contexte technologique
Architecture homogène, faiblement hétérogène Grappes (Cluster, COW), machines // PC, stations de travail Ethernet, Myrinet, SCI, ...
Protocoles de communication BIP, SISCI, SciOS, VIA, TCP, UDP, ...
PC Commutateur Myrinet/BIP
Contexte technologique
Infrastructure hétérogène Grilles Supercalculateurs (Superordinateur virtuel) Grappes (grappes hiérarchiques, HNOW) PC Interconnexion à plus large échelle Ressources hétérogènes Processeurs (puissance, cache, mémoire) Réseaux (latence, bande passante, protocoles) Multi-protocoles, déploiement, algorithmique, ...
PC/Myrinet/BIP Lyon Internet Bordeaux PowerPC/Switch/MPI PC/SCI/sciOS Grenoble
Superordinateur virtuel (Globus)
Grappes hiérarchiques
Distributed ASCI Supercomputer (DAS) Plate-forme commune pour la recherche Informatique parallèle (à grande échelle) et applications distribuées Novembre 1998, 4 universités, 200 nœuds Nœud Pentium Pro 200 MHz 128 MB de mémoire, 2.5 GB de disque Myrinet 1.28 Gbit/s (full duplex) Système d’exploitation : BSD Réseau ATM
Grappes hiérarchiques
Ressources
Ressource entité capable de lancer un ou plusieurs processus pour le compte d’un utilisateur. Désigne également des composants matériels (mémoire, réseau, senseurs, etc.) Composants logiciels (fichiers, softs, …) Partage Contrôlé des Ressources Informations, disponibilité Allocation, co-allocation Sécurité Administration, politiques d’accès…
Application Programming Interface
Spécification d’un ensemble de fonctions pour faciliter le développement d’applications Définition, pas d’implementation Exemples: il y a plusieurs implémentations MPI Spécifique pour certains langages Noms des routines, nombre, type des paramètres Comportement de la fonction Exemples GSS API (sécurité), MPI (échange de messages)
Software Development Kit
Une instantiation particulière d’une API SDK est constitué de bibliothèques et d’outils Fournir une implémentation de la spécification d’une API Plusieurs SDKs pour une même API Exemples de SDKs MPICH, Motif Widgets
Pourquoi les Grilles ?
Evolution des réseaux à très haut débit Nouvelles applications basées sur le couplage rapide de personnes, d’ordinateurs, de bases de données, d’instruments,...
Instruments en ligne Ingénierie collaborative Calcul parallèle distribué Utilisation de ressources distantes Simulations à très grande échelle Applications classiques du parallélisme faiblement couplé Laboratoires virtuels
Instruments en ligne
Source de photons Dissémination à grande échelle récupération en temps réel Stockage pour archive Bureaux & clients de RV à contrôle partagés Reconstruction tomographique
Ingénierie Collaborative
Manipulation d’espaces virtuels partagés avec Composants de simulation Flots multiples : Contrôle, Texte, Vidéo, Audio, Base de données, Simulation, Tracking, Rendering Problèmes associés : uni/multi-diffusion fiable (ou non fiable) Sécurité (comptes, accès, transferts de données) Réservation et Qualité de Service
Calcul parallèle distribué
Rennes Rocquencourt Nancy Grenoble Sophia Problèmes associés Découverte de ressources (matérielles et logicielles) Ordonnancement (on-line & off-line) Visualisation de données Plusieurs bibliothèques de communications Passage de messages Passage à l’échelle Tolérance aux pannes Réservation de ressources Sécurité
Challenges techniques
Applications complexes qui combinent des aspects du parallélisme, du multimédia et du système distribué Ressources dont les caractéristiques varient en fonction du temps et de l’espace Besoin de performances « end-to-end » bonnes et garanties, malgré l’hétérogénéité et le manque de contrôle global Problèmes de sécurité, de politique et de paiement entre les domaines
Les défis logiciels
Administration Sécurité, équité, disponibilité, équilibrage des charges Hétérogénéité Réseaux, processeurs, hiérarchie mémoire Équilibrage des charges Distribution des données Informations sur la charge en temps réel Évaluation des performances Modélisation des architectures Couplage de codes
Globus
Le projet Globus
Recherches sur les technologies liées aux grilles Gestion des données et des ressources, sécurité, Qualité de Service, communication, adaptation, ...
Développement de la boite à outils Globus Services de base pour les outils et applications de la grille Construction de grilles Expérimentations des applications
L’approche Globus
Une boite à outils et plein de services pour résoudre des problèmes techniques cruciaux « sac à malices » modulaire Middleware d’application applicable dans différents domaines Faire interopérer plusieurs « mondes » existants au lieu de les fusionner Différenciation des services locaux et globaux
Approche Technique
Permettre le développement incrémental d’outils et d’applications pour la grille Support de nombreux langages, modèles de programmations, outils, applications Évoluer en fonction des besoins de l’utilisateur Se déployer à l’échelle internationale Développements et tests à grande échelle Fournir un environnement riche en informations
Les grilles Globus
Grilles et Plates-formes de tests EMERGE : Pré-réservation & QoS GUSTO : Globus Ubiquitous Supercomputing Testbed Organization Particle Physics Data Grid Grilles de production NSF PACIs National Technology Grid NASA Information Power Grid DOE ASCI European Grid
Plate-forme GUSTO durant SC’98
Globus Ubiquitous Supercomputing Testbed Organization (GUSTO) 02/00: 125 sites dans 23 pays L’un des plus grands environnements de calcul jamais construits
The 13.6 TF TeraGrid: Computing at 40 Gb/s
26 24 8 4
Site Resources HPSS External Networks
Caltech
Site Resources HPSS External Networks
Argonne
5
External Networks Site Resources HPSS
SDSC 4.1 TF 225 TB NCSA/PACI 8 TF 240 TB
External Networks Site Resources UniTree TeraGrid/DTF: NCSA, SDSC, Caltech, Argonne www.teragrid.org
Le Sablier Globus
Un ensemble de services comme infrastructure de base Utilisables pour construire des solutions spécifiques de haut niveau Buts: Limiter l’implication des utilisateurs Permettre un contrôle local
A p p l i c a t i o n s
Divers services globaux Cœur des Services Globus OS Local
Architecture en couche
Applications
GlobusView DUROC MPI
Boite à outils Application
Condor-G HPC++ Nimrod/G Testbed Status globusrun I/O Nexus MDS
Services de la Grille
GSI GSI-FTP HBM GRAM GASS Condor LSF MPI PBS NQE
Base de la Grille
Linux NT Solaris TCP UDP DiffServ
Différents services Globus
Services d’information (MDS) Gestion des ressources (GRAM & DUROC) Gestion distante des fichiers (GASS) Communication (Nexus, MPI) Sécurité (GSI) Surveillance des processus (HBM)
Le besoin d’informations
Système d’information d’applications point crucial pour les opérations sur la grille et la construction Comment une application détermine quelles ressources sont disponibles ?
Quel est « l’état » de la grille Besoin d’un système d’information général pour répondre à ces questions
Quelques informations utiles
Caractéristiques d’un serveur de calcul Adresse IP, logiciels disponibles, administrateur système, connections aux réseaux, version d’OS, charge Caractéristiques d’un réseau Bande passante et latence, protocoles, topologie logique Caractéristiques de l’infrastructure Globus Hôtes, gestionnaires de ressources
Utilisation de l’information pour le courtage des ressources
“10 GFlops,20 Mb/sec pendant 20 mins” Service Info : localisation + selection “20 Mb/sec” Courtier ressources “Quelles machines?” “Quelle vitesse?” “Dispo quand?” Metacomputing Directory Service GRAM Globus Resource Allocation Managers “50 processeurs + disques de 22h20 à 22h40” GRAM Fork LSF EASYLL Condor etc.
GRAM GRAM
Service d’information
Fournir un accès à des informations statiques et dynamiques sur les composants Base pour la configuration et l’adaptation de systèmes dynamiques et hétérogènes Besoins et caractéristiques Accès uniforme et flexible à l’information Accès efficace et extensible aux données dynamiques Accès à des sources d’informations multiples Maintenance décentralisée
Approche MDS
Basée sur LDAP Lightweight Directory Access Protocol v3 (LDAPv3) Modèle de données standard Protocole de requête standard Schéma spécifique à Globus Représentation centrée sur l’hôte Outils spécifiques Globus GRIS, GIIS Découverte, publication de données Application Middleware API LDAP GRIS SNMP … GIIS NWS NIS LDAP …
Le MDS
Metacomputing Directory Service Annuaire de ressource de Globus Contient toutes les informations sur tous les nœuds globus Consultable sur Internet http://www.globus.org/mds Distribué depuis la version 1.1.3
Permet de créer son propre « sous-Globus »
sunny hot LAN Carl Steve
USC/ISI
Metacomputing directory service
c=
US
MDS Representation
Ethernet
o=
globus WAN Switch IBM SP LAN
o=
USC
o=
ANL
nn=
WAN dark cold Ian Gregor SteveWarren
ANL/MCS
Structure physique
… ou=
ISI
cn=
Carl
cn=
Steve
… cn=
Ian
cn=
Gregor
cn=
Steve
cn=
Warren
ou=
MCS
… nn=
MCS-lan
nn= SP-switch nn= SP-ether hn= sp1.mcs.anl.gov
… hn= spN.mcs.anl.gov
Gestion de ressources
Un langage de spécification de ressources flexible qui fournit la puissance nécessaire pour exprimer les contraintes requises Des services pour la co-allocation de ressources, l’organisation d’exécutables, l’accès à des données distantes et la gestion des flux d’entrées/sorties Intégration de ces services dans des outils de haut niveau MPICH-G: un MPI pour la grille globus-job-*: commandes flexible d’exécution à distance
Gestion de ressources
Resource Specification Language (RSL) est utilisé pour communiquer les besoins L’API du Globus Resource Allocation Manager (GRAM) permet de lancer les programmes sur des ressources distantes, sans tenir compte de l’hétérogénéité locale Une architecture en couche permet de définir des courtiers de ressources et des co-allocateurs spécifiques aux applications comme étant des services GRAM
Modèle d’ordonnancement
GRAM supporte le modèle suivant suspendu actif terminé échec Suspendu : ressources non encore allouées Actif : ressources allouées, exécution en cours Échec : terminaison prématurée (erreur ou arrêt) Terminé : terminaison avec succès
Client
Composants GRAM
Appels MDS pour localiser les ressources Appels MDS pour avoir des infos sur les ressources MDS: Grid Index Info Server Limite du site Appels GRAM pour requête d’allocation de ressources et création de processus.
Globus Security Infrastructure
Gatekeeper Création Mise à jour GRAM
Job Manager
MDS: Grid Resource Info Server Requête sur l’état de la ressource Local Resource Manager Requête Allocation & création des processus Parse Monitoring & contrôle Processus Processus
Bibliothèque RSL
Processus
Architecture de la gestion de ressources
Courtier spécialisation RSL RSL Application Gestionnaires de ressources locaux Ground RSL GRAM LSF Requêtes & Info Service d’Information Co-allocateur Simple ground RSL GRAM EASY-LL GRAM NQE
Langage de spécification de ressource
Notation commune pour l’échange d’information entre composants RSL fournit deux types d’informations : Besoins en ressources : type de machine, nombre de nœuds, mémoire, etc.
Configuration d’un job : Répertoire, exécutable, arguments, environnement API fournie pour manipuler RSL
Syntaxe RSL
Forme élémentaire : clauses parenthésées (attribut op valeur [ valeur … ] ) Opérateurs supportés: <, <=, =, >=, > , != Quelques attributs supportés : exécutable, arguments, environnement, stdin, stdout, stderr, resourceManagerContact, resourceManagerName Les attributs inconnus sont ignorés Peut-être gérés par d’autres outils
Contraintes : “&”
Par exemple : & (count>=5) (count<=10) (max_time=240) (memory>=64) (executable=myprog) “Créer entre 5-10 instances de pendant 4 heures” myprog , chacune sur une machine with ayant au moins 64 MB de mémoire et disponible pour moi
Multi-requêtes : “+”
Une multi-requête permet de spécifier plusieurs besoins de ressources, par exemple : + (& (count=5)(memory>=64) (executable=p1)) (&(network=atm) (executable=p2)) Exécuter 5 instances de p1 sur une machine ayant au moins 64Mb de mémoire Exécuter p2 sur une machine ayant une connexion ATM Multi-requêtes sont le cœur de la co-allocation
GRAM
Globus Resource Allocation Manager Permet à un programme d’être lancé sur des ressources distantes malgré l’hétérogénéité locale Utilise le langage de spécification de ressources (RSL)
DUROC
Dynamically Updated Request Online Co allocator Co-allocation : allocation simultanée d’un ensemble de ressources Basée sur des prédictions concernant les nœuds libres et la taille des files d’attentes
GASS
Global Access to Secondary Storage open/close globus_gass_open/close : lectures/écritures directement à distance URLs pour nommer les exécutables, les flux d’entrée et de sortie.
Utilitaire de gestion de caches distants Chargement transparent de données distantes, cache de données, ...
globus_gass_open()/close()
URL dans le cache?
oui non Charger le fichier dans le cache Ouvrir le fichier caché, ajouter une reference cache globus_gass_open() globus_gass_close() Modifié Oui Mettre à jour les changements non Supprimer la référence cache
Nexus
Dans un système tel que Globus, la meilleure méthode de communication peut changer Nexus Support pour des communications multi-méthodes Principes de base : lien de communication et RSR (Remote Service Request)
GSI
Grid Security Infrastructure Basé sur le système de clé publique certificats au standard X.509 (comme sur Internet) Chaque utilisateur a : un identificateur d’utilisateur de la grille, une clé privée, un certificat en bonne et due forme.
Un fichier « globusmap » sur chaque site fait la correspondance entre grid-id et local-id
HBM et GloPerf
HeartBeat Monitor : outil de surveillance des composants Globus.
Détection de l’échec d’un nœud de calcul Monitoring de processus système depuis Globus Utilisé par d’autres applications (ex : NetSolve) comme module de tolérance aux pannes GloPerf : Globus Network Performance Measurement Tool Mesure de la bande passante et de la latence entre chaque site du MDS Pas très évolué et un peu lourd
Compléments d’information
Globus Project™ www.globus.org
Grid Forum www.gridforum.org
Livre (Morgan Kaufman) www.mkp.com/grids Globus 2.2
Maintenu jusque fin 2003 Globus 3 Web Services Janvier 2003 (GlobusWorld)