Communications dans les grappes hautes performances - PowerPoint PPT Presentation

About This Presentation
Title:

Communications dans les grappes hautes performances

Description:

Communications dans les grappes hautes performances Raymond Namyst LaBRI Universit de Bordeaux I – PowerPoint PPT presentation

Number of Views:144
Avg rating:3.0/5.0
Slides: 99
Provided by: CRI1166
Category:

less

Transcript and Presenter's Notes

Title: Communications dans les grappes hautes performances


1
Communications dans les grappes hautes
performances
  • Raymond Namyst
  • LaBRI
  • Université de Bordeaux I

2
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

3
Technologiesmatérielles
Cartes passives, actives,réseaux à capacité
dadressage
4
(FastGiga)-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 lEthernet classique

Hub
Switch
5
Ethernet
  • Cartes passives (sauf Giga-Ethernet)
  • Interfaces TCP, SBP, GAMMA, VIA,

Memory
TX-ring
DMA
TX reg RX reg
Network
PCI Bus
PCI Bridge
Packet Interface
NIC
6
Myrinet
  • Société Myricom (C. Seitz)
  • Interconnexion
  • Switch
  • Câblage
  • Nappes courtes
  • Cartes équipées dun processeur
  • Latence
  • 12 µs
  • Débit
  • 1 Gb/s
  • Note
  • Durée de vie limitée des messages (50 ms)

7
Myrinet
  • Routage
  • Réseau commuté, routage wormhole
  • Carte programmable
  • Protocoles de transmission  intelligents 
  • Stratégie adaptée à la taille des messages
  • Déclenchement dinterruptions

DMA
SRAM
Network
Packet Interface
PCI Bus
PCI Bridge
RISC
LANai
NIC
8
SCI
  • Scalable Coherent Interface
  • Norme IEEE (1993)
  • Société Dolphin
  • Fonctionnement par accès mémoire distants
  • Projections despaces dadressage

Réseau SCI
Mémoire
Mémoire
Bus PCI
Bus PCI
Machine A
Machine B
9
Carte à capacité d addressage
BUS PCI
BUS PCI
Pci req addrdata
Pci req addrdata

Interface paquet

Interface paquet
Paquet SCI
Paquet SCI
Partie émission
Partie réception
10
Adressage à distance
  • Projections effectué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 nest pas (forcément)
    interrompu

11
SCI mécanisme dadressage
Adresse Virtuelle
32 bits
MMU
Adresse Physique (E/S)
32 bits
Bus dE/S
10 bits
18 bits
Table de Translation des Adresses
30 bits
16 bits
18 bits
Destinataire
Réseau
12
SCI mécanisme dadressage
Réseau
30 bits
18 bits
Adresse Physique (E/S)
32 bits
Bus dE/S
Mémoire
13
SCI performances
  • Latence 2.5 ms (écriture de processus à
    processus)
  • Débit 45 Mo/s
  • Verrou lt 10 ms (fetchadd)

14
Interfaces de bas niveau
BIP, SISCI, VIA
15
Communications performantes
  • Comment exploiter les réseaux rapides ?
  • Faible latence
  • Quelques microsecondes
  • Bande passante élevée
  • De lordre 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

16
Interfaces
  • Initialisation
  • Réservée au système
  • Uniquement en début de session
  • Transferts
  • Directs depuis lespace utilisateur
  • Pas dappels systèmes
  • Pas de transitions
  • Transmissions zéro-copie

17
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

18
Basic Interface for Parallelism BIP
  • L. Prylli B. Tourancheau
  • Principe
  • Envoi de message classique (asynchrone)
  • Pas de contrôle de flux
  • Pas de detection derreur
  • Performances
  • Latence 4.8us, débit 126 Mo/s

19
BIP
  • Fonctionnalités réduites au minimum
  • Messages courts recopiés à larrivée
  • Messages longs mode zéro-copie (RDV)
  • Contrôle de flux minimal
  • Matériel (msgs évaporés au dela de 50ms)

20
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

21
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 ? 4 us
  • Bande passante ? 85 Mo/s (difficilement !)

22
SCI optimisations matérielles
  • Caches dans la carte
  • Read Prefetching
  • Write Combining

23
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 datomicité des transactions PCI
  • Assez inhabituel (?)

24
VIA
  • Virtual Interface Architecture
  • Tentative de standardisation
  • Beaucoup dindustriels impliqués
  • Caractéristiques
  • Principe dinterfaces virtuelles
  • Zones de transmission protégées
  • Lectures/Ecritures distantes

25
VIA Basic Principles
  • Use the Kernel for Set-Upand Get It Out of the
    Way for Send/Receive!
  • The Virtual Interface (VI)
  • Protected Application-Application Channel
  • Memory Directly Accessible by User Process
  • Target Environment
  • LANs and SANs at Gigabit Speeds
  • No Reliability of Underlying Media Assumed

26
VI Architecture
VI Consumer
Host
VI User Agent (libvia)
VI Kernel Agent (Slow)
User-Level (Fast)
Descriptor Read, Write
Open, Connect, Map Memory
Doorbells
Undetermined
RequestsCompleted
NIC
VI-Capable NIC
27
A Virtual Interface
VI Consumer
Send Q
Recv Q
Send Doorbell
Receive Doorbell
Descriptor
Descriptor
Descriptor
Descriptor
Status
Status
VI-Capable NIC
28
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...

29
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
30
Memory Registration
  • Data buffers and descriptors must reside within
    a region of registered memory
  • Call VipRegisterMemory
  • Pins the specified pages into physical memory
  • Communicates the addresses to the NIC
  • To allow DMA I/O from the NIC

31
Ce quil 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é ???

32
Interfaces de haut niveau
LA solution ?
33
Bibliothèques
  • Paradigme passage de message
  • Les nœuds se synchronisent et communiquent par
    messages
  • Deux instructions de base
  • Send émission dun message
  • Receive réception dun message
  • Points forts
  • Simple à mettre en oeuvre
  • Permet démuler les autres paradigmes

34
PVM
  • Parallel Virtual Machine
  • Laboratoire National dOak 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 lhétérogénéité
  • XDR

35
MPI
  • Message Passing Interface
  • MPI-Forum v1.0 1994 v2.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

36
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 a priori
    par le récepteur
  • Transmissions zéro-copie ?
  • Messages asynchrones
  • Recouvrement des communications ?
  • Accès mémoire distants (PUT/GET)
  • Temps de réponse ?

37
Transmissions zéro-copie
Processus A
Processus B
Réseau
38
Transmissions zéro-copie
Processus A
Processus B
Réseau
39
Transmissions zéro-copie
Processus A
Processus B
Réseau
40
Transmissions zéro-copie
Processus A
Processus B
Réseau
41
Transmissions zéro-copie
Processus A
Processus B
Réseau
42
Transmissions zéro-copie
Processus A
Processus B
Réseau
43
Transmissions zéro-copie
Processus A
Processus B
Réseau
44
Transmissions zéro-copie
Processus A
Processus B
Réseau
45
Et la réactivité alors ?
  • Problèmes
  • Assurer la progression des communications
    asynchrones
  • Réagir rapidement aux sollicitations extérieures

réseau
46
Envois asynchrones
  • Parvient-on vraiment à assurer du recouvrement ?

MPI_Isend
MPI_recv
MPI_test
Processus A
Processus B
47
Interfaces deniveau intermédiaire
Madeleine principe et interface
48
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 doptimisation
  • Transferts immédiats possibles
  • Statut
  • Disponible sur BIP, GM, SISCI, VIA, TCP et MPI.

49
Interface
  • Construction des messages
  • Gestion des canaux ( communicators)
  • Choix explicite du dispositif physique

mad_begin_packing
mad_pack
mad_end_packing
mad_begin_unpacking
mad_unpack
mad_end_unpacking
50
Construction des messages
  • Commandes
  • Mad_pack(cnx, buffer, len, pack_mode,
    unpack_mode)
  • Mad_unpack(cnx, buffer, len, pack_mode,
    unpack_mode)
  • Modes démission
  • Send_CHEAPER
  • Send_SAFER
  • Send_LATER
  • Modes de réception
  • Receive_CHEAPER
  • Receive_EXPRESS
  • Contraintes dutilisation
  • Séquences pack/unpack strictement symétriques
  • Triplets (len, pack_mode, unpack_mode) identiques
    en émission et en réception
  • Cohérence des données

51
Contrat programmeur/interface
  • Send_SAFER/Send_LATER/Send_CHEAPER
  • Contrôle du transfert des données
  • Latitude doptimisation
  • Engagement du programmeur
  • Intégrité des données
  • Services particuliers
  • Émission différée
  • Réutilisation de tampons
  • Spécification au niveau sémantique
  • Indépendance service requis / technique
    sélectionnée

52
Émission
Send_SAFER
Send_LATER
Send_CHEAPER
Pack
Modification
?
End_packing
53
Structuration des messages
  • Receive_CHEAPER/Receive_EXPRESS
  • Receive_EXPRESS
  • Réception immédiate impérative
  • Interprétation/extraction du message
  • Receive_CHEAPER
  • Réception libre du bloc
  • Contenu du message

54
Réception
Receive_EXPRESS
Receive_CHEAPER
Unpack
Après Unpack
Donnée disponible
Disponibilité ???
End_unpacking
Donnée disponible
55
Exemple
Sending side
Receiving side
int n
int n
char s NULL
char s "Hello, World !"
p_mad_connection_t cnx
p_mad_connection_t cnx
cnx mad_begin_unpacking(channel)
cnx mad_begin_packing(channel, dest)
n strlen(s) 1
mad_unpack(cnx, n, sizeof(int),
mad_pack(cnx, n, sizeof(int),
send_CHEAPER,receive_EXPRESS)
send_CHEAPER, receive_EXPRESS)
s malloc(n)
mad_unpack(cnx, s, n,
mad_pack(cnx, s, n,
send_CHEAPER,receive_CHEAPER)
send_CHEAPER, receive_CHEAPER)
mad_end_unpacking(cnx)
mad_end_packing(cnx)
56
Exemple
Sending side
Receiving side
int n
int n
char s NULL
char s "Hello, World !"
p_mad_connection_t cnx
p_mad_connection_t cnx
cnx mad_begin_unpacking(channel)
cnx mad_begin_packing(channel, dest)
n strlen(s) 1
mad_unpack(cnx, n, sizeof(int),
mad_pack(cnx, n, sizeof(int),
send_CHEAPER,receive_EXPRESS)
send_CHEAPER, receive_EXPRESS)
s malloc(n)
mad_unpack(cnx, s, n,
mad_pack(cnx, s, n,
send_CHEAPER,receive_CHEAPER)
send_CHEAPER, receive_CHEAPER)
mad_end_unpacking(cnx)
mad_end_packing(cnx)
57
Exemple
Sending side
Receiving side
int n
int n
char s NULL
char s "Hello, World !"
p_mad_connection_t cnx
p_mad_connection_t cnx
cnx mad_begin_unpacking(channel)
cnx mad_begin_packing(channel, dest)
n strlen(s) 1
mad_unpack(cnx, n, sizeof(int),
mad_pack(cnx, n, sizeof(int),
send_CHEAPER,receive_EXPRESS)
send_CHEAPER, receive_EXPRESS)
s malloc(n)
mad_unpack(cnx, s, n,
mad_pack(cnx, s, n,
send_CHEAPER,receive_CHEAPER)
send_CHEAPER, receive_CHEAPER)
mad_end_unpacking(cnx)
mad_end_packing(cnx)
58
Exemple
Sending side
Receiving side
int n
int n
char s NULL
char s "Hello, World !"
p_mad_connection_t cnx
p_mad_connection_t cnx
cnx mad_begin_unpacking(channel)
cnx mad_begin_packing(channel, dest)
n strlen(s) 1
mad_unpack(cnx, n, sizeof(int),
mad_pack(cnx, n, sizeof(int),
send_CHEAPER,receive_EXPRESS)
send_CHEAPER, receive_EXPRESS)
s malloc(n)
mad_unpack(cnx, s, n,
mad_pack(cnx, s, n,
send_CHEAPER,receive_CHEAPER)
send_CHEAPER, receive_CHEAPER)
mad_end_unpacking(cnx)
mad_end_packing(cnx)
59
Exemple
Sending side
Receiving side
int n
int n
char s NULL
char s "Hello, World !"
p_mad_connection_t cnx
p_mad_connection_t cnx
cnx mad_begin_unpacking(channel)
cnx mad_begin_packing(channel, dest)
n strlen(s) 1
mad_unpack(cnx, n, sizeof(int),
mad_pack(cnx, n, sizeof(int),
send_CHEAPER,receive_EXPRESS)
send_CHEAPER, receive_EXPRESS)
s malloc(n)
mad_unpack(cnx, s, n,
mad_pack(cnx, s, n,
send_CHEAPER,receive_CHEAPER)
send_CHEAPER, receive_CHEAPER)
mad_end_unpacking(cnx)
mad_end_packing(cnx)
60
Exemple
Sending side
Receiving side
int n
int n
char s NULL
char s "Hello, World !"
p_mad_connection_t cnx
p_mad_connection_t cnx
cnx mad_begin_unpacking(channel)
cnx mad_begin_packing(channel, dest)
n strlen(s) 1
mad_unpack(cnx, n, sizeof(int),
mad_pack(cnx, n, sizeof(int),
send_CHEAPER,receive_EXPRESS)
send_CHEAPER, receive_EXPRESS)
s malloc(n)
mad_unpack(cnx, s, n,
mad_pack(cnx, s, n,
send_CHEAPER,receive_CHEAPER)
send_CHEAPER, receive_CHEAPER)
mad_end_unpacking(cnx)
mad_end_packing(cnx)
61
Exemple
Sending side
Receiving side
int n
int n
char s NULL
char s "Hello, World !"
p_mad_connection_t cnx
p_mad_connection_t cnx
cnx mad_begin_unpacking(channel)
cnx mad_begin_packing(channel, dest)
n strlen(s) 1
mad_unpack(cnx, n, sizeof(int),
mad_pack(cnx, n, sizeof(int),
send_CHEAPER,receive_EXPRESS)
send_CHEAPER, receive_EXPRESS)
s malloc(n)
mad_unpack(cnx, s, n,
mad_pack(cnx, s, n,
send_CHEAPER,receive_CHEAPER)
send_CHEAPER, receive_CHEAPER)
mad_end_unpacking(cnx)
mad_end_packing(cnx)
62
Interfaces deniveau intermédiaire
Madeleine implantation
63
Organisation verticale
  • Utilisation du modèle traditionnel à deux couches
  • Gestion des tampons
  • Factorisation du code de traitements de données
  • Abstraction du matériel

Interface
Gestion des tampons
Gestion de protocole
Réseau
64
Organisation horizontale
  • Approche modulaire
  • Module de gestion de tampons (MGT)
  • Module de gestion de protocole (MGP)
  • Module de transmission (MT)

Interface
MGT
MGT
Gestion des tampons
MGP
MGP
MT
MT
MT
Gestion de protocole
Réseau
65
Modules de transmission
Madeleine
Interface
MGT
MT
MGT
MT
Thread
Réseau
Processus
66
Adaptativité
  • Sélection du mode de transmission adéquat

Interface
Pack
Gestion des tampons
?
Gestion de protocole
67
Implementation
  • Madeleine II a été portée sur
  • SISCI/SCI
  • BIP/Myrinet
  • MPI
  • VIA
  • TCP
  • SBP

68
Évaluation
  • Environnement de test
  • Grappe de PC bi-Pentium II 450 MHz, 128 Mo
  • Réseau Fast-Ethernet
  • Réseau SISCI/SCI
  • Réseau BIP/Myrinet
  • Méthode de test
  • Unidirectionnel
  • Mesure 1000 émissions 1 réception
  • Résultat moyenne sur 5 mesures
  • Bidirectionnel
  • Mesures 1000 x (émission réception)
  • Résultat moyenne sur 5 mesures

69
SISCI/SCI temps de transfertTest
unidirectionnel
Temps de transfert (µs)
Taille de paquet (octets)
70
SISCI/SCI débitTest unidirectionnel
Débit (Mo/s)
Taille de paquet (octets)
71
SISCI/SCI temps de transfertTest bidirectionnel
Temps de transfert (µs)
Taille de paquet (octets)
72
SISCI/SCI débitTest bidirectionnel
Débit (Mo/s)
Taille de paquet (octets)
73
SISCI/SCI temps de transfertPacks/messages
Temps de transfert (µs)
Taille de paquet (octets)
74
SISCI/SCI débitPacks/messages
Débit (Mo/s)
Taille de paquet (octets)
75
Interfaces deniveau intermédiaire
Gestion du multiplexage
76
Proposition
  • Concept de canal
  • Similaire à un communicator MPI
  • Un canal, cest
  • Un protocole
  • Une carte dinterface
  • Un ensemble de nœuds
  • Un ensemble de connexions point-à-point

77
Les Canaux
  • Canal
  • Réseau
  • Ensemble de noeuds
  • Ensemble de connexions point-à-point

78
Gestion des ressources
  • Problème
  • Chaque canal consomme des ressources réseau
  • Tags BIP, descripteurs SCI, descripteurs TCP
  • Le nombre de ressources peut dépendre du nombre
    de nœuds !
  • Segments de mémoire partagée SCI
  • Solution
  • Introduire des fonctionnalités de multiplexage

79
Cest quoi le Multiplexage ?
  • Virtualisation des ressources
  • Idéalement disposer de xchannels
  • Utilisables comme des channels
  • Disponibles en quantité arbitraire
  • Arghhh! Et les performances ?
  • Trouver le bon niveau dabstraction
  • Conserver les canaux réels

80
Multiplexage à quel niveau ?
  • Sur-couche au-dessus de Madeleine
  • Ex abtraction de type messages actifs
  • Multiplexage partiel -gt pas dentrelacement des
    packs
  • Multiplexage complet -gt contrôle de flux à chaque
    pack ou recopies à larrivée
  • Contrôle de flux interne à Madeleine
  • A chaque pack
  • Même problème que ci-dessus

81
Vers les grappes degrappes
82
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/Myrinet
83
PACX-MPI
  • Mécanismes transparents pour lapplication
  • TCP/IP est utilisé sur les liaisons inter-grappes
  • Deux noeuds passerelles sont dédiés sur chaque
    grappe

TCP
MPI
MPI
TCP
84
MPICH-G2
  • Implémentation Multi-grappes de MPICH
  • Communications intra-grappe
  • MPI
  • Communications inter-grappes
  • TCP
  • Communications directes (pas de routage)

Myrinet
Internet
MPI
MPI
SCI
85
Support multi-grappe
  • Exploitation des grappes de grappes
  • Réseaux intra-grappes rapides
  • Liens inter-grappes rapides
  • Hétérogénéité au niveau réseau

86
Principe
  • Canaux réels
  • Liés à un réseau
  • Ne couvrent pas nécessairement tous les nœuds
  • Canaux virtuels
  • Couvrent tous les nœuds
  • Contiennent plusieurs canaux réels

87
Fonctionnement
  • Retransmission multi-réseau automatique
  • Approche générique
  • Fonctionnement multi-threadé
  • Routes statiques
  • Notion de MTU

88
Préservation du débit
  • Une seule copie
  • Même tampon pour réception et retransmission

LANai
  • Pipeline
  • Réceptions et réémissions simultanées

89
Intégration
  • Module de transmission générique
  • Limitation du code traversé sur les passerelles

Interface
MGT
MGT
Gestion des tampons
MT générique
MT
MT
MT
Gestion de protocole
Réseau
90
Module de retransmission
Madeleine
MT
Interface
MGT
MT
Réseau 1
MT
Thread
Threads
Réseau 2
Processus
91
Tests de performances
  • Ping-pong entre 2 machines séparées par une
    passerelle

3
2
1
Myrinet
SCI
92
Multi-grappes
93
Évaluation
94
Intégration des threadset des communications
Réactivité des nœuds aux E/S
95
Progression des communications
  • Problème
  • Comment assurer la progression des communications
    ?

réseau
96
Scrutation et interruptions
  • La scrutation est nécessaire
  • API réseau ne fournissant pas dappels bloquants
  • OS ne fournissant pas dactivations
  • 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 ?

97
Support de lordonnanceur
  • Ordonnanceur serveur de scrutation
  • Choix de la méthode daccè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 

98
Scrutation par lordonnanceur
? Création dune catégoriede polling (ex MPI),
assignation dune fréquence et enregistrement de
callbacks.
Polling jobsqueue
? Régulièrement, lordonnanceur appelle la
fonction de scrutation définie par
lutilisateur...
Ordonnanceur
des threads
Write a Comment
User Comments (0)
About PowerShow.com