Mauro Bampo Reti di Calcolatori L-S Un Sistema Decentrato di Allocazione del Carico per Applicazioni di Calcolo Distribuito L’Idea Realizzare un supporto alla scrittura di applicazioni parallele di calcolo (scientifiche, simulazione, …) Investigare la realizzazione di un sistema decentrato ed eventualmente tollerante ai guasti Raccolta delle risorse di calcolo in rete locale (più semplice di scenari globali) 08/09/2005 Sistema Decentrato di Allocazione del Carico 2 Requisiti Permettere di: Avviare una applicazione Definire processi e strutture dati Allocazione automatica di dati e processi, secondo le capacità ed il carico attuale dei nodi Supporto alle modifiche dinamiche della rete durante l’esecuzione Offrire qualche forma di fault tolerance 08/09/2005 Sistema Decentrato di Allocazione del Carico 3 Architettura Logica Due sottosistemi presenti su tutti i nodi: Supporto al mantenimento di un anello logico (semplice) tra i nodi partecipanti alla griglia di calcolo Servizi di allocazione di processi e dati 08/09/2005 Ingresso / uscita dei nodi Fault detection & recovery Bilanciamento del carico Sfrutta la conoscenza sui vicini offerta dal primo modulo Sistema Decentrato di Allocazione del Carico 4 Gestione della Topologia (1) Permette ingressi e uscite di nodi Protocollo ad-hoc basato su UDP Riferimento ai vicini in ogni nodo Ogni nuovo entrante prende l’iniziativa scegliendo la posizione dell’anello in cui inserirsi 08/09/2005 broadcast per scoprire i nodi già attivi (LAN: reliable) scelta dei due nodi più rapidi nella risposta aggiornamento dei riferimenti Sistema Decentrato di Allocazione del Carico 5 Gestione della Topologia (2) Uscita dall’anello comunicando ai vicini di aggiornare i riferimenti in modo incrociato Problema del protocollo: non supporta i join contemporanei di più nodi → attenzione al startup della rete 08/09/2005 Sistema Decentrato di Allocazione del Carico 6 Fault Tolerance Tolleranza alla caduta del singolo nodo Messaggi AreYouAlive scambiati tra nodi vicini Alla caduta di un nodo: 08/09/2005 si comunica il fallimento agli altri nodi e ad eventuali clienti (strati superiori) si ricostruisce l’anello (serie di operazioni di join, diversamente ritardate, da parte dei nodi sopravvissuti) Sistema Decentrato di Allocazione del Carico 7 Gestione dell’Esecuzione Server che gestisce l’allocazione sotto forma di oggetto Java remoto (un’istanza su ogni nodo) Ad ogni server può essere richiesto il lancio di applicazioni e l’allocazione di processi e dati condivisi tra questi Ogni nodo dispone di una stima delle performance della macchina (potenza di calcolo e disponibilità di memoria) Caricate da file → una stima dinamica potrebbe essere migliore Coordinazione dei nodi per effettuare le scelte di allocazione Applicazioni lanciate richiedendo, ad uno dei servitori disponibili, l’allocazione del processo principale 08/09/2005 Sistema Decentrato di Allocazione del Carico 8 Allocazione dei Processi (1) Determinazione del servitore più scarico tramite interrogazione di tutti i nodi Ogni nodo stima il proprio carico come: LOAD = N_PROC / (CPU_PERF * N_CPU) dove: N_PROC: numero di processi allocati CPU_PERF: fattore indicante la potenza computazionale delle CPU della macchina (da misurarsi con un criterio uniforme per tutte le macchine) N_CPU: numero di CPU sul nodo 08/09/2005 Sistema Decentrato di Allocazione del Carico 9 Allocazione delle Strutture Dati Oggetti condivisi tra processi identificati nel sistema da una coppia (nome_applicazione, id_oggetto) Ogni processo può richiedere l’allocazione di un dato al nodo corrente o al nodo con maggiore memoria disponibile 08/09/2005 Sistema Decentrato di Allocazione del Carico 10 Accesso alle Strutture Dati Quando un processo richiede l’accesso ad una struttura dati, se questa non è già in uso, viene trasferita sul nodo da cui è acceduta Necessità di rendere effettive le modifiche → Implementazione con oggetti remoti? Viene permesso l’accesso ad un oggetto condiviso ad un solo processo per volta 08/09/2005 I processi che richiedono un dato già in uso restano bloccati in un ciclo di polling, fino alla rimozione del lock → Sincronizzazione più stretta? Coda di processi in attesa… Sistema Decentrato di Allocazione del Carico 11 Ancora sulla Fault Tolerance Tolleranza al guasto singolo a livello dei servizi di allocazione: trasparenza completa difficilmente garantibile (necessità di copie dello stato dei processi in esecuzione sul nodo caduto…) Si garantisce il completamento delle applicazioni, facendole ripartire tutte una volta ricostruito l’anello Ogni nodo a cui è richiesto il lancio di un’applicazione memorizza una copia del relativo record localmente, e una copia ridondante presso il nodo vicino Le applicazioni lanciate sul nodo caduto vengono fatte ripartire dai nodi che detengono i record ridondanti 08/09/2005 Sistema Decentrato di Allocazione del Carico 12 Risultati Testing con un’applicazione per la fattorizzazione di interi Valori di speed-up vicini al numero di macchine utilizzate, nei casi migliori Tuttavia è critica la configurazione dei nodi in termini di stima delle performance Difficile con hardware eterogeneo 08/09/2005 Utile un meccanismo di stima dinamica delle capacità di elaborazione Sistema Decentrato di Allocazione del Carico 13 Strade Aperte Molti miglioramenti possibili Sincronizzazione più stretta in fase di join Migliore gestione dell’accesso concorrente alle strutture dati Strutture dati come oggetti remoti? Restart delle sole applicazioni con processi in esecuzione sul nodo caduto Nuove funzionalità 08/09/2005 Replicazione dei dati per migliori performance Stima dinamica delle performance dei nodi Deployment del codice delle applicazioni Sistema Decentrato di Allocazione del Carico 14