1 Campi di Galois: riepilogo e notazioni [1] 2 Il sistema RAID 6
Transcript
1 Campi di Galois: riepilogo e notazioni [1] 2 Il sistema RAID 6
Corso: Gestione ed elaborazione grandi moli di dati Lezione del: 2 maggio 2006 Argomento: Raid 6: Campi di Galois Scribes: Tullio Coppotelli, Claudio Lora e Marco Rizzi 1 Campi di Galois: riepilogo e notazioni [1] Dalle lezioni precedenti ricordiamo che esiste un isomorfismo tra GF (2w ) e gli interi nell’intervallo [0, 2w −1], dove ad ogni polinomio di GF (2w ) corrisponde l’intero la cui rappresentazione binaria é data dai coefficienti del polinomio. Inoltre gli elementi diversi da zero di GF (2w ) sono generati da xi mod q(x), con 0 ≤ i ≤ 2w − 2, dove q(x) é un polinomio primitivo di grado w su GF(2). Dati a, b ∈ [0, 2w − 1], le operazioni sono cosı́ definite: • a+b corrisponde allo XOR bit a bit delle loro rappresentazioni binarie ed equivale perció alla somma dei corrispondenti polinomi in GF (2w ) • a − b viene eseguita allo stesso modo della somma • a · b corrisponde x(i+j)mod(2 • a/b corrisponde x(i−j)mod(2 w −1) w −1) se a, b 6= 0 con a = xi , b = xj se a, b 6= 0 con a = xi , b = xj . Si definiscono quindi due tabelle che associano ad ogni intero in [1, 2w −1] la corrispondente potenza i di x e viceversa GFLOG(a) = i, se a rappresenta l’elemento xi di GF (2w ), con a ∈ [1, 2w − 1] e 0 ≤ i ≤ 2w − 2. E la sua inversa GFILOG(i ) = a, se l’elemento xi di GF (2w ) rappresenta a, con a ∈ [1, 2w −1] e 0 ≤ i ≤ 2w −2. Grazie a queste due tabelle siamo in grado di moltiplicare 2 elementi di GF (2w ) in maniera efficiente semplicemente effettuando degli accessi alle tabelle. Vediamo qualche esempio nel caso w=4 (vedi tabella 1): 2*3=GFILOG[GFLOG[2] + GFLOG[3]]=GFILOG[1+4]=GFILOG[5]=6 13*10=GFILOG[GFLOG[13] + GFLOG[10]]=GFILOG[(13+9) mod 15]=GFILOG[7]=11 Vogliamo far notare in particolare che le somme dei risultati di GFLOG vanno eseguite in w modulo 2w − 1 in quanto xi = xi mod (2 −1) . 2 Il sistema RAID 6 Quando i dati vengono memorizzati in maniera distribuita su piú dischi la probabilitá che una di queste periferiche si rompa comincia a diventare significativa. 1 Figura 1: Esempio utilizzo dischi per n=8, m=2 Definiamo F come il tempo medio tra due rotture (Mean Time Between Failure o MTBF). Questa é una metrica molto diffusa nell’IT e viene calcolata sulla base degli effettivi dati di utilizzo o sulla base di stime effettuate dai fornitori di hardware. L’MTBF di un sistema con n dischi risulta essere Fn e quindi, in un sistema del genere, la fault-tolerance deve essere presa in considerazione. Per valori piccoli di n e periferiche ragionevolmente affidabili un singolo disco di checksum é spesso sufficiente. Questo é ad esempio il caso del livello 5 del sistema RAID e della tecnica di codifica nota come paritá n+1 dove l’i-esimo byte del disco di checksum é calcolato come lo XOR degli i-esimi byte dei rimanenti dischi. Quest’ultima tecnica é utilizzata per la sua semplicitá: richiede infatti un solo disco supplementare ed un’operazione di scrittura addizionale per ogni scrittura su un singolo disco. A fronte di tale semplicitá vi é peró un grande svantaggio: questo sistema non é in grado di resistere al verificarsi di piú di un errore simultaneo. Risulta quindi evidente come al crescere di n cresca anche l’importanza per il sistema di tollerare il verificarsi di piú errori contemporanei. Da queste considerazioni si deduce l’importanza di definire uno schema generale in grado di tollerare la rottura di m dischi (m ≥ 2) utilizzando n dischi di dati D0 , D1 , . . . Dn−1 ed m dischi di checksum C0 , C1 , . . . Cm−1 . Nell’esempio in figura 1 i valori dei dischi C1 e C2 sono calcolati applicando rispettivamente le funzioni F1 ed F2 . La codifica Raid 6 divide ogni disco in parole, ognuna di w bits. Ogni disco contiene bits 1 parola · w bits = 8k quindi l = k bytes · 8 byte w parole, dove k é la dimensione del disco in bytes. La funzione di codifica lavora sulle singole parole. Vediamo nel dettaglio come funziona l’algoritmo: 1) Determinare w. Come prima operazione da eseguire é necessario determinare su quale campo dobbiamo la- 2 vorare. Per tollerare m rotture dobbiamo scegliere w in modo tale che 2w > n + m. Inoltre é piú semplice scegliere valori di w come 8 o 16 in modo tale che siano multipli del byte. Si noti inoltre che scegliendo w = 16 si puó raggiungere un valore di n+m pari a 65.535. 2) Creiamo le tabelle GFLOG e GFILOG Come abbiamo giá sottolineato queste tabelle sono fondamentali per l’esecuzione delle moltiplicazioni. In [1] é fornito il codice C per generare le tabelle per GF (24 ), GF (28 ), GF (216 ). 3) Calcoliamo le matrici F e B Definiamo la matrice F come matrice di Vandermonde di dimensioni (m + n) · n dove le moltiplicazioni sono eseguite in GF (2w ). F = [fij ] con i, j tali che 0 ≤ i < n + m, 0 ≤ j < n, in cui fij = ij , la matrice sará quindi del tipo: F= 1 1 1 .. . 0 1 21 .. . 0 1 22 .. . ... ... ... .. . 0 1 2n−1 .. . 1 (n + m − 1)1 (n + m − 1)2 . . . (n + m − 1)n−1 dove la riga i-esima (0 ≤ i < n + m) di F é associata all’intero i visto come elemento di w GF (2w ), se i corrisponde a xl allora ij corrisponde a x(l·j)mod(2 −1) Date queste caratteristiche, la matrice F gode delle due seguenti proprietá: Proprietá 1 Un qualsiasi sottoinsieme di n righe di F forma una matrice n · n invertibile. Applicando a F operazioni elementari di colonna del tipo: Ck ← a · Ck , con a ∈ GF (2w ), a 6= 0 Ck ← Ck + a · Cj , con a ∈ GF (2w ), 0 ≤ j 6= k < n possiamo trasformarla nella matrice: In,n Gm,n Bn+m,n = ! dove I rappresenta la matrice identitá di dimensioni n · n. Si puó dimostrare (per esercizio) che B gode della seguente proprietá: Proprietá 2 Un qualsiasi sottoinsieme di n righe di B forma una matrice n · n invertibile. 3 ... ... ... ... ... ... ... ... ... ... ... ... ... ... δ0 δ1 δn−1 γ0 ... ... ... ... ... ... ... ... ... ... D0 D1 Dn−1 C0 ... ... ... ... ... γm−1 Cm−1 4) Calcoliamo i valori di checksum Si partizioni ogni disco in parole di w bit e si consideri una stripe δ0 , δ1 , . . . , δn−1 , γ0 , γ1 , . . . γm−1 costituite da parole corrispondenti nei vari dischi, dove δi ∈ Di e γj ∈ Cj . Tali parole possono essere interpretate come le notazioni binarie di elementi di GF (2w ). I valori δi sono indipendenti dall’algoritmo, mentre si deve procedere al calcolo dei valori γj da memorizzare nei dischi di checksum. Si definiscono i vettori colonna ∆ = [δ0 δ1 . . . δn−1 ]T e Γ = [γ0 γ1 . . . γm−1 ]T Si definisce Γ=G·∆ (1) e quindi " ∆ Γ # =B·∆ (2) In particolare la formula 1 ci permette di ricavare il contenuto degli m dischi di checksum a partire dagli n dischi dati. 5) Modifica dei dati Cerchiamo ora di comprendere come si comporta il sistema in caso di modifica dei dati. Si supponga che venga modificata la parola δi ∈ ∆ in δi0 6= δi mentre le altre parole restino inalterate, cioé ∀k 6= i sia δk0 = δk . Possiamo riscrivere la formula 1: γ00 γ10 .. . 0 γm−1 = g0,0 gi,0 ... .. . g0,n−1 ... .. . gi,n−1 gm−1,0 . . . gm−1,n−1 δ0 . .. δi0 . . . δn−1 dove gji rappresenta la entry nella riga j e colonna i della matrice Gm,n . 4 Allora tutte le parole nei dischi di checksum dovranno essere modificate, cioé ∀j, 0 ≤ j < m, γj → γj0 dove, effettuando la moltiplicazione riga per colonna, risulta: γj0 = n−1 X gjk δk0 k=0 Sappiamo peró che é cambiata una sola parola, δi , quindi la sommatoria dará come risultato γj piú la variazione dovuta alla modifica di δi : γj0 = n−1 X gjk δk0 = γj + gji (δi0 − δi ) k=0 Notiamo come la modifica di una parola in un disco dati ci costringa ad effettuare una operazione di scrittura su ogni disco di Checksum, appesantendo il sistema. Questo degrado delle prestazione é il prezzo da pagare per un sistema in grado di tollerare un numero arbitrariamente grande di rotture (limitato solo dal numero massimo di dischi che siamo in grado di gestire con l’array). 6) Recovery in seguito a failure Vediamo infine come si comporta il sistema in seguito ad una rottura. Innanzitutto ridefiniamo la formula 2 " # ∆ (3) =B·∆ E= Γ Si supponga che un certo numero di dischi (di dati o di checksum) siano guasti. Se i dischi guasti sono al piú m, il sistema RAID utilizzato ci permette di recuperare tutte le informazioni. E’ necessario creare la matrice B 0 n · n ottenuta da B scegliendo n righe associate ad n dischi funzionanti (ricordiamo che B 0 é invertibile per la Proprietá 2). Sia E 0 il sottoinsieme di E associato alle stesse righe scelte per B (corrispondenti ai dischi). Se i dischi funzionanti sono piú di n si sceglie comunque un sottoinsieme di E associato ad n dei dischi funzionanti. Per definizione si ha che B 0 · ∆ = E 0 da cui si deriva la relazione ∆ = (B 0 )−1 · E 0 che permette di recuperare i dati persi negli n dischi dati. A questo punto risulta semplice recuperare anche i dati persi negli m dischi di checksum poiché é sufficiente utilizzare la formula 1 esattamente come fatto al punto 4. Notiamo infine che perché il sistema funzioni si deve sempre conoscere la matrice B. Definiti w, n ed m la matrice B resta costante e puó essere memorizzata all’interno del controller stesso e non all’interno dei dischi (in caso di rottura del controller comunque il sistema RAID 5 non funzionerebbe). La memorizzazione di E’ invece non costituisce un problema poiché viene ricavata a partire da informazioni memorizzate in n dei dischi funzionanti. 3 Prestazioni [3] Il sistema RAID 6 richiede un controller hardware specializzato (costoso). Richiede un minimo di 4 hard disks mentre il massimo dipende dal controller utilizzato. Gli hard disk devono essere tutti della stessa dimensione. Se vengono utilizzati dischi di diverse dimensioni viene sprecato dello spazio, come si vede con la formula successiva. La capacitá dell’array é pari a Dimensione del disco piu0 piccolo · (numero di dischi − m) dove m é definito come sopra. Fault Tolerance: da molto buona ad ottima. Puó sopportare la rottura simultanea di m degli n+m dischi dell’array. Availability: ottima. Degradation and Rebuilding: A causa della complessitá dell’architettura il degrado delle prestazioni puó essere significativo in seguito ad una rottura e durante la ricostruzione dei dischi di checksum. E’ possibile rimandare la fase di ricostruzione per evitare tale degrado delle prestazioni. Random Read Performance: da molto buona ad ottima; in genere migliora con l’aumentare della dimensione delle stripe. Random Write Performance: scarsa dovuta alla ridondanza elevata. Sequential Read Performance: da buona a molto buona; in genere migliore per stripe di dimensioni inferiori. Sequential Write Performance: scarsa. Costo: Elevato. Utilizzi consigliati: In teoria il RAID 6 é consigliabile negli stessi casi del RAID 5 ma in situazioni dove sia necessaria una maggiore tolleranza agli errori. In pratica il sistema RAID 6 non ha avuto la stessa diffusione poiché poche aziende sono in grado di pagare i costi aggiuntivi per far fronte ad un evento raro come la rottura simultanea di 2 o piú dischi. Si puó verificare il caso in cui l’intero ARRAY venga distrutto ma chiaramente in questa situazione il sistema RAID non é di nessuna utilitá. Inoltre l’introduzione nel RAID 5 del sistema di hot swapping e di ricostruzione automatica hanno reso il sistema RAID 6 ancora meno interessante poiché il sistema RAID 5 é in grado di recuperare la rottura di un disco in poche ore(senza queste feature invece un sistema RAID 5 avrebbe richiesto un periodo di down time). Nella fascia alta del mercato il sistema RAID 6 comunque é in difficolta soprattutto nei confronti dei sistemi RAID multipli come il RAID 1+0 che permette qualche grado di tolleranza rispetto a rotture multiple insieme ad un aumento delle prestazioni. 6 4 Esercizio svolto Viene ora proposto un esercizio svolto per vedere l’applicazione del modello teorico sopra descritto. L’esercizio richiede di risolvere i seguenti quesiti: 1. determinare il campo di Galois GF (24 ) di 16 elementi utilizzando il polinomio primitivo q(x) = x4 + x + 1 e determinare le tabelle GFLOG(a) e GFILOG(i). 2. impostare uno schema RAID per n=3 data disk ed m=2 checksum disk. 3. data una stripe δ0 δ1 δ2 γ0 γ1 , specializzare il meccanismo di recovery nei seguenti casi: (a) perdita di δ0 ; (b) perdita di γ0 ; (c) perdita di δ0 γ0 ; (d) perdita di δ0 δ1 ; RISOLUZIONE. 1) Innanzitutto creiamo la seguente tabella che contiene i 16 elementi che compongono il campo di Galois GF (24 ) richiesto, con la relativa notazione binaria su 4 bit seguita dalla notazione decimale, che ci sará utile consultare nello svolgimento dell’esercizio: Potenza di x Polinomio Notazione binaria (4 bit) Notazione decimale - 0 1 x x2 x3 x+1 x2 + x x3 + x2 x3 + x + 1 x2 + 1 x3 + x x2 + x + 1 x3 + x2 + x x3 + x2 + x + 1 x3 + x2 + 1 x3 + 1 0000 0001 0010 0100 1000 0011 0110 1100 1011 0101 1010 0111 1110 1111 1101 1001 0 1 2 4 8 3 6 12 11 5 10 7 14 15 13 9 x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 I valori ottenuti per la colonna polinomi sono ottenuti con la seguente regola: xi = xi−1 · x = (a3 x3 + a2 x2 + a1 x1 + a0 )x = a3 x4 + a2 x3 + a1 x2 + a0 x. 7 Tabella 1: Tabelle per GF (24 ) a GFLOG(a) 0 - 1 0 2 1 3 4 4 2 5 8 6 5 i GFILOG(i) 0 1 1 2 2 4 3 8 4 3 5 6 6 12 7 10 7 11 8 3 9 14 8 5 9 10 10 9 11 7 10 7 11 14 12 6 12 15 13 13 13 13 14 11 15 12 14 9 Se é a3 = 0 allora la formula si riduce a xi = a2 x3 + a1 x2 + a0 x altrimenti deve essere a3 = 1 e perció si ottiene xi = a3 x4 + a2 x3 + a1 x2 + a0 x + q(x). Di seguito creiamo le tabelle GFLOG(a) e GFILOG(i) precedentemente definite a partire dai dati inseriti nella tabella precedente: 2) Lo schema RAID che viene chiesto di impostare é composto da n=3 data disk ed m=2 checksum disk. Come prima cosa creiamo la matrice F: F= 1 1 1 1 1 0 0 1 1 2 22 = 3 32 4 42 1 1 1 1 1 0 1 2 3 4 0 1 4 5 3 La matrice F, come detto precedentemente, ha dimensione (n + m) · n quindi in questo caso ha dimensione 5x3. A titolo di esempio, vengono riportati i conti eseguiti per determinare il valore dell’elemento f32 = 32 : essendo 3 = x4 ció implica che 32 = x8 e sfruttando l’informazione contenuta nella tabella GFILOG con i = 8 si puó concludere che 32 = x8 = 5. Prima di procedere é meglio attribuire dei nomi alle tre colonne della matrice F per semplificare la notazione utilizzata nell’indicare le operazioni sulle colonne della matrice che verranno eseguite al fine di ottenere la matrice B sopra presentata. Le colonne sono C0 , C1 , C2 , e le prime operazioni da eseguire su di esse sono: C0 ← C0 + C1 C2 ← C2 + C1 8 che danno luogo alle seguenti operazioni sui termini presenti nella matrice: 1 0 1+2 1+3 1+4 0 0 1 0 2 4+2 3 5+3 4 3+4 Le somme indicate non devono essere eseguite come somme di interi ma é necessario fare l’XOR bit a bit. Per esempio, il calcolo da eseguire per la cella f32 é il seguente: 0101 5 + 3 → 0011 = 6 0110 Eseguendo tutte le somme nel modo indicato si ottiene la seguente matrice: 1 0 3 2 5 0 1 2 3 4 0 0 6 6 7 Osservando la matrice ottenuta si vede come le prime due righe abbiano la forma corretta per essere parte della matrice identitá perció la prossima operazione da eseguire consiste nel moltiplicare la colonne C2 per 6−1 affinché l’elemento f22 = 6 diventi pari ad 1. Di particolare interesse é il calcolo che deve essere eseguito per l’elemento in posizione f42 = 7 · 6−1 = x10 x10 = x20 = x15 x5 = x5 = 6. La matrice che si ottiene é perció la seguente: 1 0 3 2 5 0 1 2 3 4 0 0 1 1 6 É ora necessario rendere nulli i valori presenti in f20 e f21 affinché la terza riga della matrice, assieme alle due che la precedono, formi la matrice identitá. Per fare ció le operazioni sulle colonne da eseguire sono le seguenti: C0 ← C0 + 3C2 C1 ← C1 + 2C2 9 che danno luogo, perció, ai seguenti passaggi di calcolo: 1 0 0 1 0 0 2+3 3+2 5+3·6 4+2·6 0 0 1 1 6 = 1 0 0 1 15 0 1 0 1 8 0 0 1 1 6 La matrice ottenuta presenta la matrice identitá I3,3 nella parte alta ed é perció la matrice B che volevamo ottenere: 1 0 0 0 1 0 B= 0 0 1 1 1 1 15 8 6 3) L’ultimo punto dell’esercizio richiede di eseguire la specializzazione del meccanismo di recovery a partire dalla stripe δ0 δ1 δ2 γ0 γ1 a seconda che si verifichino diversi tipi di perdite. Prima di analizzare i singoli casi é peró necessario esprimere i 2 blocchi della stripe provenienti dai checksum disk in funzione dei 3 blocchi della stripe contenuti nei data disk utilizzando le informazioni contenute nella matrice G2,3 presente al di sotto della matrice identitá I3,3 nella matrice B calcolata al passo precedente. Utilizzando la formula Γ = G · ∆ si ottiene: γ0 γ1 ! = 1 1 1 15 8 6 ! δ0 δ1 δ2 che restituisce i valori γ0 = δ0 + δ1 + δ2 e γ1 = 15δ0 + 8δ1 + 6δ2 . (a) Perdita di δ0 . Posso recuperare il blocco δ0 eseguendo: δ0 ← γ0 + δ1 + δ2 (b) Perdita di γ0 . Il recupero avviene mediante l’esecuzione della seguente istruzione: γ0 ← δ0 + δ1 + δ2 (c) Perdita di δ0 e γ0 . Il recupero deve essere eseguito in modo ordinato, procedendo prima con il ripristino di δ0 tramite l’operazione: δ0 ← 15−1 (γ1 + 8δ1 + 6δ2 ) 10 e poi procedendo al recupero di γ0 nel modo seguente: γ0 ← δ0 + δ1 + δ2 (d) Perdita di δ0 e δ1 . In questo caso il recupero richiede la risoluzione del sistema: ( δ0 + δ1 = γ0 + γ2 15δ0 + 8δ1 = γ1 + 6γ2 Viene lasciato da svolgere allo studente il seguente esercizio. Si consideri il campo di Galos GF (2w ) e sia n tale che 2w ≥ n + 2. Si definisca la matrice In,n Bn+2,n 1 1 x0 x1 ... ... 1 xn−1 dove x é generatore di GF (2w )\{0}. 1. Dimostrare che per B vale la Proprietá 2 ; 2. Utilizzando B come matrice di codifica, specializzare il meccanismo di recovery nel caso di rottura di 1 o 2 dischi. Bibliografia [1] James S. Plank A Tutorial on Reed-Solomon Coding for Fault-Tolerance in RAID-like Systems Technical Report CS-96-332, Department of Computer Science University of Tennessee, 1997. [2] James S. Plank, Ying Ding Note: Correction to the 1997 Tutorial on ReedSolomon Coding. Technical Report UT-CS-03-504, Department of Computer Science University of Tennessee,2003. [3] Tekram System CO, About RAID 6 Sito http://www.tekram.com.cn:8060/files/About%20RAID%206.pdf. 11 web